【一分鐘整明白】不用深度學習的文字向量表示
最近讀了兩篇文章(見文末),核心是如何不使用DL的方法來得到效果不差的文字和句子embedding。第一篇文章核心是提出了簡單但有效的句子和文字級的embedding策略,無需使用DL技術,只需要詞向量結果和一些線性運算即可。第二篇文章在第一篇的基礎上增加了對詞序的支援。
句子和文字embedding
Word2vec和GloVe,再加上對PMI矩陣的直接分解等方法基本奠定了詞向量表示的工業事實標準,但是如何得到更長文字,如句子和文章的向量表示,還是一個處於活躍研究的問題。現在行業中的一些方法多數是基於DL模型的,例如一些RNN的方法。但這些方法不僅計算複雜,消耗資源,同時可解釋性也非常差。
SIF embedding
這是作者在ICLR‘17中提出的一種簡單的線性embedding方法,SIF=Smoothed Inverse Frequency。核心是對組成句子的詞進行線性加權,其中每個詞的權重為a/(a+p_w),其中p_w是這個詞的詞頻,a是超引數。這種思想顯然是借鑑TF-IDF來的。同時作者還聲稱,word2vec的程式碼實現中,通過對詞的抽樣也實現了類似的加權策略。
除了根據詞頻來加權以外,SIF embedding還引入一個思想,就是去除文字中與語義無關的向量。具體做法是從資料集中抽樣一些句子,然後計算這些句子向量對應的最大的奇異值向量,這樣的向量被認為代表了文字中的語法或停用詞這些和語義無關的內容。將這些向量去除可以增強文字對語義本身的表達能力(這裡可以感嘆下向量空間神奇的表達能力)。
所以說SIF embedding的本質就是“詞頻加權+語義無關向量去除”。文中在多個任務上將SIF方法與GloVe普通平均、TF-IDF GloVe、LSTM等方法進行了對比,均取得了較好的效果,同時帶來了很大的效能提升,因為SIF完全是基於預訓練的詞向量和線性計算的。下面是實驗對比效果:

n-gram embedding
上面提到的SIF方法通過對詞向量的線性計算得到了有效的句子和文字向量,但存在的問題在於沒有考慮文字中詞的順序。換句話說,更像是一種BoW(Bag of Words)的方法。所以一個很自然的想法就是如何在保持SIF方法簡潔性的同時能夠很好地考慮詞的順序。
最直觀的方式,就是借鑑n-gram的思想。n-gram通過將n個詞連在一起,實現了對區域性順序資訊的保留。要得到n-gram的向量表示,一種最直觀的方法,就是把n-gram看做單個詞,然後將SIF的流程應用上去。但這樣帶來的一個顯然的問題就是語料中不同的n-gram量會非常的大,和詞的數量是指數級關係,這在實踐中是不可接受的。所以作者們提出了一種基於組合(compositional)的方法:

簡單說來,就是將組成n-gram的詞的詞向量進行按位乘法計算,得到n-gram的詞向量。這樣就不需要為每個n-gram去訓練了,可以直接基於詞向量就可以得到。仔細的同學能看出來這種方法是無法保留n-gram內部的順序的,因為乘法是沒有順序的,但作者提到保留順序的方法在效果上並無明顯提升。
在這個基礎上,作者提出了DisC embedding:

簡單說來,DisC embedding就是把不同n對應的n-gram embedding拼接起來,以此來體現文字中的詞序,可以看出n取得越大保持的序越長,但也有相應的計算和儲存代價。下圖是與其他方法的比較:

總結
作者通過兩篇文章(以及對應的論文)提出了兩種DL-free的本文向量表示方法,可通過對詞向量的線性運算得到可與更復雜的DL效果上相媲美的結果。其核心思想包括以下幾部分:
- 對詞向量根據詞頻進行加權融合
- 去除語義無關的向量
- 通過組合方式計算n-gram的向量表示
- 通過拼接不同n-gram向量得到文字的向量表示
有興趣的同學可在自己的資料集上進行嘗試,歡迎交流效果。