從Facebook AI Research開源fastText談文本分類:詞向量模性、深度表徵等
更多深度文章,請關註:https://yq.aliyun.com/cloud
文本分類(text classification)是機器學習的一個主要任務,通常用作垃圾郵件檢測、新聞/文章主題生成、多義詞正確詞義選擇等。之前,Statsbot團隊已經分享了《如何檢測垃圾郵件/信息/用戶評論》。本文主要介紹少數幾個廣義上的文本分類演算法及相關案例,同時也提供了一些有用的教程和工具。
文本分類基準(Benchmarks)
目前,搞文本挖掘的人通常會使用很多小技巧和工具,比如TF-IDF特徵,線性SVM(Linear SVMs)和詞向量模型(如word2vec),然後在一些有名的數據集上,就同一問題,比較自己的方法和別的方法孰優孰劣。比如下面這些有名的用於文本分類的語料庫:
1. AG』s news articles
2. Sogou news corpora
3. Amazon Review Full
4. Amazon Review Polarity
5. DBPedia
6. Yahoo AnswersYelp
7. Review Full
8. Yelp Review Polarity
傳送門:下載地址(需翻牆)
深度學習VS.淺層學習(shallow learning)
簡單和複雜模型在這些數據集上都能表現的很好。為了說明這一點,請參考下面兩篇論文:
1. Character-level Convolutional Networks for Text Classification by Yann LeCun et al
2. A Bag of Tricks for Efficient Text Classification by Tomas Mikolov et al
兩篇論文採用了相同的數據集,實驗結果在準確度(precision)方面大致相等。但是訓練時間卻相差甚遠。第一篇文章中的模型如圖1所示,它需要花費數小時訓練,而第二個型中提出的fastText模型(和word2vec中的CBOW架構類似,因為作者都是Facebook科學技術Tomas Mikolov,如圖3所示)如圖2所示,卻只需要幾秒。
圖1. 論文1模型架構
圖2. 論文2模型架構
圖3. CBOW架構
第二篇論文中的更輕量級的模型fastText不需要GPU加速,在單顆CPU上運算更快。與「深層」的CNN模型相比,fastText的模型結構是「淺層」的。它由一個聯合向量層(joint embedding layer)和一個softmax分類器組成,原理是把句子中所有的詞向量進行平均(某種意義上可以理解為只有一個avg pooling特殊CNN),然後直接接入softmax 層。
如果你有仔細注意過Kaggle比賽中一些獲勝方案的話,你會發現複雜的集成類方法佔據主導地位。比如最近的 Quora Question Pairs competition和DeepHack.Turing,其中頂級的方案總是由不同的模型組成:梯度提升方法,RNNs和CNNs。
基於神經網路的文本分類器通常包含相同的線性元結構:詞向量模型(Embedding)、深度表徵(Deep representation)和全連接(Fully connected part)。
詞向量模型
詞向量層(Embedding layers)以詞序列為輸入,輸出對應的詞向量。這個函數很簡單,本文並不關心這些向量的實際語義,剩下的問題就是初始化這些權重的最好方法是什麼,如圖4所示。
圖4. 如何訓練詞向量
在這個問題中,答案可能和直覺思維「先人工生成標籤,然後用word2vec訓練,再用來初始化詞向量層」相反。但是考慮到實際目標,你可以在具體的模型中使用預訓練(pre-trained)的詞向量集合并不斷調整(fine-tune)它。很可能最後的詞向量並不會表現出和普通的word2vec模型同樣的效果:
圖5. 根據詞向量得到的詞之間的關係
但在這個案例中這並不是重點,關鍵在於使用預訓練的word2vec詞嵌入模型,並且在嵌入層使用更低的學習率(一般的學習率乘以0.1)。
深度表徵
深度表徵(deep representation)部分的主要目的是在輸出中壓縮(condense)所有相關信息,同時禁止(suppressing)導致識別出單個樣本的部分。因為大容量的網路有可能會在某些樣本上過擬合,在測試集上表現很差。
循環神經網路(Recurrent neural network,RNN)
當問題變成預測給定文檔是否是垃圾文檔時,最簡單可靠的架構是應用於循環網路隱狀態的多層全連接文本分類器(multilayer fully connected text classifier)。這個狀態的語義被認為是不相關的,且整個向量被看作是文本的一種壓縮描述。
下面是一些有用的資源:
1. how to use LSTMs for text classification
2. LSTM Tutorial for PyTorch
3. Understanding LSTM Networks by Chris Olah
圖6. 基於RNN的分類器基礎結構
如圖6所示,其原理在於:每個word經過詞向量表示之後,進入LSTM層,這裡LSTM是標準的LSTM,然後經過一個時間序列得到的n個隱藏LSTM神經單元的向量,這些向量經過mean pooling層之後,可以得到一個向量h,然後緊接著是一個簡單的logistic回歸層(或者一個softmax層)得到一個類別分布向量。
由於主要工作都是在在循環層(recurrent layer)進行,確保它僅捕獲到相關信息相當重要。在高層要做兩件事情:
1. 使用雙向LSTM(Bidirectional LSTMs)。這是一個很好的主意,因為他可以捕獲每個詞的上下文,而不只是按順序「閱讀」;
2.為詞向量使用過渡層(transitional layer)。LSTMs學會區分一個序列重要和不重要的部分,但我們並不能確定來自詞向量層的表徵是否是最好的輸入,特別是當我們並沒有調整詞向量的時候。給每個詞向量添加獨立的一層可以提高你的結果,就像一個簡單的attention 層。
卷積神經網路(Convolutional neural network,CNN)
一種可替代的方法是使用卷積網路訓練深度文本分類器。通常,給定一個足夠大的感受野(卷積神經網路的每一層輸出的特徵圖(Feature map)上的像素點在原圖像上映射的區域大小),你可以得到和使用attention層相同的結果。如圖7所示,開始會保持大量的feature map,然後按指數級減少他們的數量,這將有助於避免學到不相關的模式。
你可以在查看一個基於PyTorch的CNN分類器的簡單實現,其中展示了如何用他自己的詞向量層訓練和評估一個卷積分類器。
圖7. 基於CNN的分類器架構
稠密訓練器(Dense Classifier)
全連接部分(fully-connected part)在深度表徵上進行一系列變化,最後輸出每個類的分數。最好的實現就是應用如下變化:
1. 全連接層
2. 批量歸一化(Batch normalization)
3. 非線性變化(可選)
4. Dropout
文中的文本分類演算法也可以通過一些複雜的方法增強,這將幫助你構建更好的模型和更快達到收斂。另外下面還有些分類和表徵學習的工具。
1.A collection of tools and implemented ready-to-train text classifiers (PyTorch)
2.FastText, a library for efficient text classification and building word representations
3.Skip-gram tutorial: part 1, part 2
4.CNN text classifier in TensorFlow
5.RNN Sentence classification tutorial in Keras
【作者信息】
Roman Trusov,Machine Learning Guy @ Skoltech
本文由北郵@愛可可-愛生活老師推薦,阿里云云棲社區組織翻譯。
文章原標題《Text Classifier Algorithms in Machine Learning》,作者:Roman Trusov,譯者:李烽
※如何將機器學慣用在基於規則的驗證上
※雙向同步助力企業快速複製異地多活
※雲端深度學習框架TensorFlow讀取數據IO的高效方式
TAG:雲棲社區 |
※Chinese Word Vectors:目前最全的中文預訓練詞向量集合
※100+Chinese Word Vectors 上百種預訓練中文詞向量
※Scikit-learn筆記8 線性支持向量機
※用深度學習實現自然語言處理:word embedding,單詞向量化
※Hinton向量學院推出神經ODE:超越ResNet 4大性能優勢
※自然語言處理中的詞向量—word2vec!
※基於 Doc2vec 訓練句子向量
※Python中的向量化編程
※TensoFlow 實戰 3層網路求解嵌入詞向量,附代碼詳解
※深度 | 自然語言處理的一大步,應用Word2Vec模型學習單詞向量表徵
※自然語言處理的一大步,應用Word2Vec模型學習單詞向量表徵
※禾多科技駛上寧靜高速,面向量產的HoloPilot實力如何?
※【源碼分享】機器學習之Python支持向量機
※橫掃13項中文NLP任務:香儂科技提出漢語字形表徵向量Glyce+田字格CNN
※.NET的數學庫NMath實用教程——從數值創建向量
※支持向量機Part4—SMO演算法
※忘掉Word2vec吧!艾倫人工智慧研究院新詞向量學習方法,一文了解各大獎項論文
※紅魔Mars電競手機亮相:向量美學設計
※快速訪問4GB詞典向量:LMDB 嵌套
※細數vivo的兩大"法寶",讓真全面屏從概念走向量產!