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

0 評(píng)論 2499 瀏覽 9 收藏 11 分鐘

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

一、fastText簡介

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

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

二、fastText原理

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

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

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

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

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

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

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

四、fastText實(shí)例????

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

1、數(shù)據(jù)收集:因?yàn)闀當(dāng)?shù)據(jù)來源于網(wǎng)絡(luò),暫無分類標(biāo)簽,所以隨機(jī)抽取300條數(shù)據(jù),分為:訓(xùn)練集100條、測(cè)試集100條(剔除標(biāo)簽)。?????????????????

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

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

3、模型訓(xùn)練:研究了一下fastText的接口,使用python寫了一個(gè)腳本,如下進(jìn)行模型訓(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’)

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

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

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

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

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

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

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

import fasttext

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

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

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

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

輸出結(jié)果如下:

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

五、總結(jié)

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

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

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

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

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