AI-note1-预训练模型与分词器

预训练模型与分词

预训练模型简要介绍

预训练模型的训练和使用分别对应两个阶段:**预训练阶段(pre-training)**和 **微调(fune-tuning)**阶段。

预训练阶段一般会在超大规模的语料上,采用无监督(unsupervised)或者弱监督(weak-supervised)的方式训练模型,期望模型能够获得语言相关的知识,比如句法,语法知识等等。经过超大规模语料的”洗礼”,预训练模型往往会是一个Super模型,一方面体现在它具备足够多的语言知识,一方面是因为它的参数规模很大。

微调阶段是利用预训练好的模型,去定制化地训练某些任务,使得预训练模型”更懂”这个任务。例如,利用预训练好的模型继续训练文本分类任务,将会获得比较好的一个分类结果,直观地想,预训练模型已经懂得了语言的知识,在这些知识基础上去学习文本分类任务将会事半功倍。利用预训练模型去微调的一些任务(例如前述文本分类)被称为下游任务(down-stream)

eg:bert
以BERT为例,BERT是在海量数据中进行训练的,预训练阶段包含两个任务:MLM(Masked Language Model)NSP (Next Sentence Prediction)。前者类似”完形填空”,在一句中扣出一个单词,然后利用这句话的其他单词去预测被扣出的这个单词;后者是给定两句话,判断这两句话在原文中是否是相邻的关系。

BERT预训练完成之后,后边可以接入多种类型的下游任务,例如文本分类,序列标注,阅读理解等等,通过在这些任务上进行微调,可以获得比较好的实验结果。

Subword

分词器:将文本分成一个个小片断

分词方法

- 基于空格

很容易想到,用空格作为分词边界。
但是,存在问题:只有在训练语料中出现的token才能被训练器学习到,而那些没有出现的token将会被<UNK>等特殊标记代替,如果词典做的足够大,对于出现很少的词也很难学习。

- 基于字母

将每个字符看作一个词。
优点
不用担心未知词汇,可以为每一个单词生成词嵌入向量表示。

缺点
1.丢失了语义。字母本身就没有任何的内在含义,得到的词嵌入向量缺乏含义。

2.计算复杂度提升(字母的数目远大于token的数目)

3.输出序列的长度将变大,对于Bert、CNN等限制最大长度的模型将很容易达到最大值。

- 基于子词

是尝试在<UNK>数目和词向量含义的丰富性上寻求平衡。
这种方法的目的是通过一个有限的单词列表来解决所有单词的分词问题,同时将结果中token的数目降到最低。例如,可以用更小的词片段来组成更大的词:

“unfortunately” = “un” + “for” + “tun” + “ate” + “ly”

1.Byte Pair Encoding (BPE)

BPE最早是一种数据压缩算法.
该算法简单有效,因而目前它是最流行的方法。
GPT-2和RoBERTa使用的Subword算法都是BPE。
BPE获得Subword的步骤如下:

(1)准备足够大的训练语料,并确定期望的Subword词表大小;

(2)将单词拆分为成最小单元。比如英文中26个字母加上各种符号,这些作为初始词表;

(3)在语料上统计单词内相邻单元对的频数,选取频数最高的单元对合并成新的Subword单元;

(4)重复第3步直到达到第1步设定的Subword词表大小或下一个最高频数为1。

获得Subword后编码过程:

(1)将词典所有子词按照长度由大到小进行排序

(2)对于单词w,依次遍历排好序的词典。查看当前子词是否是该单词的子字符串,如果是,则输出当前子词,并对剩余单词字符串继续匹配。

(3)如果遍历完字典后,仍然有子字符串没有匹配,则将剩余字符串替换为特殊符号输出,如””。

(4)单词的表示即为上述所有输出子词。

解码过程:

解码过程比较简单,如果相邻子词间没有中止符,则将两子词直接拼接,否则两子词之间添加分隔符。

优点:
可以很有效地平衡词典尺寸和编码步骤数(将句子编码所需要的token数量)

缺点:
(1)对于同一个句子, 例如Hello world,如图所示,可能会有不同的Subword序列。不同的Subword序列会产生完全不同的id序列表示,这种歧义可能在解码阶段无法解决。在翻译任务中,不同的id序列可能翻译出不同的句子,这显然是错误的。

(2)在训练任务中,如果能对不同的Subword进行训练的话,将增加模型的健壮性,能够容忍更多的噪声,而BPE的贪心算法无法对随机分布进行学习

2.WordPiece

Google的Bert模型在分词的时候使用的是WordPiece算法.
与BPE算法类似,也是合并两个子词组成新子词。最大的区别在于选择的策略:BPE选择频数最高的相邻子词;而WordPiece选择能够提升语言模型概率最大的相邻子词
$\log p(t_z)-(\log p(t_x) + \log p(t_y)) = \log \frac{p(t_z)}{p(t_x)p(t_y)} $

WordPiece每次选择合并的两个子词,他们具有最大的互信息值,也就是两子词在语言模型上具有较强的关联性,它们经常在语料中以相邻方式同时出现。

3.Unigram Language Model

BPE和WordPiece算法的词表大小都是从小到大变化,属于增量法。而Unigram Language Model则是减量法,即先初始化一个大词表,根据评估准则不断丢弃词表,直到满足限定条件。

优点:
1.使用的训练算法可以利用所有可能的分词结果,这是通过data sampling算法实现的。

2.提出一种基于语言模型的分词算法,这种语言模型可以给多种分词结果赋予概率,从而可以学到其中的噪声
以给多种分词结果赋予概率,从而可以学到其中的噪声

三种子词分词器之间的关系

在这里插入图片描述

参考原文链接

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值