Python深度學(xué)習(xí)之FastText實現(xiàn)文本分類詳解
FastText是一個三層的神經(jīng)網(wǎng)絡(luò),輸入層、隱含層和輸出層。

FastText的優(yōu)點:
使用淺層的神經(jīng)網(wǎng)絡(luò)實現(xiàn)了word2vec以及文本分類功能,效果與深層網(wǎng)絡(luò)差不多,節(jié)約資源,且有百倍的速度提升
深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的區(qū)別:
與傳統(tǒng)機(jī)器學(xué)習(xí)不同,深度學(xué)習(xí)既提供特征提取功能,也可以完成分類的功能。機(jī)器學(xué)習(xí)需要再根據(jù)提取到的特征再進(jìn)行分類。
安裝FastText
使用pip安裝
pip install fasttext
因為FastText依賴C++的環(huán)境,安裝的時候可能會報錯,有的是C++ 11
有的是C++14看報錯里面缺少那個版本的C++環(huán)境就安裝那個版本的環(huán)境就可以了
使用FastText進(jìn)行文本分類的一般步驟

數(shù)據(jù)格式的要求:
__label__標(biāo)簽 文本內(nèi)容 或 文本內(nèi)容 __label__標(biāo)簽
__label__標(biāo)簽\t文本內(nèi)容 或 文本內(nèi)容\t__label__標(biāo)簽
文本內(nèi)容和標(biāo)簽之間用\t或空格都可以
目前這幾種形式都支持
數(shù)據(jù)預(yù)處理:
將原數(shù)據(jù)處理為數(shù)據(jù)要求的格式,分詞以后詞于詞之間用空格連接
這個根據(jù)自己數(shù)據(jù)的情況自己進(jìn)行處理
訓(xùn)練模型
import fasttext
model = fasttext.train_supervised('train.csv', lr=1.0, wordNgrams=2, verbose=2, minCount=1, epoch=25, loss="hs") # 訓(xùn)練模型
# train.csv 文件路徑,也可以是txt文件,里面的參數(shù)根據(jù)需要調(diào)
"""
訓(xùn)練一個監(jiān)督模型, 返回一個模型對象
input: 訓(xùn)練數(shù)據(jù)文件路徑
lr: 學(xué)習(xí)率
dim: 向量維度
ws: cbow模型時使用
epoch: 次數(shù)
minCount: 詞頻閾值, 小于該值在初始化時會過濾掉
minCountLabel: 類別閾值,類別小于該值初始化時會過濾掉
minn: 構(gòu)造subword時最小char個數(shù)
maxn: 構(gòu)造subword時最大char個數(shù)
neg: 負(fù)采樣
wordNgrams: n-gram個數(shù)
loss: 損失函數(shù)類型, softmax, ns: 負(fù)采樣, hs: 分層softmax
bucket: 詞擴(kuò)充大小, [A, B]: A語料中包含的詞向量, B不在語料中的詞向量
thread: 線程個數(shù), 每個線程處理輸入數(shù)據(jù)的一段, 0號線程負(fù)責(zé)loss輸出
lrUpdateRate: 學(xué)習(xí)率更新
t: 負(fù)采樣閾值
label: 類別前綴
verbose: ??
pretrainedVectors: 預(yù)訓(xùn)練的詞向量文件路徑, 如果word出現(xiàn)在文件夾中初始化不再隨機(jī)
model object
"""預(yù)測數(shù)據(jù)
使用predict預(yù)測數(shù)據(jù),預(yù)測一段文本屬于的類別
model.predict(x) # x文本內(nèi)容 返回的數(shù)據(jù)格式(('__label__4',), array([0.99441689]))
# 可能性最大的標(biāo)簽和準(zhǔn)確率使用test驗證模型的準(zhǔn)確率,傳入的是一個文件,文件的格式和訓(xùn)練集一樣
返回一個元組(樣本數(shù),精確率,找回率)
模型的保存
model.save_model("model_cooking.bin") # 文件路徑模型讀取
fasttext.load_model("model_cooking.bin") # 讀取模型模型的優(yōu)化
直接使用默認(rèn)參數(shù)去訓(xùn)練模型一般都得不到特別好的結(jié)果,可以通過一些手段來優(yōu)化模型。第一種可以采取的手段是去掉語料庫當(dāng)中的停止詞,對于英文的語料庫來說,還可以把所有的大寫字母都轉(zhuǎn)化成小寫字母。另一種可以采取的手段是調(diào)整超參數(shù),比如說修改學(xué)習(xí)速率、修改epoch等,大家可以參照著fastTest的文檔去進(jìn)行相應(yīng)的調(diào)整,fastText的文檔中介紹了一種更加方便的自動調(diào)參方法,只要我們同時提供訓(xùn)練集和測試集就可以了,帶來的精確度提升還是非常顯著的:
model = fasttext.train_supervised(input='train.csv', autotuneValidationFile='test.csv', autotuneDuration=600) """ autotuneValidationFile='test.csv', 測試集數(shù)據(jù)集 autotuneDuration=600 時間限制,單位為秒,默認(rèn)為5分鐘 """ # 如果想查看對應(yīng)的參數(shù),可以使用 對象.屬性的方式進(jìn)行查看
舉例:

使用FastText進(jìn)行文本分類的基本操作就是這些內(nèi)容,關(guān)于深層次的學(xué)習(xí)大家可以參考
到此這篇關(guān)于Python深度學(xué)習(xí)之FastText實現(xiàn)文本分類詳解的文章就介紹到這了,更多相關(guān)Python FastText內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python通過調(diào)用mysql存儲過程實現(xiàn)更新數(shù)據(jù)功能示例
這篇文章主要介紹了Python通過調(diào)用mysql存儲過程實現(xiàn)更新數(shù)據(jù)功能,結(jié)合實例形式分析了Python調(diào)用mysql存儲過程實現(xiàn)更新數(shù)據(jù)的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2018-04-04
數(shù)據(jù)清洗之如何用一行Python代碼去掉文本中的各種符號
我們在處理文本的時候往往需要對標(biāo)點符號進(jìn)行處理,下面這篇文章主要給大家介紹了關(guān)于數(shù)據(jù)清洗之如何用一行Python代碼去掉文本中的各種符號的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
python ftp 按目錄結(jié)構(gòu)上傳下載的實現(xiàn)代碼
這篇文章主要介紹了python ftp 按目錄結(jié)構(gòu)上傳下載的實現(xiàn)代碼,需要的朋友可以參考下2018-09-09

