這是前一段時間在做的事情,有些python庫需要python3.5以上,所以mac請先升級 brew安裝以下就好,然后Preference(comm+',')->Project: Text-Classification-m...->Project Interpreter->setting button->add,添加python的虛擬環境(usr/local/bin/python3.7),然后就去安裝那些包
然后去github找一份代碼學習下,在此之前請先連接這個技術需要什么,我找到了是這份代碼Text-Classification
通過代碼繼續學習
我們需要掌握JieBa 分詞的內部實現原理,了解 TF-IDF 統計方法的基本原理。然后進行網絡的訓練、網絡的預測,以此來達到一個比較高的文本分類正確率。
我們需要大量的測試集,並給其標上標簽,單一標簽和多標簽方法並不一樣,當然我們經常面對的是多標簽
深度學習文本分類模型:
1,fastText
原理:句子中所有的詞向量進行平均(某種意義上可以理解為只有一個avg pooling特殊CNN),然后直接連接一個 softmax 層進行分類。
2,TextCNN: 利用CNN來提取句子中類似 n-gram 的關鍵信息。
改進: fastText 中的網絡結果是完全沒有考慮詞序信息的,而TextCNN提取句子中類似 n-gram 的關鍵信息。
3,TextRNN:
模型: Bi-directional RNN(實際使用的是雙向LSTM)從某種意義上可以理解為可以捕獲變長且雙向的的 “n-gram” 信息。
改進: CNN有個最大問題是固定 filter_size 的視野,一方面無法建模更長的序列信息,另一方面 filter_size 的超參調節也很繁瑣。
4,TextRNN + Attention:
改進:注意力(Attention)機制是自然語言處理領域一個常用的建模長時間記憶機制,能夠很直觀的給出每個詞對結果的貢獻,基本成了Seq2Seq模型的標配了。實際上文本分類從某種意義上也可以理解為一種特殊的Seq2Seq,所以考慮把Attention機制引入近來。
5,TextRCNN(TextRNN + CNN):
過程:
利用前向和后向RNN得到每個詞的前向和后向上下文的表示:
詞的表示變成詞向量和前向后向上下文向量連接起來的形式:
再接跟TextCNN相同卷積層,pooling層即可,唯一不同的是卷積層 filter_size = 1就可以了,不再需要更大 filter_size 獲得更大視野。
上面那份代碼使用的是TextCNN,我們可以來分析下這個的使用