如何求解一個sentence vector的表達?過去,我們常見的就是從word vector到sentence vector,這種從小unit到大一級unit的方法,統一稱為「composion」;這方面的工作有以下的1、2、3、4、5、6.1、7。其實,除了以上方法,還有一種基於distributed的思想,這種方法就像word2vec一樣,一個word的向量表達由它周圍的contexts來展現;那麼同理我們也可以把一個sentence當作一個word,即一個unit,用sentence上下文的前後sentence作為它的context來求得;這方面的工作有6.2、6.3、6.4。其餘的從多任務、對話中學習等等。

1. Bag of Words(BOW)

無監督

基於統計的詞袋模型:

  • 單個詞的One-Hot表示
  • 基於頻數的詞袋模型
  • (重點)基於TF-IDF的詞袋模型:這個也和TF-IDF相關;Unsupervised Sentence Representations as Word Information Series: Revisiting TF--IDF(參考13)

基於詞向量的詞袋模型:

  • 最簡單的做法是拿預訓練的詞向量求平均。例如:Word2Vec、Glove、FastText等。
  • 以每個詞的tf-idf為權重,對所有詞的word vector加權平均,獲得sentence embedding。

好處是計算速度較快,但是缺點是它忽略了詞序,在一些對於詞語順序比較敏感的任務中,比如情感分析(sentiment analysis)等,效果不佳。

  • (重點)從詞的角度出發考慮的,最後的效果非常好,就是怎麼樣從詞的向量得到句子的向量。首先選出一個詞庫,比如說10萬個詞,然後用w2v跑出所有詞的向量,然後對於每一個句子,構造一個10萬維的向量,向量的每一維是該維對應的詞和該句子中每一個詞的相似度的最大值。這種方法實際上是bag of words的一個擴展,比如說對於我喜歡用蘋果手機這麼一句話對應的向量,會在三星、諾基亞、小米、電腦等詞上也會有比較高的得分。這種做法對於bag of words的稀疏性問題效果非常好。(句子中每個詞保留和它最相似的十個詞,所以最終非零維度的個數<= 10 * (句子中詞的個數))

如何用 word2vec 計算兩個句子之間的相似度?

  • 共現矩陣(Cocurrence matrix),然後一般配合PCA或SVD將其進行降維。

stawary:NLP中的文本表示方法

2. Deep Averaging Network(DAN)

有監督

來自ACL2015的一篇文章Deep Unordered Composition Rivals Syntactic Methods for Text Classification。

在BOW的基礎上變deep(每deep一層,更加abstract)。

文中和BOW模型和RecNNs模型進行了對比。註:RecNNs是遞歸神經網路基於解析樹的方式去考慮句法和次序對文本分類的影響(Dynamic Pooling and Unfolding Recursive Autoencoders for Paraphrase Detection)。

  • BOW模訓練速度快,但對次序不敏感,準確度不高。
  • RecNNs模型性能上雖然更好,但是代價高,訓練速度慢。
  • DAN既能沾上BOW訓練快、代價小的優點;又能考慮RecNNs在句法上的信息提取,達到和RecNNs媲美的準確度。

怎麼理解DAN,deep averaging network 模型?

blog.csdn.net圖標

DAN既能沾上BOW訓練快、代價小的優點;又能考慮RecNNs在句法上的信息提取,達到和RecNNs媲美的準確度。

Word Dropout Improves Robustness。(參考自5)

怎麼理解DAN,deep averaging network 模型

dan python

利用dan做qa任務 keras

RecNNs

3. CNN for sentence modeling(各種基於CNN的模型)

有監督

  • (重點)TextCNN 2014 (Convolutional neural networks for sentence classification)
  • DCNN 2014 (A Convolutional Neural Network for Modelling Sentences):動態pooling
  • 句子匹配中的句子建模 2014 (Convolutional neural network architectures for matching natural language sentences)
  • 其中的句子表徵 2015 (Multi-perspective sentence similarity modeling with convolutional neural networks)
  • 其中的句子分析模型CNN-SM 2015 (Convolutional Neural Network for Paraphrase Identification)(這部分模型主要使用了上述Kal在2014年提出的模型DCNN,針對句子本身提取出四種粒度的特徵表示:詞、短ngram、長ngram和句子粒度。多種粒度的特徵表示是非常必要的,一方面提高模型的性能,另一方面增強模型的魯棒性。)
  • TextCNNN的分析 2015 (Sensitivity Analysis of Convolutional Neural Networks for Sentence Classification)

卷積神經網路(CNN)在句子建模上的應用

4. Doc2vec

(重點)

無監督

將一個句子甚至一篇短文也用一個向量來表示。

涉及到短文,最常用的固定長度的向量方法是詞袋模型(bag-of-words)。儘管它很流行,但是詞袋模型存在兩個主要的缺點:一個是詞袋模型忽略詞序;另一個是詞袋模型忽略語法。

Doc2vec又叫Paragraph Vector,基於word2vec模型提出,具有一些優點,比如不固定句子長度,接受不同長度的句子做訓練樣本,Doc2vec是一個無監督學習演算法

模型中,每一句話用唯一的向量表示,每一個詞也用唯一的向量表示。增加了一個新句子向量Paragraph Vector,它可以被看作另一個詞向量,扮演了一個記憶的功能。因為Paragraph Vector在一個句子的若干次訓練中是共享的,它被看作是句子的主旨。

PV-DM(Distributed Memory Model of paragraph vector)

類似word2vec中的CBOW模型。

PV-DBOW(Distributed Bag of Words of parageaph vector)

類似word2vec中的skip-gram模型。

預測過程

Doc2vec怎麼預測新的句子Paragraph Vector?

在預測新句子的過程中,將Paragraph Vector隨機初始化,然後再根據隨機梯度下降不斷迭代最終求得最終穩定下來的句子向量。但是在預測過程中,模型裏的詞向量和投影到輸出層的softmax weights是不會變的,這樣不斷迭代的過程中只會更新Paragraph Vector

代碼實現

from gensim.model.doc2vec import Doc2Vec

5. 基於RNN的模型

有監督

比較早期的應用,通常取最後的時序輸出算作句子表徵

很顯然利用RNN(GRU或者LSTM)是一種不錯的解決方案,它完全克服了BOW中忽略語序的缺點。但是它往往和supervised task結合在一起,缺乏可擴展性或者說遷移性(transferrable),在某個task中可以取得不錯的成績,但是遇到其他的問題就得重新進行訓練。LSTM往往開銷比較大,而且不適合GPU的並行處理。

5.1 Infersent

(重點)

2017 Supervised Learning of Universal Sentence Representations from Natural Language Inference Data

在SNLI語料上訓練的位於句子編碼器頂層的分類器,兩個句子共用同一個編碼器,這裡的編碼器採用max-pooling操作實現的biLSTM。(參考9)

InferSent的代碼實現

InferSent的代碼實現

6. Sentence2Vec

無監督

6.1 SIF

(重點)

可以看作基於詞袋模型的改進。原文模型僅用於分類,但也可用於有監督的學習Sentence Embedding。

以smooth inverse frequency(SIF)為權重,對所有詞的word vector加權平均,最後從中減掉principal component,得到sentence embedding。

A simple but tough to beat baseline for sentence

github1

github2

6.2 skip-thought vectors

NIPS15 Skip-Thought Vectors

skip-thought模型結構藉助了skip-gram的思想。在skip-gram中,是以中心詞來預測上下文的詞;在skip-thought同樣是利用中心句子來預測上下文的句子。

skip-thought模型的神經網路結構是在機器翻譯中最常用的Encoder-Decoder架構,而在Encoder-Decoder架構中所使用的模型是GRU模型。因此在訓練句子向量時同樣要使用到詞向量,編碼器輸出的結果為句子中最後一個詞所輸出的向量

skip-thought vector 實現Sentence2vector

TensorFlow 自動句子語義編碼,谷歌開源機器學習模型 Skip-Thoughts

6.3 Quick-Thought Vectors

(重點)

2018

本文是基於Skip-Thought Vector的改進。訓練速度比Skip-Thought Vector快,後者需要訓練3個RNN模塊。(參考7)(參考11)

6.4 An Exploration of Discourse-Based Sentence Spaces for Compositional Distributional Semantics

這篇工作的出發點非常明確,就是去探究compositional vs distributional兩類方法的basic setting有多大差別,是否有優劣之分。文章分別用基於compositional的思想和distributed的思想(所謂discourse-based)構造了一些feature,進行sentence表達,最後用實驗來展現兩者之間是否存在gap.結論是,幾乎不存在gap。

7. Power Mean均值模型

無監督

2018

也是基於詞袋模型的改進,通過引入冪均值(Power Mean)來捕捉序列中的其他信息。(參考10)

github

8. 基於Attention的模型

8.1 self-attention

(重點)

2017 A Structured Self-attentive Sentence Embedding

本文提出使用二維矩陣作為句子表徵,矩陣的行表示在句子不同位置的關注度,以解決句子被壓縮成一維向量時的信息損失。(參考7)

A STRUCTURED SELF-ATTENTIVE SENTENCE EMBEDDING

8.2 Learning Sentence Representation with Guidance of Human Attention IJCAI

8.3 Hierarchical Attention

(重點)

Hierarchical Attention Networks for Document Classification

9. 多任務學習

(重點)

多任務學習試圖在一次訓練中組合不同的訓練目標。

9.1 基於多任務的Sentence Embedding

2018 Learning General Purpose Distributed Sentence Representations via Large Scale Multi-task Learning

  • 本文認為為了能夠推廣到各種不同的任務,需要對同一句話的多個方面進行編碼。
  • 簡單來說,模型同時在多個任務和多個數據源上進行訓練,但是共享相同的Sentence Embedding。

9.2 Universal Sentence Encoder(谷歌)

2018 Universal Sentence Encode

這篇文章基於InferSent,也是想找到一個universal encoder

本文使用類似的多任務框架,區別在於使用的Encoder不同。

以兩種模型作為Encoder:

  • Transformer,更高的精度
  • DAN(Deep Averaging Network),更快的速度

10. 從對話中學習

(重點)

Learning Semantic Textual Similarity from Conversations

關於句子embedding的一些工作簡介(五)---- 從對話中學習

github開源代碼

awesome-sentence-embedding

zhihu.com/question/2995

參考

1語義分析的一些方法1

2語義分析的一些方法2

3Sentence Vector 的一些進展

4從compositional到distributed,從無監督到有監督再到多任務學習 —— 漫談句向量 Sentence Embedding

5深度學習在文本分類中的應用

6深度學習在文本分類中的應用

7專題 句向量

8關於句子embedding的一些工作簡介(一)

9關於句子embedding的一些工作簡介(二)---- InferSent

10關於句子embedding的一些工作簡介(三)---- Concatenated p-mean Word Embeddings

11關於句子embedding的一些工作簡介(四)---- Quick Thoughts

12當前最好的詞句嵌入技術概覽:從無監督學習轉向監督、多任務學習

13NLP預訓練模型大集合!

14當前最好的詞句嵌入技術概覽:從無監督學習轉向監督、多任務學習


推薦閱讀:
相關文章