如何評價Word2Vec作者提出的fastText演算法?深度學習是否在文本分類等簡單任務上沒有優勢?
Word2Vec作者Mikolov在預印本(Bag of Tricks for Efficient Text Classification,https://arxiv.org/pdf/1607.01759v2.pdf)中提出了fastText文本分類方法,可以在普通CPU上快速訓練,結果與深度學習訓練出來的模型類似。深度學習是否在文本分類等簡單任務上沒有優勢?
fastText簡而言之,就是把文檔中所有詞通過lookup table變成向量,取平均後直接用線性分類器得到分類結果。fastText和ACL-15上的deep averaging network [1] (DAN,如下圖)非常相似,區別就是去掉了中間的隱層。兩篇文章的結論也比較類似,也是指出對一些簡單的分類任務,沒有必要使用太複雜的網路結構就可以取得差不多的結果。
文中實驗選取的都是對句子詞序不是很敏感的數據集,所以得到文中的實驗結果完全不奇怪。但是比如對下面的三個例子來說:
- The movie is not very good , but i still like it . [2]
- The movie is very good , but i still do not like it .
- I do not like it , but the movie is still very good .
其中第1、3句整體極性是positive,但第2句整體極性就是negative。如果只是通過簡單的取平均來作為sentence representation進行分類的話,可能就會很難學出詞序對句子語義的影響。
從另一個角度來說,fastText可以看作是用window-size=1 + average pooling的CNN [3]對句子進行建模。
總結一下:對簡單的任務來說,用簡單的網路結構進行處理基本就夠了,但是對比較複雜的任務,還是依然需要更複雜的網路結構來學習sentence representation的。
另外,fastText文中還提到的兩個tricks分別是:- hierarchical softmax
- 類別數較多時,通過構建一個霍夫曼編碼樹來加速softmax layer的計算,和之前word2vec中的trick相同
- N-gram features
- 只用unigram的話會丟掉word order信息,所以通過加入N-gram features進行補充
- 用hashing來減少N-gram的存儲
[1] Deep Unordered Composition Rivals Syntactic Methods for Text Classification
[2] A Statistical Parsing Framework for Sentiment Classification[3] Natural Language Processing (Almost) from Scratch這篇論文說明,在合適的任務上應當使用合適的方法,像文本分類這樣的任務,如果是長文本,即使用BOW也能做很不錯的效果。
文本分類基本還是個偏線性的問題。多層的網路相對單層的沒有太多優勢。但這不是說多層的沒用,而是單層的就夠了。但有些別的非線性的問題,多層的就有優勢。所以本質是問題不同,不是方法的問題。
其實每個問題都有線性的部分和非線性的部分。線性的部分好學,非線性的不好學。就好比圍棋,傳統的機器學習也能預測對30%的下一步,但是他預測對的都是那些最簡單的招法(比如我的棋要死了基本就要逃)。而AlphaGo預測出50%多的下一步,多出來的20%都是非線性的部分。AlphaGo的論文也提出,57%的精度相對於56%的精度,對應的棋力的提高遠遠超過1%。這說明,最後面的提高都是預測對了最難預測的那些case,但是那些case本身在訓練樣本中並不多,所以準確率的提高也不明顯。
所以,文本分類的問題線性成分很大,但非線性的樣本並不多。比如,如果有人故意用體育里的常見詞去寫一個娛樂新聞,這種東西人能看出來,但機器就很難了。因為利用了大量非線性的東西。如果人為構造大量這種類型的數據集,可能多層網路的優勢就體現了。
可以搞一個數據集。先用機器學習訓練一遍文本分類。然後找人來寫文章,讓機器全部預測錯。但人全部可以預測對。然後再做文本分類,看看多層是不是NB。謝邀,這篇paper內容很簡單,其實沒有什麼可以答的。
這篇paper只是總結已有的幾種trick,做了幾組實驗,發現在兩個nlp任務上,deep與fastText有相近的結果,說明還是有不少nlp任務可以不用dl就做得不錯。
用了deep的結構之後,效果沒有提升的原因是很多的,比如
1. 數據量不夠,過擬合嚴重2. 數據標記質量有限,本身的標記中就有一定的噪音。(如果是這種問題,那換模型基本幫不上忙)以前的word2vec也是一種組簡單的模型,但是讓人認識到了word embedding的實用價值和word analogy這種有趣的性質。這篇paper就貢獻而言,是遠遠不及word2vec。fastText有兩個可說的地方:
1 在word2vec的基礎上, 把Ngrams也當做詞訓練word2vec模型, 最終每個詞的vector將由這個詞的Ngrams得出. 這個改進能提升模型對morphology的效果, 即"字面上"相似的詞語distance也會小一些. 有人在question-words數據集上跑過fastText和gensim-word2vec的對比, 結果在 Jupyter Notebook Viewer .可以看出fastText在"adjective-to-adverb", "opposite"之類的數據集上效果還是相當好的. 不過像"family"這樣的字面上不一樣的數據集, fastText效果反而不如gensim-word2vec.推廣到中文上, 結果也類似. "字面上"相似對vector的影響非常大. 一個簡單的例子是, gensim訓練的模型中與"交易"最相似的是"買賣", 而fastText的結果是"交易法".2 用CBOW的思路來做分類, 親測下來訓練速度和準確率都挺不錯(也許是我的數據比較適合). 尤其是訓練速度, 快得嚇人.人類的文字本來就是一個高度抽象而且高度簡潔的概念,所以深度學習多層網路來降低維度帶來的收益本來就不高。
所以文章裡面說的兩層就夠了也是可以的啦
還是數據量太少,要夠大才需要夠深!另外,這篇論文也太水了,太水了……
在比賽中用了fasttext,發現速度驚人,而且內存優化比較好,用tensorflow搭建3層模型,內存超52g了,但是fasttext訓練卻非常快,文本分類準確率都還可以,只是為什麼loss這麼高
文章裡面說了 deep learning的方法更加sophisticated 雖然用linear model就可以解決問題但是相比較而言更加shallow,所以大家就不要只注意吐槽模型簡單了好嗎?
畢竟雖然模型簡單也沒什麼創新,但是在業界還是可能會有用的喔&>&<這個論文中的方法,看來不是無監督的啊,感覺作用不大啊。
推薦閱讀:
※為何做DL用word2vec比glove多?
※怎樣計算兩篇文檔的相似度?
TAG:機器學習 | 文本分類 | 分類演算法 | 深度學習DeepLearning | word2vec |