词向量及语言模型

一、词向量

词向量word embedding):词的向量表征。

很多初识机器学习、深度学习等的同学,包括我,一定对词向量比较迷惑,为什么说前者之前都要提到词向量?答案:为了将输入数据表示成向量,在向量上进行数学建模。这样把词表示为计算机适合处理的方式。

词向量表示方法:

1)one-hot vector:将所有单词排序,排序之后每个单词就会有一个位置,然后用一个与单词数量等长的数组表示某单词,该单词所在的位置数组值就为1,而其他所有位置值都为0。

例如:

“话筒”表示为 [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 …]
“麦克”表示为 [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 …]
每个词都是茫茫 0 海中的一个 1。
但是,问题在于:a、这样编码太稀疏了,会导致维度非常高,因为单词的数量级通常在10^6级别,维度高就导致计算困难。b、我们无法简单的从这样的编码中得知单词之间的关系。原因在于:每个词本身的信息量都太小。所以,仅仅给定两个词,不足以让我们准确判别它们是否相关。

2)Distributed representation

其是一种既能表示词本身又可以考虑语义距离的词向量表示方法。

该方法最早由 Hinton在 1986 年提出。它是一种低维实数向量,这种向量一般长成这个样子:
[0.792, −0.177, −0.107, 0.109, −0.542, …]。

将 word映射到一个新的空间中,并以多维的连续实数向量进行表示叫做“Word Represention” 或 “Word Embedding”。

采用低维空间表示法,不但解决了维数灾难问题,并且挖掘了word之间的关联属性,从而提高了向量语义上的准确度。

二、语言模型

早期的自然语言处理采用硬编码的规则来实现。在上世纪80年代,机器学习被应用于自然语言处理中,统计语言模型被提出来,并广泛应用于机器学习模型中。我们这里的语言模型就是指统计语言模型。

我们认识一下什么是一个好的模型?对某个我们认为正确的句子,比如『狗啃骨头』,一个好的模型将能给出很高的概率。而对于不合理的句子,比如『骨头啃狗』它将给出很低的概率。这里面的一个重要的概念就是句子的概率。统计语言模型,简单而言,就是计算某一个句子的概率:P(w1, w2, w3, …)。其中w表示句子中的单词。

1、N-gram neural model。

根据前n个词来预测下一个词。这样我们就得到了Unigram Model,Bigram Model, Trigram Model或者N-gram Model。

但是,直接使用N-gram模型来计算句子概率是有问题的。因为它太简单了,最多能表示单词和前n个单词的关系,前n+1个单词就无法表示。而且n不能太大,太大会导致计算问题,并且n太大通常性能不会有明显的提升。详细分析参考:模型详细分析。模型如下图所示:

词向量及语言模型

2、词向量模型

1) LSA矩阵分解模型

采用线性代数中的奇异值分解方法,选取前几个比较大的奇异值所对应的特征向量将原矩阵映射到低维空间中,从而达到词矢量的目的。

2)PLSA 潜在语义分析概率模型

从概率学的角度重新审视了矩阵分解模型,并得到一个从统计,概率角度上推导出来的和LSA相当的词矢量模型。

3)  LDA 文档生成模型

按照文档生成的过程,使用贝叶斯估计统计学方法,将文档用多个主题来表示。LDA不只解决了同义词的问题,还解决了一词多义的问题。目前训练LDA模型的方法有原始论文中的基于EM和 差分贝叶斯方法以及后来出现的Gibbs Samplings 采样算法。

4)Word2Vector 模型

其通过神经网络机器学习算法来训练N-gram 语言模型,并在训练过程中求出word所对应的vector的方法。

3、word2vec算法

词向量模型中主要要介绍的是word2vec算法可以理解为word2vec就是将词表征为实数值向量的一种高效的算法模型,其利用深度学习的思想,可以通过训练,把对文本内容的处理简化为 K 维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似。其使用 Distributed representation 的词向量表示方式。

基本思想:通过训练将每个词映射成 K 维实数向量(K 一般为模型中的超参数),通过词之间的距离(比如 cosine 相似度、欧氏距离等)来判断它们之间的语义相似度.其采用一个 三层的神经网络 ,输入层-隐层-输出层。有个核心的技术是 根据词频用Huffman编码 ,使得所有词频相似的词隐藏层**的内容基本一致,出现频率越高的词语,他们**的隐藏层数目越少,这样有效的降低了计算的复杂度。

word2vec算法,在不断发展沉淀之后,得到两个机器学习模型:Skip Gram Model和CBOW(Continuous Bag of Words)。

3-1)Continuous Bag-of-Words model(CBOW)

CBOW模型通过一个词的上下文各N个词)预测当前词。具体来说,不考虑上下文的词语输入顺序,CBOW是用上下文词语的词向量的均值来预测当前词。CBOW的好处是对上下文词语的分布在词向量上进行了平滑,去掉了噪声,因此在小数据集上很有效。

词向量及语言模型

算法步骤:

  • 随机生成一个大小为(vocabulary_size, embedding_size)的embedding矩阵(即所有单词的词向量矩阵,每一个行对应一个单词的向量)
  • 对于某一个单词(中心词),从embedding矩阵中提取其周边单词的词向量
  • 求周边单词的词向量的均值向量
  • 在该均值向量上使用logistic regression进行训练,softmax作为**函数
  • 期望logistic regression得到的概率向量可以与真实的概率向量(即中心词的one-hot编码向量)相匹配。

3-2)Skip-gram model

Skip-gram模型的具体做法是,将一个词的词向量映射到2n个词的词向量(2n表示当前输入词的前后各n个词),然后分别通过softmax得到这2n个词的分类损失值之和。

Skip-gram的方法中,用一个词预测其上下文,得到了当前词上下文的很多样本,因此可用于更大的数据集。具体如图:

词向量及语言模型

Skip-gram模型属于非监督学习领域。

算法步骤:

  • 随机生成一个大小为(vocabulary_size, embedding_size)的embedding矩阵(即所有单词的词向量矩阵,每一个行对应一个单词的向量)
  • 对于某一个单词,从embedding矩阵中提取单词向量
  • 在该单词向量上使用logistic regression进行训练,softmax作为**函数
  • 期望logistic regression得到的概率向量可以与真实的概率向量(即周边词的one-hot编码向量)相匹配。

3)词向量计算

词向量的计算结果:最终的词向量里面,相似的单词,他们的词向量值在比例上也是相似的。

词向量的相似性衡量:事实上我们通常会用余弦距离去衡量词向量的相似性,即词向量间的夹角。相似性就是:给定单词w1 w2 w3的词向量Vw1 Vw2 Vw3,如果Vw1 Vw2.T / (|Vw1||Vw2|) > Vw1 Vw3.T / (|Vw1||Vw3|),那么我们就认为w2比w3更接近w1。



学习资料:1)http://wiki.jikexueyuan.com/project/deep-learning/word-vector.html

2)http://brightliao.me/2016/12/02/dl-workshop-rnn-and-lstm/

3)https://blog.csdn.net/qq_34941023/article/details/78434057