参考doc: https://transformers.run/c2/2021-12-08-transformers-note-1/
transformer库
是个啥:封装一些NLP的东西,快速开箱即用,现在也多应用在大模型。
NLP/ LLM 基本过程
整体过程:
- 预处理,将文本转换为模型能够接受的输入数据
- 模型推理
- 结果转换,将模型结果转换为文字等。
pipeline
Transformers 库将目前的 NLP 任务归纳为几下几类:
- 文本分类:例如情感分析、句子对关系判断等;
- 对文本中的词语进行分类:例如词性标注 (POS)、命名实体识别 (NER) 等;
- 文本生成:例如填充预设的模板 (prompt)、预测文本中被遮掩掉 (masked) 的词语;
- 从文本中抽取答案:例如根据给定的问题从一段文本中抽取出对应的答案;
- 根据输入文本生成新的句子:例如文本翻译、自动摘要等。
可以利用pipeline直接丢进去自然语言,然后直接能够获得结果。(正常在没有指定模型的情况下,应该是去huggingface上面下载模型缓存)
pipeline 模型会自动完成以下三个步骤:
- 将文本预处理为模型可以理解的格式;
- 将预处理好的文本送入模型;
- 对模型的预测值进行后处理,输出人类可以理解的格式。
e.g. 使用pipeline完成情感分析
from transformers import pipelineclassifier = pipeline("sentiment-analysis")
result = classifier("I've been waiting for a HuggingFace course my whole life.")
print(result)
results = classifier(["I've been waiting for a HuggingFace course my whole life.", "I hate this so much!"]
)
print(results)
No model was supplied, defaulted to distilbert-base-uncased-finetuned-sst-2-english (https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english)[{'label': 'POSITIVE', 'score': 0.9598048329353333}]
[{'label': 'POSITIVE', 'score': 0.9598048329353333}, {'label': 'NEGATIVE', 'score': 0.9994558691978455}]
模型与分词器(tokenizer)
啥是模型:
上层理解:NLP之中,本质上需要输入一段自然语言,完成一定的工作,返回一个人类想要的结果。那么模型就是能够完成这个一定的工作的东西。
中层理解:这个一定的工作实际上就是一堆堆的计算。
底层理解:需要进行一堆堆计算,这些模型实际上就是矩阵中的参数。通过这一堆堆已经保存下来的参数,与输入的东西进行计算。
啥是分词器:
在NLP之中,需要输入的是自然语言,但是在底层之中,实际上需要完成矩阵计算。再计算机里面,自然语言一般使用各种二进制编码方式进行保存,这显然不能直接进行矩阵计算,所以需要进行转换,也就是利用分词器将自然语言转换成可以计算的向量。
模型操作
模型加载:
文章提及两种方式:
- autoModel加载
- model类加载
autoModel加载:
- 使用checkpoint进行加载
- 这个checkpoint名称应该就是Huggingface上面的名称。
- 配置好之后就会去huggingface上面下载模型下来。
from transformers import AutoModelcheckpoint = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModel.from_pretrained(checkpoint)
model类加载:
- transformers里面应该是预制一堆现在热门模型的model
- 直接用热门模型的model.from_pretrained()就行
- 里面参数可以是checkpoint,也可以是本地的
from transformers import BertModelmodel = BertModel.from_pretrained("bert-base-cased")
结论:如果使用checkpoint进行加载一般就使用automodel。如果进行本地加载一般就是用model.