Language Model introduction
LM:Estimated the probability of token sequence,估测一段token sequence出现的的几率
token sequence:
Y
=
y
1
,
y
2
,
.
.
.
,
y
n
Y = y_1,y_2,...,y_n
Y=y1,y2,...,yn
LM:
P
(
y
1
,
y
2
,
.
.
.
,
y
n
)
P(y_1,y_2,...,y_n)
P(y1,y2,...,yn)
HMM:使用Language Model是必需的,下图公式中的
P
(
Y
)
P(Y)
P(Y)就是Language Model
LAS:使用deep learning的端到端模型,原本公式是
a
r
g
m
a
x
y
P
(
Y
∣
X
)
arg \underset{y}{max} P(Y|X)
argymaxP(Y∣X),没有
P
(
Y
)
P(Y)
P(Y)。神奇的地方是,当加上language model,即
P
(
Y
)
P(Y)
P(Y),时会让模型的performance变好。
原因:对于P(Y|X) 的估测是需要成对的资料的,不容易估测。而P(Y)的估测数据只需要收集大量的文字,比较容易估测的好。两者可以从不同的来源来估测。
基本上今天的端到端模型,输出是文字,往往加上Language Model就有用
两者的数据量差异:所以P(Y)容易估计
如何得到P(Y)
N-gram(deep learning 之前)
-
整个token sequence在数据集中出现的概率(语言的复杂性,可能没有出现过)——>拆解成每个token的条件概率
-
2-gram: P ( y 2 ∣ y 1 ) P(y_2 | y_1) P(y2∣y1) ,it is easy to generalize to 3-gram(given 2 word,统计下一个词汇出现的几率),4-gram
-
如何计算条件概率,分子是联合概率
N-gram language model的问题
上图的dog后是不可能接jump的,这是违反常理的。为了解决这个问题,N-gram必须要搭配一个language model smoothing的技巧。
有些n-gram统计出来的几率是0,但我们可以人为给定它一个较小的值而非0,它只是概率很低,并非不可能出现。而这个smoothing的值是多少,这是论文研究的。(详情请参考《数位语音处理》)
Language Model Smoothing
在没有deep learning技术之前,人们是如何处理language model smoothing的呢?
推荐系统
Matrix factorization,这个不了解,不敢下定论。但推荐系统的思想就是:A没有买个物品1,但A的购物行为与B,C相似且知道B,C购买物品1的情况,我们可以联系B,C来推测A购买物品1的欲望。
**任务:**推荐系统要做的就是补全这个打分表(矩阵)里的null(空值)
如何扩展到language model呢?推荐系统矩阵:x轴——人,y轴——物品
**任务:**把这个技术用到 Language Model上来补全 0概率的n-gram
Continuous LM
矩阵的横纵轴都代表了Vocabulary的token,表中的数字代表纵轴column的token 后接 横轴row的token的统计次数。如“dog” 后面接“ran”。
我们想要估测出表中0的较小值应该填什么。我们就可以用Matrix Factorization技术来解这个问题,我们具体该怎么做呢?
- 首先,将每一个词汇都对应一个向量(词向量)h和v,而这个词向量就是我们要训练的。
- 其次,我们将表格中非零数值n的部分当作Y,将h和v当作x
- 最终,最小化h和v的点积与n的差为训练目标
- 至此我们将得到所有词汇的词向量,而表中数值为0的部分将替换为词向量的点积,这样便解决了soothing的问题
博主:阿芒Aris
此时我们通过两个词向量的inner product来表示两个词接在一起的可能性,即点积的值代替表格中的整数值。
这里用到word2vec的目的:词向量的距离表示词的相似程度。
传统的是人设计smoothing的值,continuous LM是机器自己学习。
计算P(Y) with DNN
可以把Continuous LM看作简单只有一层hidden layer的线性neural network,输入的是1-of-N encoding代表某一个token
NN-based LM
NN-based ML目的是想要取代N-gram LM:N=3,则给模型输入两个词汇,让模型去预测下一个词汇
my question:
continuous LM是通过索引找到两个词(v,h),然后点积。目的是构建词向量。
neural network只输入h,就直接输出v和h的关系,目的是预测v出现的概率。
RNN-based LM
如果想看非常长的history决定下一个token出现的几率,如果只是一般的NN的话,我们的输入将变得非常的长。因此,我们使用RNN将history读进去,最后一个hidden layer输出的隐藏层向量 h t h_{t} ht与每一个token的向量 v v v相乘得到 t + 1 t+1 t+1应该出现的token。
LSTM with proper optimization and regularization can be good。
How to use LM to improve LAS
- Shallow Fusion :LAS已经训练好、LM也已经训练好;在输出端结合。
- Deep Fusion :LAS已经训练好、LM也已经训练好;在隐藏层结合,并需要另外训练一个Network来输出distribution
- Cold Fusion :LAS没有训练、LM已经训练好;在隐藏层结合,并需要训练一个LAS和Network来输出distribution
Shallow Fusion
c
1
c^1
c1 :Attention的结果
c
c
c : token“c”,可以使beam search或者直接max
- 相加的时候,往往会设计一个超参数 λ \lambda λ来权衡我们是更相信LM还是LAS
- 概率log后相加得到最终的probability distribution,不是要log则两者相乘
Deep Fusion
Deep Fusion是在hidden layer处结合,将LAS和LM的hidden layer的输出拿出来,放到一个另外训练的Network里,再由这个Netowork产生distribution
我们将LM的hidden layer拿出来,就不能换LM,如果抽换LM我们就要重新训练Network来判断LM和LAS的hidden关系(什么时候我们需要常常抽换LM呢?在不同domain的时候,同一个词在发音虽相同,但意义往往不同,LM可以随着不同的domain来训练不同的LM)
那我们如果需要在Deep Fusion换LM该怎么办呢?有一种方法是,不要把LM的hidden layer拿出来,而是把LM跑到最后,在softmax之前得到vocabulary的distribution,将这个distribution与LAS的hidden layer结合,这样就可以随意更换LM了,当然这个distribution也可以由传统的N-gram得到,故可以将N-gram与LAS结合。
对于token比较大的情况不适合把size V的vector与LAS的hidden layer结合
Cold Fusion
首先,我们先有一个训练好的LM,但LAS还没有训练的,参数还是随机初始化的
然后,我们将两个模型接到一起,再通过数据进行训练
这样训练有什么好处呢?这样可以加快LAS的训练速度。坏处就是真的不能随便换LM。
总结
LAS学习语音和文字的关系,language model学习文字与文字之间的关系
语音辨识有7个视频,学的东西太多了,课程长还学得慢。
看完这个要停一下,去实践实践。