入门
TRANSFORMERS 应用
高阶指南
MAIN CLASSES(主要类别)
模型
帮助
快速tour
快速了解transformer库特征,可为自然语言理解任务下载预训练模型,例如文本情感分析,可实现自然语言生成,如【问答、摘要】或翻译。
首先我们会使用pipeline API 应用这些预训练模型,然后,我们将进一步挖掘,看看库如何让您访问这些模型,并帮助您对数据进行预处理。
文档中的代码提供了两种深度学习框架语言(pytorch 和 tensorflow)
transformer提供下列解决方案
情感分析:文本是积极的还是消极的?
文本生成(英语 ):给一个提示,模型将生成以下内容
名称实体识别(NER):在句子中,标注标签实体
问答:为模型提供上下文和问题,并从上下文中提取答案
文本填充:如用mask填充空值
总结:生成长文本的摘要
翻译:语言翻译
特征提取:返回文本的tensor representation
情感分析样例
首次执行此命令时,预训练模型和分词器需要被下载和缓存,分词器为模型处理文本,以便模型进行预测,pipeline将这两部分组合在一起,举例:
>>> from transformers import pipeline
>>> classifier = pipeline('sentiment-analysis')
>>> classifier('We are very happy to show you the Transformers library.')
[{'label': 'POSITIVE', 'score': 0.9997795224189758}]
也可传入列表句子,模型会进行批处理,返回列表结果;例如:
>>> 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)}")
label: POSITIVE, with score: 0.9998
label: NEGATIVE, with score: 0.5309
可以看到第二句话被标签为消极,但得分居中;
默认情况下,为pipeline 下载“distilbert-base-uncased-finetuned-sst-2-english”模型,模型使用的是DistilBERT 框架,基于SST-2数据集进行微调,来完成情感分析任务。
也可以指定模型,例如:
>>> classifier = pipeline('sentiment-analysis', model="nlptown/bert-base-multilingual-uncased-sentiment")
>
加载本地模型,需要两个步骤,首先需要用AUTOTokenizer下载Tokenizer并完成实例化,其次用"AutoModelForSequenceClassification"下载模型本身
>>> from transformers import AutoTokenizer, AutoModelForSequenceClassification
>>> 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, tokenizer=tokenizer)
使用分析器
第一步:分词器将文本分割成单词,通常称为tokens,有多种规则,因此我们要使用模型名称实例化tokenizer,确保训练模型时使用的是相同的规则。
第二步:将tokens转化为数字,构建tensor去拟合模型,tokenizer有一个词汇表vocab, from_pretrained和pretrained需使用相同的词汇表。
>>> inputs = tokenizer("We are very happy to show you the Transformers library.")
>>> print(inputs)
{'input_ids': [101, 2057, 2024, 2200, 3407, 2000, 2265, 2017, 1996, 100, 19081, 3075, 1012, 102], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}
Copy to clipboard
分词器接受列表输入,用模型进行批处理,填充列表元素到相同长度,清空并填充到模型可接受的最大长度,并指定返回值。
>>> tf_batch = tokenizer(
... ["We are very happy to show you the Transformers library.", "We hope you don't hate it."],
... padding=True,
... truncation=True,
... max_length=512,
... return_tensors="tf"
... )
模型自动填充案例如下:
input_ids和attention_mask均用0进行了填充
>>> for key, value in tf_batch.items():
... print(f"{key}: {value.numpy().tolist()}")
input_ids: [[101, 2057, 2024, 2200, 3407, 2000, 2265, 2017, 1996, 100, 19081, 3075, 1012, 102], [101, 2057, 3246, 2017, 2123, 1005, 1056, 5223, 2009, 1012, 102, 0, 0, 0]]
attention_mask: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0]]
模型应用
>>> tf_outputs = tf_model(tf_batch)
模型输出
>>> print(tf_outputs)
TFSequenceClassifierOutput(loss=None, logits=<tf.Tensor: shape=(2, 2), dtype=float32, numpy=
array([[-4.0832963 , 4.3364143 ],
[ 0.081807 , -0.04178282]], dtype=float32)>, hidden_states=None, attentions=None)
自定义tokenizer和模型,代替自动获取
>>> from transformers import DistilBertTokenizer, DistilBertForSequenceClassification
>>> model_name = "distilbert-base-uncased-finetuned-sst-2-english"
>>> model = DistilBertForSequenceClassification.from_pretrained(model_name)
>>> tokenizer = DistilBertTokenizer.from_pretrained(model_name)
Glossary 术语
autoencoding 模型: MLM
autoregressive 模型: CLM
CLM:因果语言建模,模型读取预训练任务文本,然后预测接下来的词汇。通常的实现方法是给定完整语句,但隐藏其中部分词汇,用模型进行预测;
DEEP LEARNING:多层神经网络机器学习算法;
MLM:掩码语言建模,破坏文本,随机填充一些特殊字符,然后去预测原始文本;
多模式:将文本与另一种输入(例如图像)相结合的任务;
自然语言生成:生成相关性文本;
自然语言处理:一种通用方法处理文本;
自然语言理解:理解整个文本(例如:文本分类,词汇分类)
预训练模型:通过数据进行预训练,模型采用的是监督学习方法,如:学习本文预测下一个词汇,随机填充词汇后进行预测;
循环神经网络:循环处理文本;
自注意力机制:从关注到关注重点;
seq2seq or sequence-to-sequence:通过输入生成新的句子,如翻译、汇总,聊天(问答);
token:句子的一部分,通常是一个单词,标点符号;
transformer:基于深度学习模型框架自注意力机制
模型输入
每一个模型都是不同的也有相似之处;因此,大多数模型使用相同的输入,这里将详细介绍这些输入以及使用示例。
模型通常仅需要input_ids参数,她们通常是token指数、数值;
每一个分词器的工作方式不同,但底层工作机制是一样的,这是一个Bert分词器的案例,wordpiece的分词器
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained("bert-base-cased")
sequence = "A Titan RTX has 24GB of VRAM"
分词器用词汇表将语句分割成可用的c z
tokenized_sequence = tokenizer.tokenize(sequence)
print(tokenized_sequence)
['A', 'Titan', 'R', '##T', '##X', 'has', '24', '##GB', 'of', 'V', '##RA', '##M']
提示:这里可以添加计划学习的时间
例如:
1、 周一至周五晚上 7 点—晚上9点
2、 周六上午 9 点-上午 11 点
3、 周日下午 3 点-下午 6 点
提示:这里统计学习计划的总量
例如:
1、 技术笔记 2 遍
2、CSDN 技术博客 3 篇
3、 学习的 vlog 视频 1 个