目录
什么是Huggingface
Hugging Face 是一个专注于自然语言处理(NLP)和人工智能(AI)技术的平台与社区。它提供了许多强大的工具和资源,主要功能如下:
-
Transformers 库:这是 Hugging Face 的核心库之一,包含了多种预训练的深度学习模型,特别是在自然语言处理任务中非常流行,如文本分类、问答系统、机器翻译和文本生成。这些模型基于 Transformer 架构,例如 BERT、GPT、T5 等。
-
模型库(Model Hub):Hugging Face 提供了一个开放的平台,用户可以上传、共享和使用预训练的模型。这个模型库支持超过数千个模型,涵盖不同的任务和语言。
-
Datasets 库:该库包含各种开源数据集,允许研究人员和开发者轻松加载、处理和共享大型数据集,用于训练和评估模型。
-
API 和服务:Hugging Face 还提供了各种 API 和云服务,帮助用户部署和使用 AI 模型,而不需要从零开始训练模型。用户可以直接通过 API 调用模型进行推理或微调(Fine-tuning)。
-
社区和开源:Hugging Face 是一个非常活跃的开源社区,致力于推动 AI 和 NLP 的前沿技术,用户可以共享模型、教程、代码和项目。
Hugging Face 的愿景是让 AI 和 NLP 技术更加易于使用和普及,使开发者和研究人员能够快速构建和部署复杂的语言模型应用。
NLP要解决的任务
情感分析
demo
打开pycharm,在终端执行命令,它会下载并安装 Hugging Face 的 transformers
库。
pip install transfomers
如果出现下面的报错
可以改成使用清华的镜像源进行下载
pip install transformers -i https://pypi.tuna.tsinghua.edu.cn/simple
下载好后,创建一个demo文件,输入以下代码
from transformers import pipeline
# 指定模型所在路径
model_path = "D:\model"
# 加载模型
pipe = pipeline("text-classification", model=model_path)
# 使用该 pipeline 进行情感分析
result = pipe(
[
"you are good",
"sun of beach"
]
)
# 输出结果
print(result)
代码分析:这段代码的主要功能是使用 Hugging Face 的 transformers
库加载一个预训练的情感分析模型,并对给定的两个文本进行情感分析。
使用 pipeline
创建一个情感分析(sentiment analysis)模型。这个模型是预训练的,因此可以直接用于情感分类任务,通常分为正面(positive)和负面(negative)情感。
- model_path:定义了模型文件所在的本地路径。在Windows系统上,使用双反斜杠
\\
来表示路径分隔符(因为反斜杠\\
是转义字符)。这里路径指向模型存放的位置,包含了必要的文件如pytorch_model.bin
、config.json
、和vocab.txt
等。 - pipeline("text-classification"):加载一个用于文本分类的pipeline。
text-classification
是一种预定义任务,通常用于情感分析、主题分类等任务。 - model=model_path:指定了加载模型的路径,而不是自动从Hugging Face服务器下载。如果模型文件位于本地路径
D:\\model
,则会从此路径加载模型和配置文件。 - pipe([...]):对一组输入文本进行情感分析。这里输入了两个句子:"you are good" 和 "sun of beach"。
- result:保存了分析的结果,通常包括每个文本的标签(如
positive
或negative
)和置信度分数。
这里,我使用的是从本地中加载模型,因为直接通过代码去下载模型,会超时,尝试了很多次,都没有办法,所以只能在huggingface上手动下载了。
首先,在D盘中,创建model文件夹
在huggingface中下载所需要的文件,网址:Avichr/heBERT_sentiment_analysis 在 Main (huggingface.co)
注意,这里要科学上网才能访问
将下载好的三个文件放到model文件夹中
- pytorch_model.bin:模型权重文件。
- config.json:模型配置文件。
- vocab.txt:如果你的模型需要词汇表(通常是 BERT 模型),这个文件用于加载词汇表。
然后就可以运行程序,程序可对输入的语句进行情感分析
基本流程分析
这张图展示了情感分析模型的基本流程,主要包括三个阶段:Tokenizer(分词器)、Model(模型)和Post Processing(后处理)。具体流程如下:
-
Tokenizer(分词器):
- 输入的原始文本为:“This course is amazing”。
- 分词器将原始文本转换为词汇的索引 ID,即输入 ID:[101, 2023, 2607, 2003, 6429, 999, 102]。这些数字代表模型词汇表中每个词对应的编号。
-
Model(模型):
- 输入的 ID 被输入到模型中,模型处理这些数据并输出一个叫做 logits 的值。
- Logits 是未归一化的预测结果,可以认为是模型对每个类别的“置信度”,输出的 logits 为:[-4.3630, 4.6859]。
-
Post Processing(后处理):
- Logits 经过后处理后,得出分类的最终预测结果。
- 在这个例子中,情感分析任务的两个类别是正面情感和负面情感。模型预测结果显示:
- 正面情感的概率为 99.89%。
- 负面情感的概率为 0.11%。
总结来看,这个流程展示了一个情感分析模型从原始文本输入到预测输出的全过程。文本被分词成 ID,经过模型生成 logits,再通过后处理转化为最终的情感分类结果。
This course is amazing只有四个词,为什么编号不止4个?
这是一个常见的现象,原因如下:
-
特殊标记:
- 自然语言处理模型,尤其是基于 Transformer 的模型(如 BERT、GPT),会在输入序列的开头和结尾添加特殊标记。这些标记通常是
[CLS]
和[SEP]
。其中:[CLS]
标记表示句子的开始,用于汇总整个句子的语义信息。[SEP]
标记表示句子的结束,或在多句子任务中用作句子间的分隔符。
在你的例子中,输入序列的编号
[101, 2023, 2607, 2003, 6429, 999, 102]
中:101
是[CLS]
的标记。102
是[SEP]
的标记。 这两个标记导致输入的编号比实际单词数量多了 2 个。
- 自然语言处理模型,尤其是基于 Transformer 的模型(如 BERT、GPT),会在输入序列的开头和结尾添加特殊标记。这些标记通常是
-
词的分解(子词标记化):
- 现代语言模型使用的分词器通常会将一些词分解为更小的子词单元。这种机制被称为 子词标记化(Subword Tokenization)。如果模型词汇表中没有某个完整的词,它会将该词分解为几个子词。
- 在你的例子中,单词“amazing”被分解为了两个子词,其中
6429
和999
分别代表“ama”和“##zing”。这种分解是为了应对词汇表的有限性,同时增强模型处理罕见或复杂词汇的能力。
因此,虽然 “This course is amazing” 只有 4 个词,但因为包含了特殊标记和子词分解,最终的输入 ID 序列会包含更多的编号。
Tokenizer要做的事
模型名称可在huggingface官网中找到