预训练机制(1)~ 预训练、语言模型、ELMo

目录

背景

1. 预训练 pre-training

1.1 pre-training classification

1.2 pre-training concept

1.3 pre-training usage

2. 统计语言模型

2.1 语言模型

2.2 统计语言模型

2.2.1 解决第一个问题:计算一句话的概率p

2.2.2 解决第二个问题:预测下一个词可能是什么

2.2.3 n元模型

2.2.4 n-gram model 计算

2.2.5 平滑 smooth strategy 

3. 神经网络语言模型

3.1 独热编码(one-hot encoding)

3.2 神经网络语言模型解决第二个任务:预测下一个单词

3.3 词向量 embedding

4. Word2Vec

4.1 word2vec缺点

5. ELMo模型

5.1 EMLo模型使用

5.2 word2vec与EMLo区别

参考


背景

机器学习:本质是wx+b,线性。只能是一条直线的伸缩平移,w(wx+b)+b

                                                                                        偏数学(《统计学习方法》--李航)

深度学习:本质sigmoid(wx+b),激活函数->非线性。多重非线性变换可以拟合空间任何一种状态。relu(w*relu(wx+b) +b)

人工智能:本质是让客观世界的东西对应空间中的一个状态/位置。一维的点、二维的线、三维的面。

人工智能项目:大数据支持(主流)

problem: 目前很多项目没有大数据支持(小数据)

1. 预训练 pre-training

1.1 pre-training classification

  • Frozen冻结:浅层参数不变
  • Fine-tuning微调(常用):浅层参数会跟着任务B训练而改变。

1.2 pre-training concept

预训练通过一个已经训练好的模型A,去完成一个小数据量的任务B,使用了model A的浅层参数去训练任务B,得到模型B。任务A和任务B及其相似,即便任务B也是大数据,可以训练出模型B,我们可以用模型A的浅层参数,节省训练时间,节省成本

这不就是transfer learning吗???

预训练(Pre-training Models, PTMs)的实施过程跟迁移学习是一样的,一般是在一个基础数据集上进行任务训练,生成一个基础网络,然后将学习到的特征重新进行微调或迁移到另一个目标网络上,用来训练新的目标任务。

1.3 pre-training usage

fairseq、transformers库

2. 统计语言模型

2.1 语言模型

语言(就是文本text) + 模型(本质就是一个函数function/映射f: x -> y):

本质:语言模型(language model),就是计算一句话的概率

具体来说,就是为一个长度为m的文本确定一个概率分布,表示这段文本存在的可能性。

语言模型两个任务:

  • p("今天的蜂蜜很甜"),确定其概率
  • --> 然后可以做应用:预测下一个词是什么,"今天的蜂蜜__"

2.2 统计语言模型

用统计的方法解决上述语言模型的问题

分词:"今天","的","蜂蜜","很甜"。这句话是序列(有顺序的),即在计算条件概率时要考虑语序order。

2.2.1 解决第一个问题:计算一句话的概率p

用了一个条件概率的链式法则(概率论)

通过这个法则,我们可以求出每一个词出现的概率,然后联乘,就是这句话出现的概率。

2.2.2 解决第二个问题:预测下一个词可能是什么

"今天的蜂蜜__"

p(w_next|"今天", "的","蜂蜜")

词库(V),可以理解成新华词典

把词库V里的每一个词,进行上一步的预测计算。穷举/枚举法,贪心算法

e.g.

词库V = {"好甜", "火星",...}

p(好甜|"今天", "的","蜂蜜")

p(火星|"今天", "的","蜂蜜")

...

如果词很多,那计算的时间和成本太高了!!!

n元模型

2.2.3 n元模型

在实践中,如果文本的长度较长,p(w_{i}|w_{1}, w_{2},...,w_{i-1})的估算会非常困难。

n元模型(n-gram model)。在n元模型中估算条件概率时,只需要对当前次的前n-1个词进行计算,一般也就用到三元模型。马尔科夫链

3元语言模型:

        p(好甜|"今天", "的","蜂蜜")

        p(火星|"今天", "的","蜂蜜")

2元语言模型:

        p(好甜|"的","蜂蜜")

        p(火星| "的","蜂蜜")

3元模型和2元模型计算得到的条件概率差不多

2.2.4 n-gram model 计算

语料库:

"俄罗斯的蜂蜜好甜" 

"今天的蜂蜜好甜"

"云南的蜂蜜好香"

"新疆的蜂鸣透明"

p(好甜|"的","蜂蜜") = count("的", "蜂蜜","好甜")/count("的","蜂蜜") = 1/2

2.2.5 平滑 smooth strategy 

预测不存在词的条件概率,会在分子或分母上出现0

平滑 smooth strategy,在分子上加1,在分母上加|V|等等。

3. 神经网络语言模型

用神经网络的方法解决语言模型的问题。

目的:用神经网络模型解决第二个问题:预测下一个单词--> one-hot encoding

3.1 独热编码(one-hot encoding)

background: 让计算机认识现实生活中的文本,因为计算机只认知编码方式。 

独热编码:one-hot encoding就是让计算机以编码的方式认识现实生活中的单词。根据词典V中单词量|V|,构建一个|v|*|v|矩阵,根据单词的顺序(索引inde-x),分配相应的向量,one-hot vector只有index元素为1,其余元素为0。

第一个单词第一个维度为1,

缺点:one-hot encoding表示的词向量没有关联度,但现实生活中是由强弱关联度的,比如,fruit和banana

词向量

3.2 神经网络语言模型解决第二个任务:预测下一个单词

"今天", "的", "蜂蜜", "__"

p("__"|"今天", "的", "蜂蜜")

假设词库里有{"好甜","火星"},那么把词库里的词一个一个的代入进去,比较哪个概率较大?

p("__"|"今天", "的", "蜂蜜") --> "好甜"

统计语言模型解决未出现单词的平滑策略、计算量非常大的问题。

神经网络语言模型

e.g. 双层感知机

 假设它有3个单词w1,w2,w3

w1*Q=c1  --"今天"

w2*Q=c2  --"的"

w3*Q=c3  --"蜂蜜"

W = [w1, w2, w3]

C = [c1,c2,c3]

Q是一个随机矩阵

softmax(U[tanh(WC+b1)] + b2),当两层感知机,第二层神经网络有4个神经元,softmax后得到一个概率分布[0.1, 0.2, 0.2, 0.5] ∈[1, V_{L}]  --> [0, 0, 0, 1],预测出这是第4个词的one-hot encoding

3.3 词向量 embedding

之前是用one-hot encoding去表示单词,现在用c表示单词。假设one-hot vector是1万维,只要矩阵Q足够小,那么1万维的one-hot vector经过矩阵乘法后就可以实现降维

随着training和BP反向传播,矩阵Q更新的会越来越准,C表示单词的向量也会越来越准确,从[0.1, 0.2, 0.2, 0.5] -> [0.05, 0.1, 0.05, 0.8]。

那么,为什么不直接用矩阵Q代表词向量呢?因为one-hot高维向量只有一个1,WQ相乘得到C的过程叫作查表操作,look-up table

神经网络语言模型副产品Q,embedding

"今天" -> one-hot encoding w1 [0, 0, 0, 1]

w1 * Q = c1 ->"今天"这个词的词向量

词向量,就是用一个向量来表示一个单词

later application: 下游任务。

4. Word2Vec

区别:word2vec的贡献在于这个核心思想的转变

  • 神经网络语言模型,重点是为了预测下一个词
  • word2vec,重点是为了训练得到词向量,-->ELMO、GPT、BERT

CBOW,词袋模型。给出一个词的上下文,得到这个词。

skip-gram。给出一个词,得到这个词的上下文。

Neural Network-神经网络算法本质_天狼啸月1990的博客-CSDN博客

2022:word2vec过时了,2022主流用bert得到词向量

4.1 word2vec缺点

word2vec词向量不能进行多义表示

Q矩阵设计

00010代表apple(fruit) * Q = [10 12 19]

但,apple(company,)

假设数据集里面只有苹果(fruit)这个意思,没有apple(company)这个意思。(training)

但是在test阶段有apple(company)这个意思时,[10 12 19]不能代表apple(company)这个意思。

--> ELMO模型

5. ELMo模型

word2vec经过训练后,只能代表一种意思,无法表示多义

ELMo = word2vec + 双向双层LSTM 

ELMo模型,解决多义词问题。

 ELMo模型,对word2vec做改进,专门做词向量,通过预训练

不只是训练一个Q矩阵,还可以把这个词的上下文信息融入到这个Q矩阵中。

  • 左边的LSTM:E2会接收E1的上文信息
  • 右边的LSTM:E1会接收E2的下文信息

embedding E1 经过双向LSTM,得到新的词向量T1

s1: x1,x2,x4,x5 --> word2vec 得到e1 <-- x1+x2+x4+x5

s2: 获取上下文信息后,把三层的信息进行一个叠加,得到T1 <-- e1+e2+e3

e2, e3相当于两个上下文信息,T1就包含第一个词的单词特征、句法特征、语义特征

5.1 EMLo模型使用

e2,e3不同,e1+e2+e3也不同,e.g.

apple --> 我吃了一个苹果 --> 苹果:[1, 20, 10]

apple --> 我在用苹果手机 --> 苹果:[1, 10, 20]

这样不同的苹果输入进来,就会生成不同的词向量,就解决了多义词的问题!

而word2vec只是单纯的 one-hot编码 * 矩阵Q = 不会变的词向量

5.2 word2vec与EMLo区别

EMLo模型去掉双向LSTM就是word2vec模型。

  • word2vec只是单词的向量信息
  • ELMo包含了单词的向量信息和上下文句法特征、语义特征。

参考

04 统计语言模型(n元语言模型)_哔哩哔哩_bilibili

自然语言处理中的语言模型预训练方法(ELMo、GPT和BERT) - robert_ai - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼啸月1990

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值