鍵.png)
使用NestJS和Prisma構(gòu)建REST API:身份驗(yàn)證
文本分類是指根據(jù)給定的文本內(nèi)容,將其歸類到一個或多個預(yù)定義的類別中的過程。例如:
文本分類的核心思想是通過機(jī)器學(xué)習(xí)模型從大量標(biāo)注好的文本數(shù)據(jù)中學(xué)習(xí)特征,并根據(jù)這些特征對新的文本進(jìn)行分類。具體步驟如下:
根據(jù) Hugging Face 官網(wǎng)的數(shù)據(jù),當(dāng)前已有超過74,737個文本分類模型供選擇,涵蓋了多種語言和應(yīng)用場景:
文本分類技術(shù)廣泛應(yīng)用于各個領(lǐng)域,以下是幾個典型的應(yīng)用場景:
在 Transformers 框架中,text-classification
和sentiment-analysis
都是文本分類任務(wù)的不同名稱。盡管兩者在 Pipeline 配置中有別名關(guān)系,但在實(shí)際使用時沒有區(qū)別,框架最終統(tǒng)一使用text-classification
作為任務(wù)名稱。
我們可以在 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 框架默認(rèn)使用的是distilbert-base-uncased-finetuned-sst-2-english
模型,這是一個在 Stanford Sentiment Treebank (SST-2) 數(shù)據(jù)集上微調(diào)過的 DistilBERT 模型,專門用于英文情感分類任務(wù)。該模型是 Hugging Face 上下載量最大的文本分類模型之一,具有較高的準(zhǔn)確性和效率。
首先,確保安裝了 Transformers 庫和其他必要的依賴包:
pip install transformers torch
我們可以直接從 Hugging Face 下載模型。如果您的網(wǎng)絡(luò)環(huán)境允許,可以直接下載;否則,可以通過設(shè)置鏡像來加速下載過程:
import os
# 設(shè)置代理
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
# 設(shè)置本地緩存目錄
cache_dir = os.path.join('D:', os.path.sep, 'ModelSpace', 'Cache')
os.environ['HF_HOME'] = cache_dir
from transformers import pipeline
# 創(chuàng)建Pipeline任務(wù)
nlp = pipeline("text-classification", model="distilbert/distilbert-base-uncased-finetuned-sst-2-english")
# 執(zhí)行文本分類任務(wù)
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 任務(wù)的輸出結(jié)果將類似于以下格式:
[{'label': 'POSITIVE', 'score': 0.9876}]
其中,label
表示分類結(jié)果,score
表示模型對該分類的信心分?jǐn)?shù),范圍在 0 到 1 之間,值越接近 1 表示模型越確信該分類是正確的。
運(yùn)行上述代碼后,我們可以得到比較準(zhǔn)確的結(jié)果:喜歡屬于正面(POSITIVE)情緒,不喜歡屬于負(fù)面(NEGATIVE)情緒。
如果您希望通過本地模型文件進(jìn)行推理,可以按照以下步驟操作。實(shí)際上,與自動下載相比,唯一的區(qū)別是指定分詞器和模型即可。假設(shè)我們下載的模型目錄是/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)
# 創(chuàng)建Pipeline任務(wù)
nlp = pipeline("text-classification", tokenizer=tokenizer, model=model)
# 后續(xù)用法與自動下載相同
我們可以看到,任務(wù)的輸出結(jié)果,和自動下載是一樣的。
通過 Gradio,我們可以輕松地為 Transformers 框架中的text-classification
任務(wù)創(chuàng)建一個可視化的 WebUI 界面,用戶可以通過瀏覽器輸入文本并實(shí)時獲得分類結(jié)果。
首先,我們需要安裝依賴包:
pip install gradio
接下來,我們開始創(chuàng)建 Web 頁面,我們可以復(fù)用 Pipeline 實(shí)例:
import sys
# 直接復(fù)用Pipeline實(shí)例
sys.path.append("./")
pipeline = __import__("02-text-classification")
import gradio as gr
# 定義分類函數(shù)
def classify_text(text):
# 使用Pipeline進(jìn)行分類
result = pipeline.nlp(text)
# 提取分類標(biāo)簽和置信度
label = result[0]['label']
score = result[0]['score']
# 返回格式化后的結(jié)果
return f"分類結(jié)果: {label}, 置信度: {score:.4f}"
# 創(chuàng)建Gradio界面
with gr.Blocks() as demo:
gr.Markdown("# 文本分類器")
gr.Markdown(
"這是一個基于Transformers框架的情感分析工具。您可以輸入任意文本,點(diǎn)擊“提交”按鈕后,系統(tǒng)將自動判斷其情感傾向(正面或負(fù)面)。")
with gr.Row():
input_text = gr.Textbox(placeholder="請輸入要分類的文本...", label="輸入文本")
with gr.Row():
submit_button = gr.Button("提交")
with gr.Row():
output_label = gr.Label(label="分類結(jié)果")
# 設(shè)置按鈕點(diǎn)擊事件,觸發(fā)分類函數(shù)
submit_button.click(classify_text, inputs=input_text, outputs=output_label)
# 啟動Gradio應(yīng)用
if __name__ == "__main__":
demo.launch()
運(yùn)行上述代碼,我們可以看到 URL 信息:
* Running on local URL: http://127.0.0.1:7860
To create a public link, set share=True
in launch()
.
通過瀏覽器打開地址,就可以通過可視化的方式進(jìn)行文本分類了:
本文詳細(xì)介紹了 Transformers 框架中的text-classification
任務(wù),涵蓋了任務(wù)描述、應(yīng)用場景、示例代碼以及具體的實(shí)戰(zhàn)案例。通過使用 Transformers 的 Pipeline API,我們可以輕松地實(shí)現(xiàn)文本分類任務(wù),而無需深入了解復(fù)雜的模型結(jié)構(gòu)和算法。無論是情感分析、垃圾郵件檢測還是主題分類,Transformers 框架都能提供強(qiáng)大的支持,幫助您快速構(gòu)建高效的文字處理系統(tǒng)。
老牛同學(xué)將繼續(xù)推出更多關(guān)于 Transformers 框架 Pipeline 任務(wù)的文章,敬請期待!大家若有任何問題或建議,歡迎在評論區(qū)留言交流!
文章轉(zhuǎn)自微信公眾號@老牛同學(xué)