Hugging Face Transformers 学习1

我们来学习一下 Hugging Face Transformers 这个很方便的NLP library。本节我们首先看一下官方的 Quick Tour: https://huggingface.co/transformers/quicktour.html#

Pipeline

官方的解释从pipeline开始。它把所有的东西全部打包到了一起为一个端到端的工具,对初学者非常友好。好,首先加载pipeline

from transformers import pipeline

加载完之后我们来创建第一个模型

classifier = pipeline('sentiment-analysis')

非常简单的操作,直接告诉 pipeline我们要干啥便能得到 classifier 这个model。那么这里的 task 是 sentiment-analysis, 就是给一句话分析语气是 positive 还是 negative.

注意:

  1. 运行上面那句话之后,系统会自动下载一个 pretrained model 和 一个 tokenizer.
  2. pretrained model 就是别人已经帮你预训练好并且上载到他们的model hub的一个模型。比如说这里我们做的是 sentiment-analysis 这个任务,默认的下载模型叫 distilbert-base-uncased-finetuned-sst-2-english. 名字有点长但是很是 self-explanatory,就是使用了 DistilBERT 架构的,并且已经在 SST-2 这个 dataset 上 fine-tuned 过的一个model,那这个数据集本身就是做文本情感分析的,所以很适合我们自己的 sentiment-analysis task。
  3. 另一个tokenizer 是什么尼?他就是一个对文本的预处理器。每个model都有一个对应的tokenizer,来确保你使用时候对文本的预处理和他训练时候对文本的预处理是一致的。
  4. pipeline这个类的作用就是把 model 和 tokenizer 打包在一起 并 post-process 模型输出的 predictions 为可读的形式,这样直接输出的结果你就知道是positive还是negative了。
  5. 除了pretrained model 和 tokenizer,实际上pipeline还打包了一个模型配置configuration,我们暂且用不到,在本文最后修改模型架构时候再说。

使用pipeline

下面我们可以尝试一下用 classifier 这个模型了,看看表现如何

classifier('We are very happy to show you the 🤗 Transformers library.')

# output: {'label': 'POSITIVE', 'score': 0.9997795224189758}]

上例中,我们输入了一句话给classifier,然后它直接输出了这句话是pos还是nega还有对应的打分,这个打分实际上是最后softmax输出的概率值。我们也可以直接输入一个batch

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)}")

# output: label: POSITIVE, with score: 0.9998
# output: NEGATIVE, with score: 0.5309

可以看到,pipeline 实现的是一个端到端的model,使用非常方便。

其他模型

model hub 上的其他模型

如果想使用其他的模型,可以在 model hub 里面找,比如说我们想用 nlptown/bert-base-multilingual-uncased-sentiment” 这个模型, 那就直接把名字输入进pipeline

classifier2 = pipeline('sentiment-analysis', model="nlptown/bert-base-multilingual-uncased-sentiment")

先下载后从文件中加载

pipeline也支持我们自己的模型和自定义的tokenizer,但是我们额外需要两个类 AutoTokenizer 和 AutoModelForSequenceClassification (若使用tensorflow则是TFAutoModelForSequenceClassification)

from transformers import AutoTokenizer, AutoModelForSequenceClassification

AutoTokenizer 的作用是 下载我们选取model对应的 tokenizer 并且实例化这个 tokenizer

AutoModelForSequenceClassification 作用是下载modek身,注意不同任务我们需要使用不同的class,具体对应关系在 task summary tutorial中

model_name = "nlptown/bert-base-multilingual-uncased-sentiment"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
classifier = pipeline('sentiment-analysis', model=model
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值