FastText模型訓(xùn)練指南:為產(chǎn)品經(jīng)理量身定制

0 評論 2793 瀏覽 9 收藏 11 分鐘

前段時間,遇到一個文本分類的任務(wù),需要基于書籍的一句話描述,來對書籍進行分類。一開始原本計劃自己從頭來訓(xùn)練個模型,后來發(fā)現(xiàn)預(yù)訓(xùn)練模型fastText竟然如此的優(yōu)秀,直接用小批量數(shù)據(jù)即可解決,這倒是省了不少力氣,記錄一下整個過程和大家分享。

一、fastText簡介

fastText 是一個由 Facebook AI 研究團隊開源的文本處理庫,能夠幫助用戶高效地訓(xùn)練文本分類器。它特別適用于那些需要快速實驗和部署的場景,例如在社交媒體平臺上進行情感分析、主題分類、垃圾郵件檢測等。

fastText雖然在學(xué)術(shù)上并沒有太大創(chuàng)新,但是它的優(yōu)點也非常明顯。
在文本分類任務(wù)中,fastText(淺層網(wǎng)絡(luò))往往能取得和深度網(wǎng)絡(luò)相媲美的精度,卻在訓(xùn)練時間上比深度網(wǎng)絡(luò)快許多數(shù)量級。
在標準的多核CPU上, 能夠訓(xùn)練10億詞級別語料庫的詞向量在10分鐘之內(nèi),能夠分類有著30萬多類別的50多萬句子在1分鐘之內(nèi)。
作者:王江(復(fù)旦大學(xué) 計算機應(yīng)用技術(shù)博士)https://zhuanlan.zhihu.com/p/32965521

二、fastText原理

fastText模型架構(gòu)和word2vec中的CBOW很相似, 不同之處是fastText預(yù)測標簽而CBOW預(yù)測的是中間詞,即模型架構(gòu)類似但是模型的任務(wù)不同。

關(guān)于fastText的具體原理,可以參考王江博士的知乎文章

三、fastText應(yīng)用場景

fastText 是一個高效的文本分類庫,它可以應(yīng)用于多種場景,尤其是在需要快速處理和分類大量文本數(shù)據(jù)的情況下。

以下是一些常見的應(yīng)用場景:

  • 情感分析:分析用戶評論、社交媒體帖子或其他文本數(shù)據(jù),以確定它們的情感傾向是積極的、消極的還是中性的。
  • 新聞分類:將新聞報道或文章按照主題、地點、類型等標準進行分類。
  • 意圖識別:在聊天機器人或虛擬助手中的應(yīng)用,理解用戶查詢的意圖并據(jù)此提供響應(yīng)。
  • 主題分類:對文檔、電子郵件或任何文本內(nèi)容進行分類,以識別它們涉及的主要主題或領(lǐng)域。
  • 實體識別:從文本中識別和提取特定的實體,如人名、地點、組織、產(chǎn)品名稱等。
  • 關(guān)鍵詞提?。簭奈谋局刑崛≈匾年P(guān)鍵詞或短語,用于搜索引擎優(yōu)化(SEO)或文本摘要。
  • 文本相似性:比較文本片段之間的相似性,用于檢測重復(fù)內(nèi)容、抄襲或進行文本聚類。
  • 內(nèi)容推薦:根據(jù)用戶過去的行為和偏好,對文章、產(chǎn)品或服務(wù)進行分類和推薦。

由于 fastText 的訓(xùn)練和預(yù)測速度非??欤貏e適合需要實時或接近實時處理的應(yīng)用場景。此外,它的子詞嵌套特性使其在處理形態(tài)豐富的語言或存在大量未知詞匯的情況下表現(xiàn)出色。

四、fastText實例????

任務(wù)目標:基于書籍的一句話描述,來對書籍進行分類,一開始原本計劃自己從頭來訓(xùn)練個模型,任務(wù)的實現(xiàn)過程如下:

1、數(shù)據(jù)收集:因為書籍數(shù)據(jù)來源于網(wǎng)絡(luò),暫無分類標簽,所以隨機抽取300條數(shù)據(jù),分為:訓(xùn)練集100條、測試集100條(剔除標簽)。?????????????????

2、數(shù)據(jù)標注:針對書籍描述進行打標簽,目前標簽分為22個分類,200條數(shù)據(jù),20分鐘搞定,打好的標簽如下:????????????????????????

這個格式fastText定義的,例如“__label__健康”,告訴fastText模型樣本標簽為“健康”,后面的文本是書籍的描述。

3、模型訓(xùn)練:研究了一下fastText的接口,使用python寫了一個腳本,如下進行模型訓(xùn)練:?????????

import fasttext

# 加載訓(xùn)練數(shù)據(jù)
train_data_path?=?‘train_data.txt’

# 定義模型參數(shù)
model = fasttext.train_supervised(input=train_data_path, epoch=25, lr=1.0, wordNgrams=2, verbose=2)

#?保存模型
model.save_model(‘book_classification_model.bin’)

#?加載測試數(shù)據(jù)
test_data_path = ‘test_data.txt’

#?模型測試
result = model.test(test_data_path)print (‘測試集上數(shù)據(jù)量’, result[0])print (‘測試集上準確率’, result[1])print (‘測試集上召回率’, result[2])

  • train_data.txt:為訓(xùn)練集;test_data.txt:為測試集。
  • 模型中的參數(shù):epoch表示訓(xùn)練論數(shù)、lr是學(xué)習(xí)率、wordNgrams是詞組的長度、verbose是訓(xùn)練過程中的輸出信息級別。
  • book_classification_model.bin:為訓(xùn)練后保存的模型(比較大,100條樣本訓(xùn)練,竟然生成的模型有800M)

訓(xùn)練速度很快,不到1分鐘就跑完了,輸出結(jié)果如下:

好像效果不是很理想,最后發(fā)現(xiàn)是因為不同標簽的樣本分布不均導(dǎo)致的,調(diào)整樣本分布后,效果還不錯。?????

4、模型效果評估與測試:使用準確率和召回率來進行模型的評估和測試,然后不斷地優(yōu)化模型的訓(xùn)練參數(shù)和樣本的質(zhì)量,來提高模型的效果。????????????

5、模型的部署和調(diào)用:部署比較簡單,將訓(xùn)練好的模型(book_classification_model.bin文件),直接放到服務(wù)器中,在模型調(diào)用時,先定義一個模型實例,然后調(diào)用predict方法即可進行分類,具體代碼如下:

import fasttext

#?加載訓(xùn)練好的模型
model = fasttext.load_model(‘book_classification_model.bin’)

#?打開需要預(yù)測的文本文件

input_file?=?‘data.txt’with?open(input_file,?‘r’,?encoding=’utf-8′)?as?f:????
   lines?=?f.readlines()

# 預(yù)測文本內(nèi)容的標簽并輸出
for?line?in?lines:????
   line?=?line.strip()??#?去除換行符    
   if?line:??#?確保行不為空        
       label, confidence = model.predict(line)????????
       label?=?label[0].replace(‘__label__’,?”)??#?去除預(yù)測結(jié)果中的?‘__label__’?前綴????????
       print(f”標簽:?{label}t置信度:?{confidence}t書籍描述:?{line}t”)

輸出結(jié)果如下:

從結(jié)果上看,好像有點兒問題,準確率較低,最后排查分析了一下訓(xùn)練集,發(fā)現(xiàn)商業(yè)類的樣本占了60%,總共18個分類,商業(yè)類一個分類占了60%,其他17個分類占了40%,訓(xùn)練集樣本數(shù)據(jù)分布極度不均衡,導(dǎo)致分類效果較差,調(diào)整樣本后效果就改善了很多。

五、總結(jié)

對于簡單任務(wù),使用預(yù)訓(xùn)練模型是一個比較好的選擇,在訓(xùn)練過程中特別要注意2個地方:

  1. 樣本質(zhì)量:要知道垃圾入、垃圾出,一定要確保樣本數(shù)據(jù)的質(zhì)量,打的標簽一定要準確,另外就是樣本分布盡可能均衡(比例相同),不至于模型效果偏重于某個分類。????????????
  2. 模型參數(shù):主要是學(xué)習(xí)率,它控制著模型訓(xùn)練過程中的更新權(quán)重的速度,學(xué)習(xí)率越大模型訓(xùn)練越快,但是準確率會有所影響。?常見的做法是開始時使用較大的學(xué)習(xí)率,以便快速接近最優(yōu)解,然后隨著訓(xùn)練的進行逐漸減小學(xué)習(xí)率,以便更精細地調(diào)整權(quán)重。

本文由人人都是產(chǎn)品經(jīng)理作者【長弓PM】,微信公眾號:【AI產(chǎn)品經(jīng)理社】,原創(chuàng)/授權(quán) 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自Unsplash,基于 CC0 協(xié)議。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!