1、常見文本相似度計算方法
常見的短文本相似度計算方法目前有很多中,但這些短文本相似度計算方法都只是提取了短文本中的淺層特征,而無法提取短文本中的深層特征。目前常見的文本相似度計算方法有:
1)簡單共有詞。對文本分詞之后,計算兩本文本中相同詞的數量,然后除以更長的文本中詞的數量。
2)編輯距離。簡單理解就是指兩個字符串之間,由一個字符串轉成另一個字符串所需的最少編輯操作次數。
3)TF-ITF +余弦相似度/距離計算方法。利用TF-ITF提取關鍵詞,將文本轉換成向量空間模型,然后計算兩個文本在向量空間中的余弦相似度或者之間的距離(常見的距離有曼哈頓距離、歐幾里得距離)。
4)Jaccard系數。對文本分詞后,對兩個文本進行交集和並集的處理,用交集中詞的數量除以並集中詞的數量來表示兩個文本之間的相似度。
5)主題模型。基於LDA和LSA主題模型提取文檔的主題(推薦基於統計的LDA主題模型),然后根據主題向量的余弦相似度來表示兩個文本之間的相似度。
對於短文本除了所具有的淺層特征之外,還有很對深層特征,比如句子的語義,語法等。基於目前很火的 word2vec 可以很好的計算兩個詞之間的相似度,目前也有將word2vec運用到句子相似度計算上來。比如常見的方法有:
1)對句子進行分詞,得到每個詞的向量表示,然后將這些向量進行疊加生成一個新的向量,將這個新的向量作為該句子的向量。通過余弦相似度或者歐幾里得距離來計算相似度。
2)針對第1種,在向量疊加時還可以給每個詞加上權重系數,以此來區分重要詞和非重要詞。
3)將句子當做詞放入到word2vec模型中直接訓練出句子的向量表示。
2、skip-thought vectors 論文解讀
2.1 skip-thought模型結構
skip-thought模型結構借助了skip-gram的思想。在skip-gram中,是以中心詞來預測上下文的詞;在skip-thought同樣是利用中心句子來預測上下文的句子,其數據的結構可以用一個三元組表示 $(s_{t-1}, s_t, s_{t+1})$ ,輸入值 $s_t$ ,輸出值 $(s_{t-1}, s_{t+1})$ ,具體模型結構如下圖:
途中 $<eos>$ 表示句子的結尾。在這里:
$s_{t}\quad I\;could\;see\;the\;cat\;on\;the\;steps$
$s_{t-1}\quad I\;got\;back\;home$
$s_{t+1} \quad This\;was\;strange$
2.2 神經網絡結構
skip-thought模型的神經網絡結構是在機器翻譯中最常用的 Encoder-Decoder 架構,而在 Encoder-Decoder 架構中所使用的模型是GRU模型(具體GRU模型見這篇)。因此在訓練句子向量時同樣要使用到詞向量,編碼器輸出的結果為句子中最后一個詞所輸出的向量。具體模型實現的公式如下:
編碼階段:
公式和GRU網絡中的公式一模一樣。$h_t$ 表示 $t$ 時刻的隱層的輸出結果。
解碼階段:以 $s_{t+1}$ 為例,$s_{t-1}$ 相同:
其中 $C_r, C_z, C$ 分別用來對重置門,更新門,隱層進行向量偏置的。
2.3 詞匯擴展
詞匯擴展主要是為了彌補我們的 Decoder 模型中詞匯不足的問題。具體的做法就是:
1)我們用 $V_{w2v}$ 表示我們訓練的詞向量空間,用 $V_{rnn}$ 表示我們模型中的詞向量空間,在這里 $V_{w2v}$ 是遠遠大於 $V_{rnn}$ 的。
2)引入一個矩陣 $W$ 來構建一個映射函數:$f: V_{w2v} -> V_{rnn}$ 。使得有 $ v^{'} = Wv $ ,其中 $ v \in V_{w2v}, v^{'} \in V_{rnn} $ 。
3)通過映射函數就可以將任何在 $V_{w2v}$ 中的詞映射到 $V_{rnn}$ 中。
3、Tensorflow實現skip-thought
skip-thought已經添加到Tensorflow models中,只需要安裝TensorFlow models就可以使用,具體安裝流程:
1)在GitHub上下載源碼:git clone --recurse-submodules https://github.com/tensorflow/models
2)將源碼放到相應的位置:例如我是在Anaconda3中的虛擬環境下安裝的tensorflow,則相應的路徑:C:\Users\jiangxinyang\Anaconda3\envs\jiang\Lib\site-packages\tensorflow
具體GitHub地址:https://github.com/tensorflow/models/tree/master/research/skip_thoughts