句向量模型

2018/04/24 NLP 神经网络

如何求解一个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 * (句子中词的个数))

参考

  • 共现矩阵(Cocurrence matrix),然后一般配合PCA或SVD将其进行降维。

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媲美的准确度。

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)在句子建模上的应用

利用池化层

Enhancing Sentence Embedding with Generalized Pooling: https://github.com/baaesh/BiLSTM-Generalized-Pooling-pytorch

4. Doc2vec

(重点)

gensim之doc2vec

Paragraph Vectors(doc2vec)的PyTorch实现

无监督

将一个句子甚至一篇短文也用一个向量来表示。

涉及到短文,最常用的固定长度的向量方法是词袋模型(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

https://www.zhihu.com/question/299549788/answer/561907291

参考

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当前最好的词句嵌入技术概览:从无监督学习转向监督、多任务学习

Search

    Table of Contents