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

2023-11-13

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实例的时候,指明模型以及标记器。

如果你没有找到一个在和你用到的数据类似的预训练模型,你需要去自己把模型用在你的数据上并进行微调。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

transformers库的使用【一】——pipeline的简单使用 的相关文章

  • 彻底删除VMware虚拟机

    您是否和我一样被VMware气到了呢 您是否再也不想理VMware了呢 您是否不想再在自己电脑上看到VMware这几个英文字母了呢 来吧 跟着我的步骤 一起和VMware说拜拜吧 一 在卸载VMware虚拟机之前 要先把与VMware相关的
  • 工业上的数控机床所属计算机应用的什么领域,以下哪一项不是企业初步战略方案包括的内容?()。...

    摘要 弹簧振子的振幅增加一倍 下业初则 步战工业机器人最重要的核心能力 社会学是指一门科学 略方即它以解释的方式来理解社会行动 略方据此 通过社会行为的过程及其结果 对社会行为作出因果解释 因此 社会学的研究对象是 研究的方法是 弹簧振子的
  • 西门子S7 模拟器使用教程

    一 S7协议概述 S7协议是西门子S7系列PLC通信的核心协议 它是一种位于传输层之上的通信协议 其物理层 数据链路层可以是MPI总线 PROFIBUS总线或者工业以太网 S7以太网协议本身也是TCP IP协议簇的一员 S7协议在OSI中的
  • PCB中过孔和通孔焊盘的区别

    在PCB设计中 过孔VIA和焊盘PAD都可以实现相似的功能 它们都能插入元件管脚 特别是对于直插 DIP 封装的的器件来说 几乎是一样的 但是 在PCB制造中 它们的处理方法是不一样的 1 VIA的孔在设计中表明多少 钻孔就是多少 然后还要
  • 接口继承_1

    摘自Jeffrey的CLR via CSharp 接口方法默认是virtual and sealed 意思是接口方法默认是没有继承的 这一点在你需要多态时需要注意 Base b new Base Derived d new Derived
  • 修改Windows Server 2012远程桌面连接端口并连接

    目录 文章目录 目录 一 修改注册表 二 添加防火墙放行端口 三 控制面板设置允许被远程连接 四 重启远程桌面服务 五 进行远程连接 一 修改注册表 步骤1 打开注册表 方法一 win键 R调出命令运行输入框 输入 regedit exe
  • 网络安全-常见面试题(Web、渗透测试、密码学、Linux等)

    目录 WEB安全 OWASP Top 10 2017 Injection 注入攻击 Broken Authentication 失效的身份认证 Sensitive Data Exposure 敏感数据泄露 XXE XML 外部实体 Brok

随机推荐

  • C#开发-----百变方块游戏

    转载请标明是引用于 http blog csdn net chenyujing1234 例子代码 http www rayfile com zh cn files b6ed0bc0 8e9e 11e1 8178 0015c55db73d n
  • Web前端开发精品课HTML CSS JavaScript基础教程HTML部分知识点总结

    内容来自莫振杰Web前端开发精品课HTML CSS JavaScript基础教程章节总结 第1章 HTML简介 1 前端技术简介 1 从Web1 0到Web2 0 网页制作已经变成前端开发了 对于前端开发来说 你要学的并不是什么 网页三剑客
  • 宿主机无法ping通docker容器IP解决

    背景 安装docker后 发现启动容器的端口8082 映射到宿主机的端口80访问主机没有反应 此时进入容器查看日志 发现并没有请求打进来 现象 正在连接 localhost localhost 1 80 已连接 已发出 HTTP 请求 正在
  • python3 Flask 简单入门

    flask是python里面最轻便的框架 这里演示了访问主页 登陆成功 登陆失败的页面显示 在编写URL处理函数时 除了配置URL外 从HTTP请求拿到用户数据也是非常重要的 Web框架都提供了自己的API来实现这些功能 Flask通过re
  • android游戏开发基础

    学习android已经差不多接近一年了 以前一直做的android应用 现在准备搞android游戏开发 觉得以前都没能把做应用的经验总结下来 现在决定要把游戏这块的记录下来 声明我也是初学者 首先得有一定的数学与物理基础 其次得具有一定的
  • ICLR 2022 超越Focal Loss PolyLoss用1行代码+1个超参完成超车

    pytorch版 有两种 交叉熵版和Poly1FocalLossloss GitHub abhuse polyloss pytorch Polyloss Pytorch Implementation 分类版 PolyLoss polylos
  • java-jdbc-db2

    0 得到结果集的一种方式 查询得到结果集的另一种方式 Statement stmt con createStatement String sql select value from restart ResultSet rs stmt exe
  • 交换机(三层)转发原理

    1 三层交换机转发原理 如图所示 假如主机A想访问主机B 首先主机A会将自己的IP地址和子网掩码做与操作 得出网路地址 如 Host A的IP地址100 1 1 2与自身掩码255 255 255 0做与操作后 得到的网络号是100 1 1
  • window.parent.document解决方案【原生js或jQuery 实现父窗口的问题】

    做WEB前端开发的过程中 经常会有这样的需求 用户点击 编辑 按钮 弹出一个对话框 在里边修改相应的值 然后把修改后的值显示在原页面 最后点击保存 用window parent document getElementById setAttr
  • application.yml、mybatis-generatorConfiguration配置

    pom xml配置
  • 三. Netty 进阶

    Netty学习之路 一 NIO基础 二 Netty 入门 三 Netty 进阶 四 Netty 优化与源码 学完netty手写了一个rpc项目 链接 https gitee com springchuntian1 netty rpc 笔记源
  • Spring 循环依赖

    Spring 循环依赖 1 什么是循环依赖 抛开 Spring 框架不说 先来了解循环依赖的本质 从上图总可以看出依赖关系 A 依赖 B B 依赖 C C 依赖 A 这种依赖的关系就造成了循环依赖的发生 让我们从代码的角度来看看循环依赖是如
  • 代码失效 java_异常:java.io.StreamCorruptedException:类型代码无效:00

    java rmi UnmarshalException failed to unmarshal MY ENTITY nested exception is java io StreamCorruptedException invalid t
  • Qt:在widget的外部进行绘制带有坐标轴的图像

    Widget h ifndef WIDGET H define WIDGET H include
  • idea 使用相对路径报错:FileNotFoundException

    idea默认工作环境目录是当前项目 可以通过Run gt edit configurations gt working directory配置 MODULE WORKING DIR 命令可以自动定位到当前项目目录 注意当项目有不同模块 即对
  • 问题:java.lang.UnsatisfiedLinkError: no jniopencv_core in java.library.path

    一 问题 今天的程序在一台新电脑上运行 出现java lang UnsatisfiedLinkError no jniopencv core in java library path异常 具体报错日志 Exception in thread
  • Windows 仍在设置此设备的类配置。 (代码 56)

    家里电脑有线网卡出现 Windows 仍在设置此设备的类配置 代码 56 解决方法 键盘按win r 弹出运行窗口 输入 redegit 进入注册表 删除HKEY CLASSES ROOT CLSID 3d09c1ca 2bcc 40b7
  • JavaScript的OO思想(一)

    类class是Object Oriented面向对象的语言有一个标志 通过类我们可以创建任意多个具有相同属性和方法的对象 JavaScript中没有类的概念 但它也是面向对象的 只是实现方法会有所不同 创建单个对象有两种基本方法 1 使用O
  • 从平面设计转行软件测试,喜提11K+13薪,回头看看我很幸运

    如何能够成为一个优秀的人 答 一以贯之的努力 不得懈怠的人生 每天的微小积累会决定最终结果 对待未来 人生与知识的敬意 永远值得我们学习 前言 我是2020年数字媒体技术专业毕业的 转行软件测试之前做的是平面设计 毕业的时候 我并不知道有软
  • transformers库的使用【一】——pipeline的简单使用

    transformers库的使用 使用pipeline API来快速使用一些预训练模型 使用预训练模型最简单的方法就是使用pipeline transformers提供了一些任务 1 情感分析 Sentment analysis 分析文本是