赞
踩
目录
1.1 pre-training classification
机器学习:本质是wx+b,线性。只能是一条直线的伸缩平移,w(wx+b)+b。
偏数学(《统计学习方法》--李航)
深度学习:本质sigmoid(wx+b),激活函数->非线性。多重非线性变换可以拟合空间任何一种状态。relu(w*relu(wx+b) +b)
人工智能:本质是让客观世界的东西对应空间中的一个状态/位置。一维的点、二维的线、三维的面。
人工智能项目:大数据支持(主流)
problem: 目前很多项目没有大数据支持(小数据)
预训练通过一个已经训练好的模型A,去完成一个小数据量的任务B,使用了model A的浅层参数去训练任务B,得到模型B。任务A和任务B及其相似,即便任务B也是大数据,可以训练出模型B,我们可以用模型A的浅层参数,节省训练时间,节省成本。
这不就是transfer learning吗???
预训练(Pre-training Models, PTMs)的实施过程跟迁移学习是一样的,一般是在一个基础数据集上进行任务训练,生成一个基础网络,然后将学习到的特征重新进行微调或迁移到另一个目标网络上,用来训练新的目标任务。
fairseq、transformers库
语言(就是文本text) + 模型(本质就是一个函数function/映射f: x -> y):
本质:语言模型(language model),就是计算一句话的概率。
具体来说,就是为一个长度为m的文本确定一个概率分布,表示这段文本存在的可能性。
语言模型两个任务:
- p("今天的蜂蜜很甜"),确定其概率。
- --> 然后可以做应用:预测下一个词是什么,"今天的蜂蜜__"
用统计的方法解决上述语言模型的问题
分词:"今天","的","蜂蜜","很甜"。这句话是序列(有顺序的),即在计算条件概率时要考虑语序order。
用了一个条件概率的链式法则(概率论)
通过这个法则,我们可以求出每一个词出现的概率,然后联乘,就是这句话出现的概率。
"今天的蜂蜜__"
p(w_next|"今天", "的","蜂蜜")
词库(V),可以理解成新华词典
把词库V里的每一个词,进行上一步的预测计算。穷举/枚举法,贪心算法
e.g.
词库V = {"好甜", "火星",...}
p(好甜|"今天", "的","蜂蜜")
p(火星|"今天", "的","蜂蜜")
...
如果词很多,那计算的时间和成本太高了!!!
n元模型
在实践中,如果文本的长度较长,的估算会非常困难。
n元模型(n-gram model)。在n元模型中估算条件概率时,只需要对当前次的前n-1个词进行计算,一般也就用到三元模型。马尔科夫链
3元语言模型:
p(好甜|"今天", "的","蜂蜜")
p(火星|"今天", "的","蜂蜜")
2元语言模型:
p(好甜|"的","蜂蜜")
p(火星| "的","蜂蜜")
3元模型和2元模型计算得到的条件概率差不多
语料库:
"俄罗斯的蜂蜜好甜"
"今天的蜂蜜好甜"
"云南的蜂蜜好香"
"新疆的蜂鸣透明"
p(好甜|"的","蜂蜜") = count("的", "蜂蜜","好甜")/count("的","蜂蜜") = 1/2
预测不存在词的条件概率,会在分子或分母上出现0
平滑 smooth strategy,在分子上加1,在分母上加|V|等等。
用神经网络的方法解决语言模型的问题。
目的:用神经网络模型解决第二个问题:预测下一个单词--> 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。
词向量。
"今天", "的", "蜂蜜", "__"
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, ] --> [0, 0, 0, 1],预测出这是第4个词的one-hot encoding
之前是用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: 下游任务。
区别:word2vec的贡献在于这个核心思想的转变
- 神经网络语言模型,重点是为了预测下一个词
- word2vec,重点是为了训练得到词向量,-->ELMO、GPT、BERT
CBOW,词袋模型。给出一个词的上下文,得到这个词。
skip-gram。给出一个词,得到这个词的上下文。
Neural Network-神经网络算法本质_天狼啸月1990的博客-CSDN博客
2022:word2vec过时了,2022主流用bert得到词向量。
word2vec词向量不能进行多义表示
Q矩阵设计
00010代表apple(fruit) * Q = [10 12 19]
但,apple(company,)
假设数据集里面只有苹果(fruit)这个意思,没有apple(company)这个意思。(training)
但是在test阶段有apple(company)这个意思时,[10 12 19]不能代表apple(company)这个意思。
--> ELMO模型
word2vec经过训练后,只能代表一种意思,无法表示多义
ELMo = word2vec + 双向双层LSTM
ELMo模型,解决多义词问题。
ELMo模型,对word2vec做改进,专门做词向量,通过预训练
不只是训练一个Q矩阵,还可以把这个词的上下文信息融入到这个Q矩阵中。
embedding E1 经过双向LSTM,得到新的词向量T1
s1: x1,x2,x4,x5 --> word2vec 得到e1 <-- x1+x2+x4+x5
s2: 获取上下文信息后,把三层的信息进行一个叠加,得到T1 <-- e1+e2+e3
e2, e3相当于两个上下文信息,T1就包含第一个词的单词特征、句法特征、语义特征
e2,e3不同,e1+e2+e3也不同,e.g.
apple --> 我吃了一个苹果 --> 苹果:[1, 20, 10]
apple --> 我在用苹果手机 --> 苹果:[1, 10, 20]
这样不同的苹果输入进来,就会生成不同的词向量,就解决了多义词的问题!
而word2vec只是单纯的 one-hot编码 * 矩阵Q = 不会变的词向量
EMLo模型去掉双向LSTM就是word2vec模型。
- word2vec只是单词的向量信息
- ELMo包含了单词的向量信息和上下文句法特征、语义特征。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。