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
李宏毅2020人类语言处理—P8语音辨识end
LAS:使用deep learning的端到端模型,原本公式是 a r g m a x y P ( Y ∣ X ) arg \underset{y}{max} P(Y|X) argymaxP(YX),没有 P ( Y ) P(Y) P(Y)。神奇的地方是,当加上language model,即 P ( Y ) P(Y) P(Y),时会让模型的performance变好。

原因:对于P(Y|X) 的估测是需要成对的资料的,不容易估测。而P(Y)的估测数据只需要收集大量的文字,比较容易估测的好。两者可以从不同的来源来估测。
基本上今天的端到端模型,输出是文字,往往加上Language Model就有用

李宏毅2020人类语言处理—P8语音辨识end
两者的数据量差异:所以P(Y)容易估计
李宏毅2020人类语言处理—P8语音辨识end

如何得到P(Y)

N-gram(deep learning 之前)

李宏毅2020人类语言处理—P8语音辨识end
李宏毅2020人类语言处理—P8语音辨识end
  • 整个token sequence在数据集中出现的概率(语言的复杂性,可能没有出现过)——>拆解成每个token的条件概率

  • 2-gram: P ( y 2 ∣ y 1 ) P(y_2 | y_1) P(y2y1) ,it is easy to generalize to 3-gram(given 2 word,统计下一个词汇出现的几率),4-gram

  • 如何计算条件概率,分子是联合概率
    李宏毅2020人类语言处理—P8语音辨识end


N-gram language model的问题
李宏毅2020人类语言处理—P8语音辨识end

上图的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技术来解这个问题,我们具体该怎么做呢?

李宏毅2020人类语言处理—P8语音辨识end

  1. 首先,将每一个词汇都对应一个向量(词向量)h和v,而这个词向量就是我们要训练的。
  2. 其次,我们将表格中非零数值n的部分当作Y,将h和v当作x
  3. 最终,最小化h和v的点积与n的差为训练目标
  4. 至此我们将得到所有词汇的词向量,而表中数值为0的部分将替换为词向量的点积,这样便解决了soothing的问题
    博主:阿芒Aris

此时我们通过两个词向量的inner product来表示两个词接在一起的可能性,即点积的值代替表格中的整数值。

这里用到word2vec的目的:词向量的距离表示词的相似程度。
李宏毅2020人类语言处理—P8语音辨识end
传统的是人设计smoothing的值,continuous LM是机器自己学习。

计算P(Y) with DNN

可以把Continuous LM看作简单只有一层hidden layer的线性neural network,输入的是1-of-N encoding代表某一个token

李宏毅2020人类语言处理—P8语音辨识end

NN-based LM

NN-based ML目的是想要取代N-gram LM:N=3,则给模型输入两个词汇,让模型去预测下一个词汇

李宏毅2020人类语言处理—P8语音辨识end
李宏毅2020人类语言处理—P8语音辨识end

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。

李宏毅2020人类语言处理—P8语音辨识end

LSTM with proper optimization and regularization can be good。

How to use LM to improve LAS

李宏毅2020人类语言处理—P8语音辨识end
  1. Shallow Fusion :LAS已经训练好、LM也已经训练好;在输出端结合。
  2. Deep Fusion :LAS已经训练好、LM也已经训练好;在隐藏层结合,并需要另外训练一个Network来输出distribution
  3. Cold Fusion :LAS没有训练、LM已经训练好;在隐藏层结合,并需要训练一个LAS和Network来输出distribution

Shallow Fusion

李宏毅2020人类语言处理—P8语音辨识end

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

李宏毅2020人类语言处理—P8语音辨识end

我们将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

李宏毅2020人类语言处理—P8语音辨识end

首先,我们先有一个训练好的LM,但LAS还没有训练的,参数还是随机初始化的
  然后,我们将两个模型接到一起,再通过数据进行训练
这样训练有什么好处呢?这样可以加快LAS的训练速度。坏处就是真的不能随便换LM。

总结

LAS学习语音和文字的关系,language model学习文字与文字之间的关系
语音辨识有7个视频,学的东西太多了,课程长还学得慢。
看完这个要停一下,去实践实践。

相关文章:

  • 2021-12-04
  • 2021-10-03
  • 2021-12-08
  • 2021-05-12
  • 2022-12-23
  • 2021-11-19
  • 2021-05-14
  • 2021-09-15
猜你喜欢
  • 2021-03-30
  • 2021-04-08
  • 2021-12-13
  • 2021-07-11
  • 2022-12-23
  • 2021-08-23
  • 2021-04-20
相关资源
相似解决方案