Transformers 结构 Pipeline 使命详解:文本分类(text-classification 或 sentiment-analysis)
在自然言语处理(NLP)范畴,Text-Classification(文本分类)是一项非常重要的使命,它涉及到将文本数据分配到预界说的类别中。凭借 Transformers 结构的 Pipeline API,咱们能够轻松地运用预练习模型进行文本分类,而无需深化了解杂乱的模型结构和算法。老牛同学将经过本文具体介绍 Transformers 结构中的text-classification
使命,包括使命描绘、运用场景、示例代码以及具体的实战事例。
1. 使命简介
文本分类是指依据给定的文本内容,将其归类到一个或多个预界说的类别中的进程。例如:
- 情感剖析:判别一段文本的情感倾向,如正面、负面或中性。
- 垃圾邮件检测:辨认一封电子邮件是否为垃圾邮件。
- 主题分类:确认一篇文章归于哪个主题,如科技、体育、文娱等。
文本分类的中心思维是经过机器学习模型从很多标示好的文本数据中学习特征,并依据这些特征对新的文本进行分类。具体过程如下:
- 数据预备:搜集并标示很多的文本数据,每个文本都对应一个类别标签。
- 特征提取:将文本转换为模型能够了解的数值表明,通常是经过分词、向量化等办法。
- 模型练习:运用标示好的数据练习一个分类模型,模型会学习怎么依据输入的文本特征猜测正确的类别。
- 模型推理:关于新的未见过的文本,模型会依据学到的特征进行分类猜测。
依据 Hugging Face 官网的数据,当时已有超越74,737个文本分类模型供挑选,包括了多种言语和运用场景:
2. 运用场景
文本分类技能广泛运用于各个范畴,以下是几个典型的运用场景:
-
情感剖析:情感剖析能够协助企业了解用户对产品或服务的心情。例如,电商渠道能够经过剖析用户谈论来判别产品的受欢迎程度,交际媒体渠道能够监控用户的言论动态,乃至政府机构能够评价大众对方针的观点。
-
垃圾邮件检测:垃圾邮件检测是文本分类的一个经典运用。经过练习模型辨认垃圾邮件的特征,体系能够主动过滤掉不必要的邮件,维护用户的邮箱免受打扰。
-
主题分类:新闻网站或博客渠道能够运用文本分类技能主动为文章打上标签,协助用户更快找到感兴趣的内容。例如,一篇关于人工智能的文章能够被主动分类到“科技”类别,而一篇关于足球比赛的文章则会被分类到“体育”类别。
-
客服体系:智能客服体系能够经过文本分类技能主动辨认用户的目的,供给相应的协助。例如,当用户问询某个产品的价格时,体系能够主动将问题分类为“出售咨询”,并供给相关的产品信息。
-
医疗确诊:在医疗范畴,文本分类能够用于剖析病历记载,协助医师快速定位患者的病况。例如,经过对病历中的症状描绘进行分类,体系能够提示医师或许的疾病类型,辅佐确诊进程。
3. 使命装备
在 Transformers 结构中,text-classification
和sentiment-analysis
都是文本分类使命的不同称号。虽然两者在 Pipeline 装备中有别号联系,但在实际运用时没有差异,结构终究一致运用text-classification
作为使命称号。
咱们能够在 Transformers 结构的源代码中看到以下装备(源代码文件:./transformers/pipelines/__init__.py
):
TASK_ALIASES = {
"sentiment-analysis": "text-classification",
# 其他省掉......
}
SUPPORTED_TASKS = {
# 其他省掉......
"text-classification": {
"impl": TextClassificationPipeline,
"tf": (TFAutoModelForSequenceClassification,) if is_tf_available() else (),
"pt": (AutoModelForSequenceClassification,) if is_torch_available() else (),
"default": {
"model": {
"pt": ("distilbert-base-uncased-finetuned-sst-2-english", "714eb0f"),
"tf": ("distilbert-base-uncased-finetuned-sst-2-english", "714eb0f"),
},
},
"type": "text",
},
# 其他省掉......
}
从上面的装备能够看出,Transformers 结构默许运用的是distilbert-base-uncased-finetuned-sst-2-english
模型,这是一个在 Stanford Sentiment Treebank (SST-2) 数据集上微调过的 DistilBERT 模型,专门用于英文情感分类使命。该模型是 Hugging Face 上下载量最大的文本分类模型之一,具有较高的精确性和功率。
4. 文本分类实战
首要,保证装置了 Transformers 库和其他必要的依靠包:
pip install transformers torch
办法一:主动下载模型
咱们能够直接从 Hugging Face 下载模型。如果您的网络环境答应,能够直接下载;不然,能够经过设置镜像来加快下载进程:
import os
# 设置署理
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
# 设置本地缓存目录
cache_dir = os.path.join('D:', os.path.sep, 'ModelSpace', 'Cache')
os.environ['HF_HOME'] = cache_dir
from transformers import pipeline
# 创立Pipeline使命
nlp = pipeline("text-classification", model="distilbert/distilbert-base-uncased-finetuned-sst-2-english")
# 履行文本分类使命
result = nlp("I like Transformers.")
print(result) # 输出:[{'label': 'POSITIVE', 'score': 0.9973547458648682}]
result = nlp("I don't like overtime.")
print(result) # 输出:[{'label': 'NEGATIVE', 'score': 0.9958478212356567}]
Pipeline 使命的输出成果将类似于以下格局:
[{'label': 'POSITIVE', 'score': 0.9876}]
其间,label
表明分类成果,score
表明模型对该分类的决心分数,范围在 0 到 1 之间,值越挨近 1 表明模型越坚信该分类是正确的。
运转上述代码后,咱们能够得到比较精确的成果:喜爱归于正面(POSITIVE)心情,不喜爱归于负面(NEGATIVE)心情。
办法二:自主下载模型
如果您期望经过本地模型文件进行推理,能够依照以下过程操作。实际上,与主动下载比较,仅有的差异是指定分词器和模型即可。假定咱们下载的模型目录是/models/pipeline
,则用法如下:
from transformers import AutoTokenizer, AutoModelForSequenceClassification, pipeline
import os
# 下载模型目录
model_dir = '/models/pipeline'
# 加载分词器和模型
tokenizer = AutoTokenizer.from_pretrained(model_dir, local_files_only=True)
model = AutoModelForSequenceClassification.from_pretrained(model_dir, torch_dtype="auto", device_map="auto", local_files_only=True, num_labels=2)
# 创立Pipeline使命
nlp = pipeline("text-classification", tokenizer=tokenizer, model=model)
# 后续用法与主动下载相同
咱们能够看到,使命的输出成果,和主动下载是相同的。
4. WebUI 页面
经过 Gradio,咱们能够轻松地为 Transformers 结构中的text-classification
使命创立一个可视化的 WebUI 界面,用户能够经过浏览器输入文本并实时取得分类成果。
首要,咱们需求装置依靠包:
pip install gradio
接下来,咱们开端创立 Web 页面,咱们能够复用 Pipeline 实例:
import sys
# 直接复用Pipeline实例
sys.path.append("./")
pipeline = __import__("02-text-classification")
import gradio as gr
# 界说分类函数
def classify_text(text):
# 运用Pipeline进行分类
result = pipeline.nlp(text)
# 提取分类标签和置信度
label = result[0]['label']
score = result[0]['score']
# 回来格局化后的成果
return f"分类成果: {label}, 置信度: {score:.4f}"
# 创立Gradio界面
with gr.Blocks() as demo:
gr.Markdown("# 文本分类器")
gr.Markdown(
"这是一个根据Transformers结构的情感剖析东西。您能够输入恣意文本,点击“提交”按钮后,体系将主动判别其情感倾向(正面或负面)。")
with gr.Row():
input_text = gr.Textbox(placeholder="请输入要分类的文本...", label="输入文本")
with gr.Row():
submit_button = gr.Button("提交")
with gr.Row():
output_label = gr.Label(label="分类成果")
# 设置按钮点击事情,触发分类函数
submit_button.click(classify_text, inputs=input_text, outputs=output_label)
# 发动Gradio运用
if __name__ == "__main__":
demo.launch()
运转上述代码,咱们能够看到 URL 信息:
* Running on local URL: http://127.0.0.1:7860
To create a public link, set `share=True` in `launch()`.
经过浏览器翻开地址,就能够经过可视化的办法进行文本分类了:
5. 总结
本文具体介绍了 Transformers 结构中的text-classification
使命,包括了使命描绘、运用场景、示例代码以及具体的实战事例。经过运用 Transformers 的 Pipeline API,咱们能够轻松地完成文本分类使命,而无需深化了解杂乱的模型结构和算法。无论是情感剖析、垃圾邮件检测仍是主题分类,Transformers 结构都能供给强壮的支撑,协助您快速构建高效的文字处理体系。
老牛同学将持续推出更多关于 Transformers 结构 Pipeline 使命的文章,敬请期待!我们若有任何问题或主张,欢迎在谈论区留言沟通!
Pipeline使命:
Transformers 结构使命概览:从零开端把握 Pipeline(管道)与 Task(使命)
Transformers结构 Pipeline 使命详解:文本转音频(text-to-audio或text-to-speech)
往期引荐文章:
深化解析 Transformers 结构(一):包和目标加载中的规划巧思与实用技巧
深化解析 Transformers 结构(二):AutoModel 初始化及 Qwen2.5 模型加载全流程
深化解析 Transformers 结构(三):Qwen2.5 大模型的 AutoTokenizer 技能细节
深化解析 Transformers 结构(四):Qwen2.5/GPT 分词流程与 BPE 分词算法技能细节详解
根据 Qwen2.5-Coder 模型和 CrewAI 多智能体结构,完成智能编程体系的实战教程
vLLM CPU 和 GPU 形式署和推理 Qwen2 等大言语模型具体教程
根据 Qwen2/Lllama3 等大模型,布置团队私有化 RAG 知识库体系的具体教程(Docker+AnythingLLM)
运用 Llama3/Qwen2 等开源大模型,布置团队私有化 Code Copilot 和运用教程
根据 Qwen2 大模型微调技能具体教程(LoRA 参数高效微谐和 SwanLab 可视化监控)
ChatTTS 长音频组成和本地布置 2 种办法,让你的“儿童绘本”发声的实战教程