word2vec和sentence2vec的真正差別是什麼?後者和簡單用詞向量累加有什麼差別?
自然語言處理
我做過一些句子聚類的實驗,也看過一些paper,說一下大致結論。基本的順序是:
詞向量直接equal weight求mean &> 宇宙無敵句子embedding(非監督) &> 詞向量按tfidf權重求mean
這個順序似乎在做線性分類器的時候也是適用的
所以問題就來了,某些paper為了強調自己句子embedding的強大,完全可以把後者拿來做baseline,一般人不會覺得那個求和的weight會起到那麼大的作用吧。。。Naive
另外,我相信對具體的任務,監督學習下的embedding一般是比非監督好的,但適用範圍比較有限。類比於word2vec, 這篇是比較典型的一篇sentence2vec的論文Skip thought vector (https://arxiv.org/pdf/1506.06726v1.pdf),發表在NIPS15上面。
word2vec的大致想法是利用詞於詞之間的context,來學習embedding. 模型本身很簡單,先one-hot vector, 然後投射到embedding space, 然後通過這個embedding space的feature過softmax去預測周圍的詞。這本身是個unsupervised learning的任務,可以分成CBOW和Skip-gram的兩種形式(如下圖所示)。
而skip-thought如下圖所示,是利用前後語句之間的關聯性來學句子的embedding. 其句子的表徵是用RNN來表示,模型先encode中間一個句子,然後用這個RNN的Output分別來decode前一個和後一個句子,直接類比於word2vec的Skip-gram的形式。skip-thought演算法的實現作者也有release,感興趣的同學可以玩玩:ryankiros/skip-thoughts。目前就沒有適合正式被叫做sentence2vec的東西。對句子編碼的方式可以有很多。前面大牛提到的skip thought vectors算word2vec(skip-gram)在句子級別上的一種直接推廣,其實就是把skip-gram里每個詞換成一個句子,每個句子都用RNN來編碼。不難想像,要訓練這種句子表示需要的語料規模顯然要比訓練詞向量大得多……當然也有更簡單的做法,比如直接用RNN讀完全句後最後一個隱狀態就可以認為是一種句子編碼,或者按你說的直接把所有詞向量累加求個平均拉倒。比較令人意外的是,直接加起來求平均也可以局部地保留一些句子級的信息。感興趣可以參見Yoav組的一個近期發現:
[1608.04207] Fine-grained Analysis of Sentence Embeddings Using Auxiliary Prediction Tasks
TL;DR: 如果在某種句子編碼上訓練分類器能準確預測句長、句子里包含哪些詞以及這些詞兩兩之間的排列先後,那麼有理由認為句子的信息在這種句子編碼里有所保存。實驗表明不光LSTM-RNN,就連CBOW求平均都能「保留」一些信息……https://arxiv.org/pdf/1608.04207v2.pdf這篇文章比較有趣。大致上比較了Continuous bag of words和LSTM sentence vector的信息量,結果發現bag of words也包含了相當大量的信息,例如句子長度,單詞先後順序。LSTM也沒有強太多,這至少說明了其實word embedding已經包含了相當大量的句子信息。
親測使用gensim訓練的word2vec取mean或者取每一維度的max要比sent2vec或者lstm表示sentence embedding效果好.
其實至今為止還沒有看到有效的sentence2vec–––––––––––––––––––––分割線,找到有效的方法再來補充–––––––––––––––––––––
推薦doc2vec(PVDM)基於fastText的實現:fasttext-PVDM,實驗結果與論文一致:Distributed Representations of Sentences and Documents,工程實驗,效果好於weight求mean的方法 完勝gensim版本的doc2vec。
求平均、求和、sqrtn都可以的,可以用tf.nn.embedding_lookup_sparse的combiner。
https://www.tensorflow.org/versions/r1.2/api_docs/python/tf/nn/embedding_lookup_sparse
推薦閱讀:
※遷移學習在自然語言處理方面的應用?
※深度學習對話系統理論篇--seq2seq入門
※自然語言處理的智能問答(QA)和智能對話(conversation)哪一個更有前景?
※Recurrent Convolutional Neural Networks for Text Classification