词向量表示方法:
离散表示:One-hot Representation
NLP 相关任务中最常见的第一步是创建一个词表库并把每个词顺序编号。这实际就是词表示方法中的 One-hot Representation,这种方法把每个词顺序编号,每个词就是一个很长的向量,向量的维度等于词表大小,只有对应位置上的数字为 1,其他都为 0。当然在实际应用中,一般采用稀疏编码存储,主要采用词的编号。
这种表示方法一个最大的问题是无法捕捉词与词之间的相似度,就算是近义词也无法从词向量中看出任何关系。此外这种表示方法还容易发生维数灾难,尤其是在 Deep Learning 相关的一些应用中。
John: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
离散表示:Bag of Words
- 文档的向量表示可以直接将各词的词向量表示加和
- 词权重:词在文档中的顺序没有被考虑
TF-IDF (Term Frequency - Inverse Document Frequency)
Binary weighting:短文本相似性,Bernoulli Naive Bayes
离散表示:Bi-gram和N-gram
为2-gram建索引:
"John likes”: 1,
"likes to”:2,
"to watch”:3,
"watch movies”: 4,
"Mary likes”: 5,
"likes too”:6,
"John also”: 7,
"also likes”: 8,
“watch football”: 9,
"football games": 10,
John likes to watch movies. Mary likes too. [1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
John also likes to watch football games. [0, 1, 1, 0, 0, 0, 1, 1, 1, 1]
优点:考虑了词的顺序
缺点:词表的膨胀
统计语言模型
传统的统计语言模型是表示语言基本单位(一般为句子)的概率分布函数,这个概率分布也就是该语言的生成模型。一般语言模型可以使用各个词语条件概率的形式表示:
p(s) = p(w 1T ) = p(w 1 , w 2 ,... , w T )=∏ Tt=1 p( w t |Context)
- Unigram/1-gram
P(Mary likes too) = P(too | Mark, likes) * P(likes | Mary) * P(Mary)= P(too) * P(likes) * P(Mary)
- Bi-gram/2-gram
P(Mary likes too) = P(too | Mark, likes) * P(likes | Mary) * P(Mary)= P(too | likes) * P(likes | Marry) * P(Mary)
### 问题: ###
无法衡量词向量之间的关系
太稀疏,很难捕捉文本的含义
词表维度随着语料库增长膨胀
其中 Context 即为上下文,根据对 Context 不同的划分方法,可以分为五大类:
(1)上下文无关模型(Context=NULL)
该模型仅仅考虑当前词本身的概率,不考虑该词所对应的上下文环境。这是一种最简单,易于实现,但没有多大实际应用价值的统计语言模型。
N wt
p(w t |Context)= p(w t )= ------
N
这个模型不考虑任何上下文信息,仅仅依赖于训练文本中的词频统计。它是n-gram 模型中当 n=1 的特殊情形,所以有时也称作 Unigram Model(一元文法统计模型)。实际应用中,常被应用到一些商用语音识别系统中。
(2)n-gram 模型(Context= w t−n+1 , w t−n+2 ,... , w t−1 )
n=1 时,就是上面所说的上下文无关模型,这里 n-gram 一般认为是 N>=2 是的上下文相关模型。当 n=2 时,也称为 Bigram 语言模型,直观的想,在自然语言中 “白色汽车”的概率比“白色飞翔”的概率要大很多,也就是 p(汽车|白色)>p(飞翔|白色)。n>2 也类似,只是往前看 n-1 个词而不是一个词。一般 n-gram 模型优化的目标是最大 log 似然,即:
∏ Tt=1 p t ( w t |w t−n+1 , w t−n+2 ,... , w t−1 )logp m (w t |w t−n+1 , w t−n+2 ,... , w t−1 )
n-gram 模型的优点包含了前 N-1 个词所能提供的全部信息,这些信息对当前词出现具有很强的约束力。同时因为只看 N-1 个词而不是所有词也使得模型的效率较高。
n-gram 语言模型也存在一些问题:
- n-gram 语言模型无法建模更远的关系,语料的不足使得无法训练更高阶的语言模型。大部分研究或工作都是使用 Trigram,就算使用高阶的模型,其统计到的概率可信度就大打折扣,还有一些比较小的问题采用 Bigram。
- 这种模型无法建模出词之间的相似度,有时候两个具有某种相似性的词,如果一个词经常出现在某段词之后,那么也许另一个词出现在这段词后面的概率也比较大。比如“白色的汽车”经常出现,那完全可以认为“白色的轿车”也可能经常出现。
- 训练语料里面有些 n 元组没有出现过,其对应的条件概率就是 0,导致计算一整句话的概率为 0。解决这个问题有两种常用方法:
- 方法一为平滑法。最简单的方法是把每个 n 元组的出现次数加 1,那么原来出现 k 次的某个 n 元组就会记为 k+1 次,原来出现 0 次的 n 元组就会记为出现 1次。这种也称为 Laplace 平滑。当然还有很多更复杂的其他平滑方法,其本质都是将模型变为贝叶斯模型,通过引入先验分布打破似然一统天下的局面。而引入先验方法的不同也就产生了很多不同的平滑方法。
- 方法二是回退法。有点像决策树中的后剪枝方法,即如果 n 元的概率不到,那就往上回退一步,用 n-1 元的概率乘上一个权重来模拟。
(3)n-pos 模型(Context= c(w t−n+1) , c(w t−n+2 ),... , c(w t−1 ))
严格来说 n-pos 只是 n-gram 的一种衍生模型。 n-gram 模型假定第 t 个词出现概率条件依赖它前 N-1 个词,而现实中很多词出现的概率是条件依赖于它前面词的语法功能的。n-pos 模型就是基于这种假设的模型,它将词按照其语法功能进行分类,由这些词类决定下一个词出现的概率。这样的词类称为词性(Part-of-Speech,简称为 POS)。n-pos 模型中的每个词的条件概率表示为:
p(s) = p(w 1T ) = p(w 1 , w 2 ,... , w T )=∏ Tt=1 p( w t |c(w t−n+1) , c(w t−n+2 ),... , c(w t−1 ))
c 为类别映射函数,即把 T 个词映射到 K 个类别(1=<K<=T)。实际上 n-Pos使用了一种聚类的思想,使得原来 n-gram 中w t−n+1 , w t−n+2 ,... , w t−1 中的可能为T N-1 减少到c(w t−n+1) , c(w t−n+2 ),... , c(w t−1 )中的 K N-1 ,同时这种减少还采用了语义有意义的类别。当然 n-pos 模型还有很多变种,具体可以参考论文。
4)基于决策树的语言模型
上面提到的上下文无关语言模型、n-gram 语言模型、n-pos 语言模型等等,都可以以统计决策树的形式表示出来。而统计决策树中每个结点的决策规则是一个上下文相关的问题。这些问题可以是“前一个词时 w 吗?”“前一个词属于类别 c i 吗?”。当然基于决策树的语言模型还可以更灵活一些,可以是一些“前一个词是动词?”,“后面有介词吗?”之类的复杂语法语义问题。基于决策树的语言模型优点是:分布数不是预先固定好的,而是根据训练预料库中的实际情况确定,更为灵活。缺点是:构造统计决策树的问题很困难,且时空开销很大。
(5)最大熵模型
最大熵原理是 E.T. Jayness 于上世纪 50 年代提出的,其基本思想是:对一个随机事件的概率分布进行预测时,在满足全部已知的条件下对未知的情况不做任何主观假设。从信息论的角度来说就是:在只掌握关于未知分布的部分知识时,应当选取符合这些知识但又能使得熵最大的概率分布。
e ∑ i λi fi (context,w)
p(w|Context) =-------------------------
Z(Context)
其中λ i 是参数, Z(Context)为归一化因子,因为采用的是这种 Softmax 形式,所以最大熵模型有时候也称为指数模型。
(6)自适应语言模型
前面的模型概率分布都是预先从训练语料库中估算好的,属于静态语言模型。而自适应语言模型类似是 Online Learning 的过程,即根据少量新数据动态调整模型,属于动态模型。在自然语言中,经常出现这样现象:某些在文本中通常很少出现的词,在某一局部文本中突然大量地出现。能够根据词在局部文本中出现的情况动态地调整语言模型中的概率分布数据的语言模型成为动态、自适应或者基于缓存的语言模型。通常的做法是将静态模型与动态模型通过参数融合到一起,这种混合模型可以有效地避免数据稀疏的问题。还有一种主题相关的自适应语言模型,直观的例子为:专门针对体育相关内容训练一个语言模型,同时保留所有语料训练的整体语言模型,当新来的数据属于体育类别时,其应该使用的模型就是体育相关主题模型和整体语言模型相融合的混合模型。
Distributed Representation
Distributed representation 最早由 Hinton 在 1986 年提出 [8] 。其基本思想是通过训练将每个词映射成 K 维实数向量(K 一般为模型中的超参数),通过词之间的距离(比如 cosine 相似度、欧氏距离等)来判断它们之间的语义相似度。而word2vec 使用的就是这种 Distributed representation 的词向量表示方式。
需要的记忆单元数=颜色20X型号3X车型30
用一个词附近的其他词来表示该词
共现矩阵 (Cocurrence matrix)
Word - Document 的共现矩阵主要用于发现主题(topic),用于
主题模型,如LSA (Latent Semantic Analysis)
局域窗中的Word - Word 共现矩阵可以挖掘语法和语义信息
• I like deep learning.
• I like NLP.
• I enjoy flying.
window length设为1(一般设为5~10)
使用对称的窗函数(左右window length都为1)
存在的问题
将共现矩阵行(列)作为词向量
• 向量维数随着词典大小线性增长
• 存储整个词典的空间消耗非常大
• 一些模型如文本分类模型会面临稀疏性问题
• 模型会欠稳定
构造低维稠密向量作为词的分布式表示 (25~1000维)!
SVD降维
最直接的想法:用SVD对共现矩阵向量做降维
SVD降维的问题###
计算量随语料库和词典增长膨胀太快,对X(n,n)维
的矩阵,计算量O(n^3)。 而对大型的语料库,
n400k,语料库大小160B token
难以为词典中新加入的词分配词向量
与其他深度学习模型框架差异大
NNLM (Neural Network Language model)
NNLM 采用的是 Distributed Representation,即每个词被表示为一个浮点向量。
其模型图如下: