論文閱讀 A SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SEN- TENCE EMBEDDINGS
這篇論文提出了SIF sentence embedding方法, 作者提供的代碼在Github.
引入
作為一種無監督計算句子之間相似度的方法, sif sentence embedding使用預訓練好的詞向量, 使用加權平均的方法, 對句子中所有詞對應的詞向量進行計算, 得到整個句子的embedding向量. 再使用句子向量進行相似度的計算.
在這篇論文之前, 也有與這篇文章思路非常相近的思路, 即都是使用詞向量, 通過平均的方法得到句子向量, 只是在加權時權重計算方法上有區別. 具體來說有:
- 對句子中所有單詞直接求平均, 每個單詞的權重相同, 得到sentence embedding
- 使用每個詞的TF-IDF
這篇論文使用smooth inverse frequency, sif作為每個單詞的權重, 代替TF-IDF值, 獲得了更好的效果. 除了使用新的詞權重計算方法, 還在加權平均後, 減掉了principal component, 最終得到句子的embedding.
另外論文中還提到了這種方法的魯棒性:
- 使用不同語料(多種領域)訓練得到的不同的word embedding, 均取得了很好的效果, 說明了對各種語料的友好.
- 使用不同語料得到的詞頻, 作為計算詞權重的因素, 對最終的結果影響很小.
- 對於方法中的超參數, 在很大範圍內, 獲得的結果都是區域一直的, 即超參數的選擇沒有太大的影響.
理論
1. 生成模型
首先從潛變量生成模型(latent variable generative model)說起. 這個模型假設: 語料的生成是一個動態過程(dynamic process), 即第\(t\)個單詞是在第\(t\)步生成的.
每個單詞\(w\)對應著一個\(\mathbb{R}^d\)維的向量. 而這個動態過程是由discourse vector\(c_t\in{\mathbb{R}^d}\)的隨機遊走驅動的. discourse vector代表著這個句子what is being talked about, 作為潛變量, 代表著句子一個狀態, 由於是動態的, 這個狀態是隨時間變化的, 因此記為\(c_t\)
單詞\(w\)的向量\(v_w\)與當前時間的discourse vector\(c_t\)的內積, 表示著這個單詞與整個句子之間的關系. 並且我們假設\(t\)時刻觀測到單詞\(w\)的概率為這個內積的對數線性(log linear)關系:
\[Pr(\text{w emitted at time t}| c_t)\propto{\exp(\langle c_t,v_w \rangle)}\]
由於\(c_t\)是較小幅度的隨機遊走得到的, \(c_t\)與\(c_{t+1}\)之間只會差一個較小的隨機差向量, 因此相鄰的單詞是由近似的discourse vector生成得到的. 另外計算表明這種模型的隨機遊走允許偶爾\(c_t\)有較大的jump, 這對共生概率的影響是很小的.
通過這種辦法生成的單詞向量, 與word2vec(CBOW)和Glove生成的向量是相似的.
2. 隨機遊走模型的改進
借助上面的模型, 我們希望如下獲得一個句子的我sentence embedding: 對discourse vector做最大似然估計. 為了簡化, 註意到\(c_t\)在整個句子生成單詞的過程中, 變化很小, 因此我們將所有步的discourse vector假設為一個固定的向量\(c_s\). 可證明: 對\(c_s\)的最大似然估計就是對所有單詞embedding向量的平均.
這篇論文對這種模型進行了改進, 加入了兩項平滑項, 出於如下的考慮:
- 有些單詞在規定的上下文範圍之外出現, 也可能對discourse vector產生影響
- 有限單詞的出現(如常見的停止詞)與discourse vector沒有關系
出於這兩點考慮, 引入了兩種平滑項, 首先是對數線性模型中的一個累加項(additive term)\(\alpha p(w)\),其中\(p(w)\)是單詞\(w\)在整個語料中出現的概率(詞頻角度), \(\alpha\)是一個超參數. 這樣, 即使和\(c_s\)的內積很小, 這個單詞也有概率出現.
然後, 引入一個糾正項, common discourse vector\(c_0\in{\mathbb{R}^d}\), 其意義是句子的最頻繁的意義, 可以認為是句子中最重要的成分, 常常可以與語法聯系起來. 文章中認為對於某個單詞, 其沿著\(c_0\)方向的成分較大(即向量投影更長), 這個糾正項就會提升這個單詞出現的概率.
校正後, 對於給定的discourse vector\(c_s\), 單詞\(w\)在句子\(s\)中出現的概率為:
\[Pr(\text{w emitted in sentence s}| c_s)\propto{\alpha p(w) + (1-\alpha)\frac{\exp(\langle \tilde{c}_s, v_w \rangle)}{Z_{\tilde{c}_s}}}\]
其中, \(\tilde{c}_s=\beta c_0+(1-\beta)c_s,\ c_0\perp c_s\), \(\alpha\)和\(\beta\)都是超參數, \(Z_{\tilde{c}_s}=\sum\limits_{w\in{V}}\exp(\langle \tilde{c}_s, v_w \rangle)\)是歸一化常數. 從公式中可以看出, 一個與\(c_s\)沒有關系的單詞\(w\), 也可以在句子中出現, 原因有:
- 來自\(\alpha p(w)\)項的數值
- 與common discourse vector \(c_0\)的相關性
3. 計算句子向量
句子向量就是上述模型中的\(c_s\), 使用最大似然法估計\(c_s\)向量. 首先假設所有單詞的向量\(v_s\)是大致均勻分布在整個向量空間上的, 因此這裏的歸一化項\(Z_c\)對於不同的句子值都是大致相同的, 即對於任意的\(\tilde{c}_s\), \(Z\)值是相同的. 在此前提下, 得到似然函數:
\[p[s|c_s]=\prod\limits_{w\in{s}}p(w|c_s)=\prod\limits_{w\in{s}}[\alpha p(w) + (1-\alpha)\frac{\exp(\langle \tilde{c}_s, v_w \rangle)}{Z}]\]
取對數, 單個單詞記為
\[f_w(\tilde{c}_s)=\log[\alpha p(w) + (1-\alpha)\frac{\exp(\langle \tilde{c}_s, v_w \rangle)}{Z}]\]
最大化上式, 具體的推到在論文中有詳述的說明, 最終目標為:
\[\arg\max\limits_{c_s}\sum\limits_{w\in{s}}f_w(\tilde{c}_s)\]
可以得到:
\[\tilde{c}_s\propto \sum\limits_{w\in{s}}\frac{a}{p(w)+a}v_w,\ a=\frac{1-\alpha}{\alpha Z}\]
因此可以得到:
- 最優解為句子中所有單詞向量的加權平均
- 對於詞頻更高的單詞\(w\), 權值更小, 因此這種方法也等同於下采樣頻繁單詞
最後, 為了得到最終的句子向量\(c_s\), 我們需要估計\(c_0\). 通過計算向量\(\tilde{c}_s\)的first principal component(PCA中的主成分), 將其作為\(c_0\). 最終的句子向量即為\(\tilde{c}_s\)減去主成份向量\(c_0\).
4. 算法總結
整個算法步驟總結如下圖:
論文閱讀 A SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SEN- TENCE EMBEDDINGS