分享
3.4 Transformers 代码实操
输入“/”快速插入内容
3.4 Transformer
s
代码实操
飞书用户5190
飞书用户6273
2024年7月12日修改
看到这里,我们已经知道了transformer的结构,理论上我们已经可以自己搭建一个transformer 模型,并自己动手写一个训练脚本,拉起训练任务,最终获得我们想要的模型。但是世界上其实有很多nlper,每天都在写模型训练、推理、评估脚本,俗称“造轮子”,因此就有人想,能不能造一个通用的轮子呢?答案是有的,它就是transformers库,有了这个“轮子”,我们编写代码的效率也会大幅提高,这也是为什么在这一章我们要介绍transformers库。
1.
什么是 Transformers 库
要了解transformer库,首先我们要介绍
Huggingface(抱抱脸)社区
,在这个网站上,用户可以下载预训练模型、数据集和代码,同时也可以上传自己的预训练模型、数据和代码,你可以将它理解为深度学习的github。同时,Huggingface 给用户提供了调用预训练模型的一系列的api,其中transformers库就是一个很好用的库,它不仅包含了许多预训练的模型,比如BERT、GPT-2、GPT-3、RoBERTa等,而且可以将这些模型便捷地用于各种NLP任务,如文本分类、情感分析、翻译、问答系统等。
2.
如何使用 Transformers 库
安装 transformers 库
让我们来看看如何安装transformers库,假设你已经有一个python环境,直接pip install 即可
代码块
Bash
pip install transformers
当然你也可以通过github下载,这种方式方便你查看和修改 transformers库的源代码
代码块
Bash
git clone git@github.com:huggingface/transformers.git
cd transformers
pip install -e.
以一个简单的例子快速开始
我们先来看一个官方的 Demo, 该 Demo 可以实现文本的情感分析任务。
使用pipeline完成文本句子的情感分析
我们直接使用transformers库的pipeline类,该类创建的实例可以用于我们这个任务上
首先我们导入 transformers库 和
pipeline类,在实例化的时候
,
输入参数"sentiment-analysis"即可
代码块
Python
from transformers import pipeline
classifier = pipeline("sentiment-analysis")
pipeline()
会下载并缓存一个用于情感分析的默认的
预训练模型
和分词器(tokenizer),
由于我们没有指定模型,所以是transformers库默认的模型和分词器
代码块
Python
classifier("We are very happy to show you the 🤗 Transformers library.")
运行代码,输出是该句子的
label
(消极/积极),以及这个label的置信分数(
score
)
代码块
Python
[{'label': 'POSITIVE', 'score': 0.9998}]
如果你有不止一个输入,可以把所有输入放入一个列表然后传给
pipeline()
,它将会返回一个字典列表:
代码块
Python
results = classifier(["We are very happy to show you the 🤗 Transformers library.", "We hope you don't hate it."])
for result in results:
print(f"label: {result['label']}, with score: {round(result['score'], 4)}")
输出将会是:
代码块
Python
label: POSITIVE, with score: 0.9998
label: NEGATIVE, with score: 0.5309
通过使用pipeline类,我们很轻松地完成了一个情感识别的任务!
此时,你可能还会有疑问:如果我想要调用别的模型呢?
在 pipeline 中使用另一个模型和分词器
pipeline()
可以容纳
Hub
中的任何模型,这让
pipeline()
更容易适用于其他用例。比如,你想要一个能够处理法语文本的模型,就可以使用 Hub 上的标记来筛选出合适的模型。靠前的筛选结果会返回一个为情感分析微调的多语言的
BERT 模型
,你可以将它用于法语文本:
代码块
Python
model_name = "nlptown/bert-base-multilingual-uncased-sentiment"
使用
AutoModelForSequenceClassification
和
AutoTokenizer
来加载预训练模型和它关联的分词器
代码块
Python
from transformers import AutoTokenizer, AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
在
pipeline()
中指定模型和分词器,现在你就可以在法语文本上使用
classifier
了:
代码块
Python
classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)
classifier("Nous sommes très heureux de vous présenter la bibliothèque 🤗 Transformers.")
输出将会是:
代码块
Python
[{'label': '5 stars', 'score': 0.7273}]
3.
一些常用的API
上面我们简单使用pipeline完成了情感分析的任务,已经可以看到transformers库的强大之处,但是transformers库的功能远不止于此,它还有更多的功能,接下来我们简单介绍一下几种常见的API。
AutoClass
首先第一个一定是 AutoClass 类,类如其名,意思就是能帮我们自动(auto)下载抱抱脸社区上的开源模型及其分词器等。
AutoTokenizer