
使用NestJS和Prisma構建REST API:身份驗證
文本分類是指根據給定的文本內容,將其歸類到一個或多個預定義的類別中的過程。例如:
文本分類的核心思想是通過機器學習模型從大量標注好的文本數據中學習特征,并根據這些特征對新的文本進行分類。具體步驟如下:
根據 Hugging Face 官網的數據,當前已有超過74,737個文本分類模型供選擇,涵蓋了多種語言和應用場景:
文本分類技術廣泛應用于各個領域,以下是幾個典型的應用場景:
在 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 上下載量最大的文本分類模型之一,具有較高的準確性和效率。
首先,確保安裝了 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)
# 后續用法與自動下載相同
我們可以看到,任務的輸出結果,和自動下載是一樣的。
通過 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()
.
通過瀏覽器打開地址,就可以通過可視化的方式進行文本分類了:
本文詳細介紹了 Transformers 框架中的text-classification
任務,涵蓋了任務描述、應用場景、示例代碼以及具體的實戰案例。通過使用 Transformers 的 Pipeline API,我們可以輕松地實現文本分類任務,而無需深入了解復雜的模型結構和算法。無論是情感分析、垃圾郵件檢測還是主題分類,Transformers 框架都能提供強大的支持,幫助您快速構建高效的文字處理系統。
老牛同學將繼續推出更多關于 Transformers 框架 Pipeline 任務的文章,敬請期待!大家若有任何問題或建議,歡迎在評論區留言交流!
文章轉自微信公眾號@老牛同學