Word Representation 词表示

一、概念和意义

1.1. One-Hot

在自然语言处理中,我们该怎样从语料中提取信息?语料是string的形式,无法计算,所以我们必须要把语料用向量表示。
最先引入最基本的表示方法 One Hot,根据词在词汇表的位置来表示这个词。

1.2. 语言模型 Language Model

表示后怎么用呢?一个朴素的概念是,当我们知道了上文,就能预测下个词是什么。设我们要预测的词语是\(w_k\),它前面有\(k-1\)个词语,那么到了第\(k\)个词时为\(w_k\)的概率是:

\[P(w_1,w_2,w_3,...,w_k)\\ =P(w_1)P(w_2|w_1)P(w_3|w_2,w_1)...P(w_k|w_k-1,...w_1)\]

那么如何求的下个词的概率 \(P(w_1,w_2,w_3,...,w_k)\)

最朴素的思想,把其中每一个子项的概率全部求解出来,每一项都有 \(P(w_k|w_{1}^{k-1})=\frac{P(w_{1}^{k})}{P(w_{1}^{n-1})}\approx \frac{Count(w_{1}^{k})}{Count(w_{1}^{k-1})}\) ,只要求出来每一项,就知道下个词为的概率 \(w_k\) 了,这就是统计语言模型。
但显然基于统计的语言模型复杂度非常高,遍历统计每种几率不现实,所以逐步发展出了N-gram模型、基于神经网络的模型……

二、N-gram 模型

2.1. 概念

在上一节中,计算每一项 \(Count(w_{1}^{k})\) 是唯一耗时。为了简化问题,我们做一个假设,每个词的出现概率,只和它前面的N个词语有关,这就是N-gram模型了。
根据N-gram,我们有

\[P(w_k|w_{1}^{k-1})=\frac{P(w_{1}^{k}))}{P(w_{1}^{n-1})}\approx \frac{Count(w_{1}^{k})}{Count(w_{1}^{k-1})}\approx \frac{Count(w_{k-n+1}^{k})}{Count(w_{k-n+1}^{k-1})} \]

这样一来,需要统计的数量就变少了。那么 \(n\) 取多少呢?一般来说要考虑到模型复杂度和模型效果。复杂度方面,假定词汇有 \(|V|=2*10^5\) 个,由于整体复杂度是 \(O({N}^{n})\) ,因此一般不会取太大的 \(n\) 。实践中一般取 \(n=3\),称为 Three-Gram Model (三元模型)。

2.2. Smoothing 平滑化

问题背景

  • 若n-gram公式中 \(Count(w_{k-n+1}^{k-1})=0\),能否认为 $ P(w_k|w_{1}^{k-1})=0$ ?
    1. 在n-gram中,即使语料库再丰富,也必然有未共现的词汇组合。
    2. 对于百万字中文语料来说约23%的bigram未出现[1],百万词英文语料中50%三元组只出现一次,80%三元组不超过5次[2]
    3. 针对未共现的词汇,若设 $ P(w_k|w_{1}^{k-1})=0$ 。由于n-gram中的概率是由子序列概率乘积得到的,如果中间有一个值为0,那么对于一个句子,我们就会得到一个很差的概率估计(0概率),导致泛化能力弱。
  • 若n-gram公式中 \(Count(w_{k-n+1}^{k-1})=Count(w_{k-n+1}^{k})\),能否认为 $ P(w_k|w_{1}^{k-1})=1$ ?
    • 留待思考

解决方案[3]

  1. Add-One Smoothing (Laplace Smoothing)
    • 在现有语料基础上,假设每个可能的 N-gram 再发生一次。例如原来0次的现在就有1次共现,10次的就有11次共现。
    • \( P(w_k|w_{1}^{k-1})= \frac{Count(w_{k-n+1}^{k})}{Count(w_{k-n+1}^{k-1})}→\frac{Count(w_{k-n+1}^{k})+1}{Count(w_{k-n+1}^{k-1})+V}\)
    • \(V\) 表示词汇表 \(N-1\) 阶组合的数量,对bigram而言就是词汇表的大小。
    • Add-One Smoothing 的缺点是对原先未共现的组合过于倾向。考虑到前面问题背景里给出的数据统计结论——“80%三元组不超过5次”,加1的操作对语料库中存在共现的组合产生了较大影响。因此在实际操作时可以不采用 \(V\) ,通过引入系数 \(\delta∈(0,1)\) ,使用 \(\delta V\) 来代替。
  2. Interpolation Smoothing (Jelinek-Mercer Smoothing) 差值平滑
    • 以低阶元组的线性组合辅助表示高阶元组:
    • \(P(w_k|w_{k-1},w_{k-2})=λ_1P(w_k|w_{k-1},w_{k-2})+λ_2P(w_k|w_{k-1})+λ_3P(w_k)\)
    • 差值平滑中 \(P(w_k)\) 子项可以保证结果不为0。
    • 参数 \(λ_i\) 可以通过最大似然估计的方式学习。但如果对所有元组单独学习 \(λ_i\) 会导致参数量过多,因此需要根据一定规则方式共享一部分 \(λ_i\) 参数,例如相同词性使用相同 \(λ_i\),或者全部词汇共享相同的 \(λ_i\)
  3. Backoff Smoothing
  4. Good-Turing Smoothing

2.3. Perplexity 困惑度——评价语言模型的好坏[4]

在得到不同的语言模型(一元语言模型、二元语言模型....)的时候,我们如何判断一个语言模型是否好还是坏,一般有两种方法:

  1. 一种方法将其应用到具体的问题当中,比如机器翻译、speech recognition、spelling corrector等。然后看这个语言模型在这些任务中的表现(extrinsic evaluation,or in-vivo evaluation)。但是,这种方法一方面难以操作,另一方面可能非常耗时,可能跑一个evaluation需要大量时间,费时难操作。
  2. 针对第一种方法的缺点,大家想是否可以根据与语言模型自身的一些特性,来设计一种简单易行,而又行之有效的评测指标。于是,人们就发明了perplexity这个指标。

困惑度(perplexity)的基本思想是:给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好,公式如下:

\[Perplexity(W)=P(w_1,w_2,...,w_N)^{-\frac{1}{N}} \]

由公式可知,句子概率越大,语言模型越好,迷惑度越小。

三、神经概率语言模型 NNLM

N-gram思路将计算的窗口范围缩减到了n个,但是仍然是一个统计概率语言模型,基于统计去进行概率估计。就像分类问题我们可以建模成神经网络模型,在语言模型中我们也可以引入神经网络的结构,通过训练每层之间的参数,拟合出语言概率的结果,这就是NNLM。

3.1. 概念

第一层是输入层,设每个词语是长度为 m 的 “distribution representation” 向量,一共有 n 个词,那么输入层shape 就是 (n, m)

第二层是投影层,把输入的每个词concat起来,输出shape = (1, nm)

第三层是隐藏层,是一个Dense(activation='tanh')的全连接,有参数 W 和 b 在这里训练,设隐藏层的输出是 h 维的(这里一般较小的数字就可以了,因为很影响计算量),那么输出shape = (nm, h)

第四层是输出层,是一个Dense(activation='tanh')的全连接softmax输出。有参数也在这一层训练。同时输出的向量大小是 (|V|, 1),|V|就是词汇表的大小。

四、Word2Vec


参考资料


  1. https://blog.csdn.net/lzh_12345/article/details/82990101 ↩︎

  2. https://www.isip.piconepress.com/courses/msstate/ece_8463/lectures/current/lecture_33/lecture_33.pdf ↩︎

  3. https://web.archive.org/web/20181024040030/http://www.cs.utexas.edu/~mooney/cs388/slides/equation-sheet.pdf ↩︎

  4. https://zhuanlan.zhihu.com/p/44107044 ↩︎

posted @ 2020-05-04 16:33  蒙多医生  阅读(699)  评论(0)    收藏  举报