原文链接: http://chenhao.space/post/2c0d6d8e.html
语言模型
语言模型:预测每个句子在语言中出现的概率。
引出
举例:机器翻译
价格高
P ( h i g h p r i c e ) > P ( l a r g e p r i c e ) P(high \, price) > P(large \, price) P(highprice)>P(largeprice)
举例:我 今天 下午 打 羽毛球
P(s)被称为语言模型,即用来计算一个句子概率的模型。
计算:
P
(
w
i
∣
w
1
,
w
2
,
.
.
.
,
w
i
−
1
)
=
P
(
w
1
,
w
2
,
.
.
.
,
w
i
)
/
P
(
w
1
,
w
2
,
.
.
.
,
w
i
−
1
)
P(w_i|w_1,w_2,...,w_{i-1})=P(w_1,w_2,...,w_i)/P(w_1,w_2,...,w_{i-1})
P(wi∣w1,w2,...,wi−1)=P(w1,w2,...,wi)/P(w1,w2,...,wi−1)
缺点:
- 数据过于稀疏(因为每个词要考虑前面很多的词,而且与前面很多词的组合概率很小,组合到一起的词越多,它的数据模型是越稀疏的)
- 参数空间太大
解决思路:
举例:我 今天 下午 打 羽毛球
基于马尔科夫假设:下一个词的出现仅依赖于它前面的一个或几个词。
- 假设下一个词的出现依赖它前面的一个词,则有:
P ( s ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 , w 2 ) . . . P ( w n ∣ w 1 , w 2 , . . . , w n − 1 ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 2 ) . . . P ( w n ∣ w n − 1 ) P(s)=P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)...P(w_n|w_1,w_2,...,w_{n-1}) \\ =P(w_1)P(w_2|w_1)P(w_3|w_2)...P(w_n|w_{n-1}) P(s)=P(w1)P(w2∣w1)P(w3∣w1,w2)...P(wn∣w1,w2,...,wn−1)=P(w1)P(w2∣w1)P(w3∣w2)...P(wn∣wn−1)
- 假设下一个词的出现依赖它前面的两个词,则有:
P ( s ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 , w 2 ) . . . P ( w n ∣ w 1 , w 2 , . . . , w n − 1 ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 , w 2 ) . . . P ( w n ∣ w n − 2 , w n − 1 ) P(s)=P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)...P(w_n|w_1,w_2,...,w_{n-1}) \\ =P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)...P(w_n|w_{n-2},w_{n-1}) P(s)=P(w1)P(w2∣w1)P(w3∣w1,w2)...P(wn∣w1,w2,...,wn−1)=P(w1)P(w2∣w1)P(w3∣w1,w2)...P(wn∣wn−2,wn−1)
n-gram 模型
n-gram模型:假设当前词的出现概率只与它前面的 N-1 个词有关。
如何选择n:
- 更大的n:对下一个词出现的约束信息更多,具有更大的辨别力。
- 更小的n:在训练语料库中出现的次数更多,具有更可靠的统计信息,具有更高的可靠性。
理论上,n越大越好;经验上,trigram用的最多,尽管如此,原则上,能用bigram解决,绝不使用trigram。
构造语言模型:最大似然估计。
P
(
w
i
∣
w
1
,
w
2
,
w
3
,
.
.
.
,
w
i
−
1
)
=
C
o
u
n
t
(
w
1
,
w
2
,
w
3
,
.
.
.
,
w
i
−
1
,
w
i
)
C
o
u
n
t
(
w
1
,
w
2
,
w
3
,
.
.
.
,
w
i
−
1
)
P(w_i|w_1,w_2,w_3,...,w_{i-1})=\frac{Count(w_1,w_2,w_3,...,w_{i-1},w_i)}{Count(w_1,w_2,w_3,...,w_{i-1})}
P(wi∣w1,w2,w3,...,wi−1)=Count(w1,w2,w3,...,wi−1)Count(w1,w2,w3,...,wi−1,wi)
Count(X):在训练语料库单词序列X在训练预料中出现的次数。
词向量简介
One-hot Representation(独热编码)
One-hot Representation:对应的词所在的位置设为1,其他为0.
缺点:
- 语义鸿沟问题
- 维数灾难、稀疏
- 无法表示未出现的词汇
Distribution Word Representation(分布式表示)
词向量表示的核心:利用上下文信息进行词的表示。
英语和西班牙语两种语言的不同也并不能影响它们在向量空间上的表示,这就说明词向量的构造更关注于语言的内在逻辑。
分布式表示——词向量(Word embedding)
- 词表示为:[0.792, -0.177, -0.107, 0.109, 0.542, …]
- 常见的维度50或100
- 解决“语义鸿沟”问题
- 可以通过计算向量之间的距离(欧式距离、余弦距离等)来体现词与词的相似性
如何训练词向量?
并没有直接的模型可以训练得到分布式表示的词向量,但是我们可以通过在训练语言模型的同时得到词向量。
论文《Efficient Estimation of Word Representations in Vector Space》如何通过语言模型训练词向量的。
神经网络语言模型
神经网络语言模型(NNLM):直接从语言模型出发,将模型最优化过程转化为求词向量表示的过程。
- 目标函数: L ( θ ) = ∑ t l o g P ( w t ∣ w t − n + 1 , . . . , w t − 1 ) L(\theta)=\sum_{t} logP(w_t|w_{t-n+1},...,w_{t-1}) L(θ)=∑tlogP(wt∣wt−n+1,...,wt−1)
- 根据前 n-1 个单词,预测第t个位置单词的概率。
- 使用了非对称的前向窗函数,窗长度为 n-1
- 滑动窗口遍历整个语料库求和,计算量正比于语料库大小
- 概率P满足归一化条件,这样不同位置t处的概率才能相加,即
∑ w ∈ { v o c a b u l a r y } P ( w ∣ w t − n + 1 , . . . , w t − 1 ) = 1 \sum_{w\in\{vocabulary\}}P(w|w_{t-n+1},...,w_{t-1})=1 w∈{vocabulary}∑P(w∣wt−n+1,...,wt−1)=1
结构:
- 输入层(input):输入(N-1)个前向词,One-hot 表示。
- 投影层(projection layer):采用线性投影方式将词向量投影到稠密D维表示。
- 隐藏层(hidden layer):做全连接“神经元”数量用户自定。
- 输出层(output):softmax分类器。
每个训练样本的计算复杂度:Q=NxD+NxDxH+HxV
N为输入词语的个数,D是词向量的维度,H是隐藏层的节点数,V是输出向量的维数。
一个简单模型在大数据量上的表现比复杂模型在少数据量上表现会更好。
循环神经网络语言模型
循环神经网络语言模型(RNNLM):基于循环神经网络的语言模型。
- w(t) 表示第t个时刻的当前输入单词,维度为V,V是词典的大小。One-hot表示。
- s(t-1) 代表隐层的前一次输出。
- y(t) 表示输出的
计算复杂度:Q = HxH + HxV
H是隐藏层的节点数,V是输出向量的维数。
Word2Vec
神经网络语言模型缺点:
- 计算复杂度过大:
- NNLM:Q=NxD+NxDxH+HxV
- RNNLM:Q = HxH + HxV
- 参数较多
如何解决?
Word2Vec:
- CBOW
- Skip-gram
CBOW模型 VS Skip-gram模型
CBOW(Continuous Bag of Words)连续词袋模型,即利用中心词(Wt)的上下文(context)来预测中心词(Wt)。
Skip-gram,跳字模型,是根据中心词(Wt)来预测周围的词,即预测上下文(context)。
CBOW模型
CBOW模型:
-
目标函数: L = ∑ w ∈ C l o g P ( w ∣ C o n t e x t ( w ) ) L = \sum_{w\in C}logP(w|Context(w)) L=∑w∈ClogP(w∣Context(w))
-
无隐层
-
使用双向上下文窗口
-
上下文词序无关(BoW)
-
输入层直接使用低维稠密向量表示
-
投影层简化为求和、再平均(神经网络模型是使用拼接)
训练优化:
- 层次softmax(Hierarchical Softmax)
- 负采样(Negative Sampling)
Skip-gram模型
Skip-gram模型:
- 目标函数: L = ∑ w ∈ C l o g P ( C o n t e x t ( w ) ∣ w ) L = \sum_{w\in C}logP(Context(w)|w) L=∑w∈ClogP(Context(w)∣w)
- 输入层:只含当前样本的中心词w的词向量
- 投影层:恒等投影,为了和CBOW模型对比
- 输出层:和CBOW模型一样,输出层也是一颗Huffman树
V是词表的大小,d是我们想要得到词向量的维度
词向量的评估任务
Word2Vec存在问题
存在问题:
- 对每个局部上下文窗口单独训练,没有利用包含在全局共现矩阵中的统计信息。
- 对多义词无法很好的表示和处理,因为使用了唯一的词向量。(比如:Apple是表示苹果还是表示苹果公司呢)
解决方式:
- Glove:利用全局信息编码词向量。