Objective
问题起源
文本是符号数据,两个词只要字面不同,就难以刻画它们之间的联系,即使是“麦克风”和“话筒”这样的同义词,从字面上也难以看出这两者意思相同(语义鸿沟现象)。(符号性这个角度类似于生物序列数据)
我们希望计算机可以从大规模无标注的文本数据中自动学习得到文本表示,这种表示需要包含对应语言单元(词或文档)的语义信息,同时可以直接通过这种表示度量文本之间的语义相似度。
形式化问题 1
输入:语句的集合/文章的集合
输出: 语言中词的一种表示
1954年,Harris 提出分布假说(distributional hypothesis),即“上下文相似的词,其语义也相似“。(只针对词)
在分布假说中,需要关注的对象有两个:词和上下文,其中最关键的是上下文的表示。
形式化问题 2
输入:词的上下文
输出: 词的一种表示
神经网络模型可以使用组合方式(?)对上下文进行建模,只需线性复杂度即可对复杂的 n 元短语进行建模。神经网络模型生成的词表示通常被称为词向量(word embedding)。
词向量:一个低维的实数向量表示。通过这种表示,可以直接对词之间的相似度进行刻画。
问题形式化
输入: 词的上下文
输出: 词的低维实数向量表示
方法: 神经网络
Related Knowledge
符号表示
$w$ 表示一个词语.
$w_1 , w_2 , …, w_m $表示一条由m个词语组成的语句.
语言模型
语言模型可以对一段文本的概率进行估计.
形式化的讲,统计语言模型的作用是为一个长度为 $m$ 的字符串确定一个概率分布 $P (w_1 , w_2 , …, w_m )$
$n$元(n-gram)模型
如果文本的长度较长,公式右部$ P (w_i | w_1 , w_2 , \dots , w_{i−1} ) $的估算会非常困难。
因此,研究者们提出使用一个简化模型:$n$ 元模型.对上述条件概率做了以下近似:
在 n 元模型中,传统的方法一般采用频率计数的比例来估算 $n$ 元条件概率:
其中,$count(w_{i−(n−1)} , . . . , w_{i−1} )$ 表示文本序列 $w_{i−(n−1)} , . . . , w_{i−1}$ 在语料中出现的次数。
Method
Method 1: 神经网络语言模型(NNLM)
RNNLM 利用前n个词的上文信息,预测下一个词.即,直接对$ P (w_i | w_1 , w_2 , …, w_{i−1} ) $进行建模.
RNNLM是利用神经网络对条件概率建模.
网络输入输出
目标: 最大化 $P (w_{i-(n-1)/2}| w_{i−(n−1)} , . . . , w_{i−1} )$
输入: 整个词序列 $w_{i−(n−1)} , . . . , w_{i−1}$
输出: 目标词的分布
网络结构
示意图
输入层
词$w_{i−(n−1)} , . . . , w_{i−1}$的词向量的顺序拼接
隐藏层h
其中,其中,$φ$ 为非线性激活函数。
根据公式,每一个隐藏层包含了当前词的信息以及上一个隐藏层的信息。通过这种迭代推进的方式,每个隐藏层实际上包含了此前所有上文的信息.
输出层
网络目标
最大化 $\sum\limits _{w _{i−(n−1):i} ∈D}log P (w_i | w_{i−(n−1)} ,\dots, w_{i−1} )$
即最大化语言模型.
Method 2: 循环神经网络语言模型(RNNLM)
RNNLM 利用所有的上文信息,预测下一个词.即,直接对$ P (w_i | w_1 , w_2 , …, w_{i−1} ) $进行建模.
RNNLM是利用神经网络对条件概率建模.
网络输入输出
目标: 最大化 $P (w_i | w_{i−(n−1)} , . . . , w_1 )$
输入: 整个词序列 $w_{i−(n−1)} , . . . , w_{i−1}$
输出: 目标词的分布
网络结构
示意图
输入层
词$w_{i−(n−1)} , . . . , w_{i−1}$的词向量的顺序拼接
隐藏层h
其中,其中,$φ$ 为非线性激活函数。
根据公式,每一个隐藏层包含了当前词的信息以及上一个隐藏层的信息。通过这种迭代推进的方式,每个隐藏层实际上包含了此前所有上文的信息.
输出层
网络目标
最大化语言模型$\sum\limits _{w _{i−(n−1):i} ∈D}log P (w_i | w_{i−(n−1)} ,\dots, w_1 )$
Method 3: CBOW 模型
该模型一方面使用一段文本的中间词作为目标词;另一方面,又以 NNLM 作为蓝本,并在其基础上做了两个简化。
一、CBOW 没有隐藏层,去掉隐藏层之后,模型从神经网络结构直接转化为 log 线性结构,与 Logistic 回归一致。log 线性结构比三层神经网络结构少了一个矩阵运算,大幅度地提升了模型的训练速度。
二、CBOW 去除了上下文各词的词序信息,使用上下文各词词向量的平均值,代替神经网络语言模型使用的上文各词词向量的拼接。
网络输入输出
目标: 最大化 $P (w_{i-(n-1)/2} | w_{i−(n−1)} , . . . , w_{i−1} )$
输入: 整个词序列 $w_{i−(n−1)} , . . . , w_{i−1}$
输出: 目标词的分布
网络结构
示意图
输入层
词$w_{i−(n−1)} , . . . , w_{i−1}$的词向量的组合
隐藏层h
没有
输出层
c表示上下文
网络目标
最大化 $\sum\limits_{(w,c)\in D}logP(w|c)$
Method 4: Skip-gram 模型
与 CBOW 模型一样, Skip-gram 模型中也没有隐藏层。和 CBOW 模型不同的是,Skip-gram 模型每次从目标词 w 的上下文 c 中选择一个词,将其词向量作为模型的输入 x,也就是上下文的表示。 Skip-gram模型同样通过上下文预测目标词,对于整个语料的优化目标为最大化:
在 Skip-gram 的论文 中将模型描述成通过目标词预测上下文。由于模型需要遍历整个语料,任意一个窗口中的两个词 w_a , w_b 都需要计算 P (w_a |w_b ) + P (w_b |w_a ),因此这两种描述方式是等价的。
网络输入输出
目标: 最大化 $P (w_i | w_{i−(n−1)} , . . . , w_{i−1} )$
输入: 整个词序列 $w_{i−(n−1)} , . . . , w_{i−1}$
输出: 目标词的分布
网络结构
示意图
输入层
词$w_{i−(n−1)} , . . . , w_{i−1}$的词向量的组合
隐藏层h
没有
输出层
c表示上下文
网络目标
最大化 $\sum\limits _{(w,c) \in D}\sum\limits _{w_j \in c}log P (w|w_j )$
采用手段
负采样技术(negative sampling)
构造负样本,构造出了一个优化目标,最大化正样本的似然,同时最小化负样本的似然。其中训练时,一个正样本可以对应多个负样本.
二次采样技术(subsampling)
在大规模语料中,高频词通常就是停用词.一方面,这些高频词只能带来非常少量的语义信息.另一方面,训练高频词本身占据了大量的时间,但在迭代过程中,这些高频词的词向量变化并不大。
如果词 w 在语料中的出现频率 $f (w) $大于阈值 t,则有 $P (w)$ 的概率在训练时跳过这个词。
模型总结
模型名称 | 上下文 | 隐含层 | 词序 |
---|---|---|---|
NNLM | n-gram(前n个词) | 非线性变换 | 有词序 |
RNNLM | 前面所有词 | 非线性变换 | 有词序 |
CBOW | n-gram(前后n个词) | 无,线性组合 | 无词序 |
NNLM | n-gram(前或者后面1个词) | 无 | 无词序 |
研究者进行一些对比试验,因需要引入其他知识,此处暂不列出.他们得出以下结论.
一、简单模型在小语料上整体表现更好,而复杂的模型需要更大的语料作支撑。
二、对于实际的自然语言处理任务,各模型的差异不大。
三、同领域的语料,语料越大效果越好。
四、领域内的语料对相似领域任务的效果提升非常明显,但在领域不契合时甚至会有负面作用。
五、包含的语义特征更为丰富的语料(而不只是数量),在评价语义特性的任务中,效果也更好。
六、词向量的维度一般需要选择 50 维及以上,特别当衡量词向量的语言学特性时,词向量的维度越大,效果越好。
注:本文部分内容总结自来斯惟博士的毕业论文<<基于神经网络的词和文档语义向量表示方法研究>>.
在此表示感谢,另附上来博士的博客地址: http://licstar.net/archives/tag/%E8%AF%8D%E5%90%91%E9%87%8F