Word Embeding词嵌入


语言数字化的这个过程叫做 Word Embedding,中文名称叫做 “词嵌入”, 而转化后获得到的向量矩阵就叫做词向量, 其实就是词的数学表示。在过去20多年来,NLP中最直观,也是最常用的词向量方法是One-hot Representation。后来随着Google发布 Word2Vec ,Distributed Representation 逐渐流行起来。本文将介绍一些常用的词嵌入技术,它们的优缺点以及适用场景。
Word Embeding词嵌入

Classical Representation: One-hot Encoding

独热编码是NLP领域最简单的一种单词表示法。One-hot Encoding就是一个单词用长度为V的向量表示,其中只有一个位置为1,其余位置为0,V为语料中词库的大小。

From One-hot to Distributed Representation

Distributed Representation中的distributed 没有统计上的“分布”含义,而是“分散”、“分配”的意思。代表,讲一段文本中,具有相似含义的word分散到空间中相邻的区域,不相似的分散到相距较远的区域。以此来解决onehot非常的稀疏、不能表示单词间语义的相似度等缺点。
经过Distributed Representation得到的矩阵就叫词向量(word vector),如上图右边所示。词向量需要通过词向量模型学习来得到。我们需要一批语料当作模型的输入,然后词向量模型可以选择Word2Vec模型、Bert模型或者其它模型,最后就可以得到词的分布式表示向量。

Static Word Embedding

Static Word Embedding和Contextualized(Dynamic) Word Embedding的区别在于,Static Word Embedding训练后,一个Word只对应一个词向量,而Contextualized一个Word对应多个。Contextualized是NLP最近几年发展出来的新技术,在解决联系上下文、一词多义等方面具有更好的效果。

Word2Vec

比较经典的词向量模型是Word2Vec,主要包含两个模型:CBOW和SkipGram模型。CBOW是根据上下文来预测中心单词;SkipGram通过中心词来预测上下文的单词。
CBOW与SkipGram的比较
数据比较少的时候,SkipGram效果比较好。 因为通过SkipGram的训练方式,我们能从较少的数据集中构造出更多的训练样本,CBOW是对中心词构造一条样本,SkipGram是对中心词可以构造多条训练样本。
出现次数较少的单词在语料库中较多的时候,SkipGram效果比较好。 因为CBOW的映射层起到Smoothing的作用,模型会预测更经常出现的单词。
在SkipGram预测的时候,输出的是预测目标词的概率,也就是说我每一次预测都要基于全部的数据集进行计算,这无疑会带来很大的时间开销。因此,Word2Vec提出两种加快训练速度的方式,一种是Hierarchical softmax,另一种是Negative Sampling。

Word Embedding by Matrix Factorization

矩阵分解也是可以学习词向量的。假如我们有三个句子组成的语料库:I enjoy flying. I like NLP. I like deep learning. 我们可以统计出单词的共现矩阵(Co-occurrence Matrix)如下。将共现矩阵行(列)作为词向量。例如:假设统计窗口大小为2,“I like”出现在第2、3句话中,一共出现2次,所以“I like”=2。同理,“like I”也是2次。将共现矩阵行(列)作为词向量表示后,可以知道“like”、“enjoy”都是在“I”附近且统计数目大约相等,因此它们意思相近。

Glove

局部的方法和全局的方法都有自己的优缺点。全局的方法可以从整个语料的角度更宏观的审视词的特点;局部的方法是基于局部语料库训练的,其特征提取是基于滑窗的,因此局部的方法可以进行在线学习。基于局部方法论和全局方法论的优缺点,科学家提出了Glove算法。
Glove算法很好地把MF这种全局的方法和SkipGram这种局部的方法整合在了一起。Glove的计算效率很高、效果也很好。
参考