综述 | 一文简单了解句向量

跟着博主的脚步,每天进步一点点640640

前 言

如何求解一个sentence vector的表达

过去,我们常见的就是从word vector到sentence vector,这种从小unit到大一级unit的方法,统一称为“composion”;这方面的工作有以下的1、2、3、4、5、6、7。

其实,除了以上方法,还有一种基于distributed的思想,这种方法就像word2vec一样,一个word的向量表达由它周围的contexts来展现;那么同理我们也可以把一个sentence当作一个word,即一个unit,用sentence上下文的前后sentence作为它的context来求得;这方面的工作有6.2、6.3、6.4。其余的从多任务、对话中学习等等。

目 录

1. Bag of Words(BOW)

2.Deep Averaging Network(DAN)

3.CNN for sentence modeling(各种基于CNN的模型)

4.Doc2vec

5.基于RNN的模型

    5.1  Infersent.

6.Sentence2Vec

    6.1  SIF.. 

    6.2  skip-thought vectors. 

    6.3  Quick-Thought Vectors. 

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

7.  Power Mean均值模型

8. 基于Attention的模型

    8.1  self-attention

    8.2  Learning Sentence Representation     with Guidance of Human Attention IJCAI  

    8.3  Hierarchical Attention

9. 多任务学习

    9.1 基于多任务的Sentence  Embedding

    9.2  Universal Sentence Encoder

10. 从对话中学习

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

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。

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

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

The End

640?wx_fmt=gif
往期精彩回顾



640?wx_fmt=gif
640?wx_fmt=gif
640?wx_fmt=gif

长按二维码关注AI小白入门

ID:StudyForAI

学习AI学习ai(爱)

期待与您的相遇~

640?wx_fmt=png
你点的每个赞,我都认真当成了喜欢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值