在之前的几次笔记中,我们已经学习过几种语言模型了,今天要看的Word Embedding在传统的神经网络语言模型中也提及过,今天我们再系统地看一下Word Embedding中一个重要方法Word2vec,以及Word2vec包含的两个模型的基本原理及训练过程。
文本表征
在NLP中,文本的表征是一项必不可少的工作,因为文本是一种非结构化的数据信息,是不可以直接被计算的。文本表征就是用一堆结构化的数据(比如数组、向量)来表征某个词语或者某段文本,这样原本非结构化的信息就可以被转化为结构化的信息,计算机也就能计算处理了。文本表征的方法有很多,下面简单回顾一下常用的几种,以便我们理解Word-Embedding的作用。
One-hot编码
这个我们之前在语言模型(二)—— 神经网络语言模型(NNLM)中已经介绍过了,这里再简单介绍一下。
假设我们有一个词表:
[苹果,茄子,香蕉,蘑菇,菠菜]
那苹果
和香蕉
的one-hot编码就可以表示为:
苹果:[1,0,0,0,0]
香蕉:[0,0,1,0,0]
可以看得出来,这是一种离散的表示方法,就是在词表中找位置,即该词语在词表中的位置映射到特征向量中的位置的值为1,其他位置都为0。one-hot编码有两大主要缺点:
- 数据稀疏问题,大词表计算时计算量大,计算和存储效率都很低。
- 词表征向量之间相互正交,cosine余弦相似度为0,无法表达词语之间的相似度关系。
Bag of Words
词袋模型,也称为计数向量表示。基本过程就是通过语料构建词袋,再将语料通过词计数的方式表达出来。举个例子:
句子A:Jane wants to go to Shenzhen
句子B:Bob wants to go to Shanghai
构建词表:[Jane, wants, to, go, Shenzhen, Bob, Shanghai]
句子A表示:[1,1,2,1,1,0,0]
句子B表示:[0,1,2,1,0,1,1]
词袋模型的不足在于:
- 语句中词语的顺序在最后的表征向量中已经丢失。
- 词语的重要性关系未得到体现。
TF-IDF与N-gram
TF-IDF与N-gram也算是文本表征的方式,之前的笔记TF-IDF的原理及代码实现和语言模型(一)—— 统计语言模型n-gram语言模型已经有过详细说明,这里不再复述。
Word-Embedding
词嵌入模型基于的基本假设是出现在相似的上下文中的词含义相似,以此为依据将词从高维稀疏的独热向量映射到低维稠密的连续向量,从而实现对词的语义建模。比如,在一个大的语料库中,词语“博客”
的One-hot编码是[0,0,0,0,0,0,0,1,0,……,0,0,0,0,0,0,0]
,维度是词表的大小(假设为20000),用一个五维的词向量来表达可能是[0.286,0.791,-0.177,0.10