1. 任務簡介

文本分類是指根據給定的文本內容,將其歸類到一個或多個預定義的類別中的過程。例如:

文本分類的核心思想是通過機器學習模型從大量標注好的文本數據中學習特征,并根據這些特征對新的文本進行分類。具體步驟如下:

  1. 數據準備:收集并標注大量的文本數據,每個文本都對應一個類別標簽。
  2. 特征提取:將文本轉換為模型可以理解的數值表示,通常是通過分詞、向量化等方式。
  3. 模型訓練:使用標注好的數據訓練一個分類模型,模型會學習如何根據輸入的文本特征預測正確的類別。
  4. 模型推理:對于新的未見過的文本,模型會根據學到的特征進行分類預測。

根據 Hugging Face 官網的數據,當前已有超過74,737個文本分類模型供選擇,涵蓋了多種語言和應用場景:

2. 應用場景

文本分類技術廣泛應用于各個領域,以下是幾個典型的應用場景:

3. 任務配置

Transformers 框架中,text-classificationsentiment-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 任務的文章,敬請期待!大家若有任何問題或建議,歡迎在評論區留言交流!

文章轉自微信公眾號@老牛同學

上一篇:

TeaDSL:支持任意 OpenAPI 網關的多語言 SDK 方案

下一篇:

AI+前端-實現圖片識別功能
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費