首页 > 其他分享 >transformers库的使用【一】——pipeline的简单使用

transformers库的使用【一】——pipeline的简单使用

时间:2023-06-22 12:55:20浏览次数:39  
标签:pipeline transformers 模型 使用 model 文本 句子

transformers库的使用
使用pipeline API来快速使用一些预训练模型

使用预训练模型最简单的方法就是使用pipeline(),transformers提供了一些任务:

1、情感分析(Sentment analysis):分析文本是正面的还是负面的
2、文本生成(in English):提供一个语句,模型将生成这条语句的下一句

3、命名实体识别(NER):在输入的语句中,对每个单词进行标记,来揭示该单词的含义(比如人物、地点等等)

4、问题回答:输入一段文本以及一个问题,来从文本中抽取出这个问题的答案

5、填补被遮蔽的文本:输入一段文本,其中一些单词被[MASK]标签取代,模型填补这些被遮蔽的文本

6、摘要生成:产生一段长文本的摘要

7、翻译:将一种语言的文本翻译成另一种语言

8、特征抽取:得到一段文本的tensor表示

接下来是一个情感分析的例子:

from transformers import pipeline

classifier = pipeline('sentiment-analysis')
当第一次执行这段代码的时候,会下载一个预训练模型(Pre-training model)以及他的一个标记器(tokenizer),标记器的作用是对文本进行预处理,随后模型会对处理过后的文本进行预测。

classifier('We are very happy to show you the Transformers library.')
[{'label':'POSITIVE','score':0.9997795224189758}]

可以看到返回值为一个列表,其中包含一个字典,字典中有两个元素,分别是这个句子的表情以及分数。

上面的例子只是输入一个句子进行情感分析,如果我们需要处理很多句子时,只需要把句子放到一个列表(list)中

sentences=["We are very happy to show you the Transformers library",
"We hope you don't hate it"]

results = classifier(sentences)

for result in results:

print(f"label:{result['label']},with score:{round(result['score'],4)}")
这里我们将两个句子以列表的形式送入classifier中,随后对得到的结果用一个for循环进行打印,得到的结果如下:

label: POSITIVE, with score: 0.9998
label: NEGATIVE, with score: 0.5309
可以看到,模型把第一个句子分成了积极,第二个句子分成了消极,但实际上第二个句子的得分更接近于一个中性。

回过头来再看这个模型,当我们创建这个模型的时候,它会默认下载一个叫做"distilbert-base-uncased-finetuned-sst-2-english"的模型,这个模型是使用DistillBERT architecture 以及在SST-2数据集上进行微调的模型。

如果希望不使用这个默认的数据集,比如说,我希望使用一个在法语数据上训练的模型。我们可以在这个网站 model hub(https://huggingface.co/models)来查看一些模型,这个网址收集了许多的由实验室训练出来的模型,同时还有一些社区模型(社区模型是指在一些特殊的数据集上对一些模型进行微调得到的模型)。

那么我们使用标签"French"以及"text-classification"进行搜索的时候,会得到一个结果"nlptown/bert-base-multilingual-uncashed-sentiment"

接下来看一下如何使用这个模型:

classifier = pipeline('sentiment-analysis',model="nlptown/bert-base-multilingual-uncashed-sentiment")
可以看到,这个分类器的定义和之前相比,只是在创建pipeline()的时候多指定了一个model字段。

还可以在指定模型的时候用存放了模型的本地的文件夹来指定模型,或者传递一个模型以及这个模型的标记器。

这个分类器不仅仅能处理英语,法语,甚至能处理西班牙语,德语。

接下来我们需要两个类,一个是AutoTokenizer,这个类是用来自动下载与模型相关联的标记器,并且可以进行实例化。

第二个类是AutoModelForSequenceClassification(在Tensorflow中是TFAutoModelForSequenceClassification)用来去下载模型本身。(注意:⚠️如果我们在别的任务上使用这个库,模型的类会发生改变)

from transformers import AutoTokenizer,AutoModelForSequenceClassification
为了下载我们那之前指定的模型和标记器,需要使用一个叫做from_pretrained()的方法

model_name ="nlptown/bert-base-multilingual-uncashed-sentiment"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
classifier = pipeline('sentiment-analysis',model=model,tokenizer=tokenizer)
在创建pipeline实例的时候,指明模型以及标记器。

如果你没有找到一个在和你用到的数据类似的预训练模型,你需要去自己把模型用在你的数据上并进行微调。
————————————————
版权声明:本文为CSDN博主「桉夏与猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_28790663/article/details/115372770

标签:pipeline,transformers,模型,使用,model,文本,句子
From: https://www.cnblogs.com/chinasoft/p/17497670.html

相关文章

  • Huggingface Transformers库学习笔记(一):入门(Get started)
    前言Huggingface的Transformers库是一个很棒的项目,该库提供了用于自然语言理解(NLU)任务(如分析文本的情感)和自然语言生成(NLG)任务(如用新文本完成提示或用另一种语言翻译)的预先训练的模型。其收录了在100多种语言上超过32种预训练模型。这些先进的模型通过这个库可以非常轻松......
  • 添加一段代码,让你的网站在微信QQ提示使用浏览器访问
    <script>//跳转提示if(is_weixn_qq()){;window.location.href='https://c.pc.qq.com/middle.html?pfurl='+window.location.href;}functionis_weixn_qq(){//判断当前是否微信/QQ浏览器varua=navigator.userAgent;varisWeixin=!!/MicroMessenger/i.test......
  • 使用 iftop 来监控流量
    我们可以用iftop来查看实时的网络流量,监控TCP/IP连接等信息。它的官方网站:http://www.ex-parrot.com/~pdw/iftop/一些常用的参数命令:查看ppp0网络接口的实时流量:#iftop-ippp0以字节(bytes)为单位显示流量(预设是位bits):#iftop-B直接显示IP,不进行DNS反解:#ifto......
  • sentence-transformers(SBert)中文文本相似度预测(附代码)
    sentence-transformers(SBert)中文文本相似度预测(附代码)https://blog.csdn.net/weixin_54218079/article/details/128687878https://gitee.com/liheng103/sbert-evaluatehttps://www.sbert.net/ 训练模型创建网络:使用Sbert官方给出的预训练模型sentence_hfl_chinese-rober......
  • RestKit学习2:使用RestKit发送和接受请求
    首先请看本系列的上一篇文章:RestKit学习1:引用RestKit项目 ,这篇文章是RestKit的简单使用介绍。参考:https://github.com/RestKit/RestKit/wiki/Tutorial-%3A-Introduction-to-RestKitRestKit支持网络层的请求,网络层的功能包括:建立和调度网络请求,以及请求结果响应处理。一般来说,我们......
  • SentenceTransformers库介绍
     https://blog.csdn.net/m0_47256162/article/details/129380499SentenceTransformer是一个Python框架,用于句子、文本和图像嵌入Embedding。这个框架计算超过100种语言的句子或文本嵌入。然后,这些嵌入可以进行比较,例如与余弦相似度进行比较,以找到具有相似含义的句子,这对于语......
  • 同一网段下ping不通电脑以及everything的http服务器使用
    U盘沾水暂时不能用,想用机器A上的everything的http服务器拉点文件到另外的机器B上。但不能访问到那台电脑A,第一想法是ping一下那台电脑是否能通,结果ping也ping不通,显示超时。上网搜了一下是网络属性那里不能被其他电脑发现,具体的解决方案是控制面板\网络和Inte......
  • EventBus源码赏析一 —— 基本使用
    EventBus简介EventBus是一种用于Android的发布/订阅事件总线。我们经常用来在不同界面,不同线程传递数据,它解耦了事件发送方和事件处理方。虽然Android本身提供了LocalBroadcastReceiver类可以实现类似的功能,但是LocalBroadcastReceiver使用起来稍微繁琐,而且传递数据大小也受in......
  • 【Android】如何实现同一个布局保证高度不变,使用不同高度的背景
    背景预实现一个切换tab,实现选中与未选中的背景切换,特别之处在于选中背景图和未选中背景图高度不相同,切换之后需要在java代码中动态设置LayoutParams改变高度。预期效果当前问题点选中背景为.9图,未选中背景为xml中通过shape实现。将当前ViewGroup设置为选中状态的固定高度选中效果正......
  • 条款02:尽量使用const、enum、inline替换define
    文中说用enum代替define,只能说算是define在定义常量时的一种替代品,不能说明两者有何优劣。所以重点还是在const和inlinevsdefine。constvsdefine:为什么建议用const而非define?define定义常量的局限性:符号是否在编译器可见。define定义的常量在预处理阶段进行宏替换,符号......