引言
上一节word embedding,主要讲的是Prediction based思想。本小白只知道nlp中有Bert和Transformer模型,所以先看个究竟,也不求完全理解。视频开头说明主题:如何让机器明白人类的词汇,one-hot是不行的,使用word embedding代替,用embedding表示一个词汇。
原来Bert的t是from Transformers,所以讲bert要先看transformers,所以中途不得已插多一章。
word represent
问题:(1)一词多义,bank可以表示银行,也可以表示河堤。但同一个词只能embedding同一个向量,这默认bank只有一个语义,显然不够好。(2)根据不同时间,不同地方,一个词有不同的意思,我们很难去统一一个词的语义。
李宏毅专业术语:
word token:一段文本形式的词,由边界划分。(词所在句子的位置)
word type:词的拼写。
以前每个word type一个embedding,或者固定对应多个embedding;现在是每个word token都有自己的embedding。
如:上面4个bank有各自的embedding,根据上下文决定。 此方法称为:Contextualized Word Embedding下面将讲述如何实现这个思想。
我的疑问:如果是对type固定一个embedding,我们只需输入词就得到向量,一次前向编码。那么对于token的embedding也是如此吗?答:如果要做到一词多义,我们就要每个token都结合句子,所以不能输入词就直接得到向量。
下面将介绍如何实现一词多义。
ELMO–Embeddings from Language Model
只需要一大堆语句,输入前一个词来预测后一个词,把中间的某一层特征向量作为embedding。3个“退了”由于前文的影响,embedding不一样。
加上双向RNN,前向和后向的embedding拼接起来;加上deep RNN后模型变成下图,像cv中的特征金字塔FPN,究竟用那一层的embedding呢?
全部都要: 假设现在有两层(深度)LSTM,输出的embedding分别是h1、h2,原则上是将两个相加,但两个的比重我们不可能人工加上去。(1.不知道哪一层重要,2.深度往往不止两层)。方法: 让网络自己去学习两个embedding相加的权重α1、α2。训练: 根据任务(翻译,问答)去训练。
题外话: 梁同学向我介绍过什么是注意力机制,不知道是否准确,就是让网络学习权值α。拟人一点就是,网络应该把注意力放到哪一层embedding上。
Bidirectional Encoder Representations from Transformers (bert)
bert = encoder of transformer
对于中文,词是无尽的,字是有限的,所以通常将字变成one-hot进行embedding。
训练的方法:
- Masked LM:一个句子中每个词以15%几率被掩盖掉,bert会输出每个词的词向量。被掩盖的词对应的词向量输入能力弱的分类器,要预测成功,要求bert的模型精准地embedding。(如果两个词在同一个地方没有违和感,那他们的embedding是相似的。)
- Next Sentence Prediction:对于两个句子,我们判断是否应该接在一起。[SEP]用来表示两个句子的边界;[CLS]用来表示两个句子的信息,信息传入二分类器,判断是否有衔接关系。
方法一和方法二是都会使用的
如何使用bert:
- 把bert用来embedding,作用于ELMO一样,得到词向量后再输入到其他任务的模型。
- 直接用bert完成某些任务:
case1:语义分析(积极or消极),文章分类
classifier的参数随机初始化,从头训练;Bert有训练好的参数,只需微调
case2:slot filling,对每个词进行粗略分类。
case3:给一个前提——sentence1,让机器判断假设——sentence2是True/False/unknown(三分类)。学会推理。
case4:Extraction-based question answer,给机器一篇文章,机器会提取关键词,希望机器能回答某些问题。(前提条件:答案在文章中出现过) 。输入:文章D,问题Q。输出:答案的起始位置s,结束位置e。
模型需要从头训练两个与bert输出同样维度的向量(下图橙色和蓝色),两个向量与文章的词向量作点积,目的是找与文章相关性高的词。
如果e<s,则机器表示unknown。
bert的变形:Enhanced Representation through Knowledge Integration,ERNIE。为中文而设计,因为Masked LM是针对每个字(character)。对于一个四字词,虽然挡住一个词,但很容易根据其他3个猜出来。所以ERNIE依然针对每个字输入,但就挡住一个词。
Generative Pre——Training(GPT)
类似Transformer的decoder。输入一个词预测下一个词,预测的词在下一个time step和已经预测的词一起作为输入。所以有时间序列。
参数较大,可以zero-shot,可以写作。
就这样吧,反正用不到。
总结
64分钟…
Transformer和bert原理都明白了,注意,只是原理。至于任务和代码还是一无所知,所以下一步很明确了——找代码看!