2022年5月

v2-3d4a7ff19c9c874dda20b8ecf8ade385_r.jpeg

一、 背景与基础

在使用GPT BERT模型输入词语常常会先进行tokenize ,tokenize具体目标与粒度是什么呢?tokenize也有许多类别及优缺点,这篇文章总结一下各个方法及实际案例。

tokenize的目标是把输入的文本流,切分成一个个子串,每个子串相对有完整的语义,便于学习embedding表达和后续模型的使用。

二、切分粒度

tokenize有三种粒度:word/subword/char

1.词粒度-word

词粒度的切分就跟人类平时理解文本原理一样,常常用一些工具来完成,例如英文的NLTK、SpaCy,中文的jieba、LTP等。举个栗子:

英文
live in New York ------> live / in / New York /

中文
在纽约生活 -----> 在 / 纽约 / 生活
词粒度的切分能够非常好地保留完整语义信息,但是如果出现拼写错误、英文中的缩写等情况,鲁棒性一般。另一方面,词切分会产生非常巨大的词表,而且这都不能确保不会出现out of vocabulary问题。

2.字粒度-char-字符粒度

字粒度最早应该是2015年Karpathy[1]提出,简单说英文就是以字母为单位(对于大小写不敏感的任务,甚至可以先转小写再切分),中文就是以字为单位,举个栗子,

英文
live in New York -----> l / i / v /e / i / n / N / e / w / Y / o / r /k

中文
在纽约生活 -----> 在 / 纽 / 约 / 生 / 活
可以看出,字粒度的切分很好地解决了词粒度的缺陷,鲁棒性增强、词表大大减小。但另一方面,也会带来一些麻烦:

「毫无意义」:一个字母或一个单字本质上并没有任何语义意义;
「增加输入计算压力」:减小词表的代价就是输入长度大大增加,从而输入计算变得更耗时耗力;
如果词粒度不理想,而且字粒度似乎也有自己的问题,那么还有什么替代方法呢?Here comes subword tokenization。

3.Subword粒度

我们需要的tokenization需要满足:

  • 它能够在不需要无限词汇表的情况下处理缺失的标记,即通过有限的已知单词列表来处理无限的潜在词汇。
  • 此外,我们不希望将所有内容分解为单个字符的额外复杂性,因为字符级别可能会丢失单词级别的一些含义和语义细节。

为此,我们需要考虑如何重新利用『小』单词来创建『大』单词。subword tokenization不转换最常见的单词,而是将稀有单词分解成有意义的子词单元。如果unfriendly被标记为一个稀有词,它将被分解为un-friendly-ly,这些单位都是有意义的单位,un的意思是相反的,friend是一个名词,ly则变成副词。这里的挑战是如何进行细分,我们如何获得un-friend-ly而不是unfr-ien-dly。

NLP最火的网红 Transformer 和 BERT 就是Subword的带盐人,来看个它们做tokenization的栗子,

I have a new GPU ----> [’i’, ’have’, ’a’, ’new’, ’gp’, ’##u’, ’.’]
subword粒度切分算法又有一下几种:

1.BPE
2.WordPiece
3.ULM(unigram LM)

SentencePiece集成了两种subword算法,BPE和UniLM, WordPiece 则是谷歌内部的子词包,没对外公开

参考:
1.https://cloud.tencent.com/developer/article/1865689
2.https://zhuanlan.zhihu.com/p/340473354

一、重点:

L1 正则化会得到稀疏解(有的参数为0,有的参数值比较大),可用作特征选择。
L2 正则化会得到趋于0的解(参数值都趋向比较小的值),起到防止过拟合的作用。

二、正则化为什么能防止过拟合

数据集中的噪声点往往需要比较大的w值来拟合,也就是说w越大,模型的曲线越“陡峭”,因而网络模型能够更好得拟合噪声点,但也引起了过拟合。

在l1正则化中,某些权值刚好为0,说明某些特征被模型完全忽略。这可以看作是一种自动的特征选择。某些权值刚好为0,这样模型更容易解释,也可以呈现模型最重要的特征。

在l2正则化中,权值w会随着迭代衰减,当w很小时意味着该神经网络模型中的某些神经元实际的作用很小,可以忽略。

因此,总得来说,l1和l2正则化都是通过减小权值w,使某些神经元的作用变小甚至可以勿略,从而降低网络模型的复杂度来防止过拟合。这与dropout通过以一定的概率丢弃神经元的做法在效果上是相似的。

2.1.从图形角度来说

1724098-de4de0c458767bd5.png

高维我们无法想象,简化到2维的情形,如上图所示。其中,左边是L1图示,右边是L2图示,左边的方形线上是L1中w1/w2取值区间,右边得圆形线上是L2中w1/w2的取值区间,绿色的圆圈表示w1/w2取不同值时整个正则化项的值的等高线(凸函数),从等高线和w1/w2取值区间的交点可以看到,L1中两个权值倾向于一个较大另一个为0,L2中两个权值倾向于均为非零的较小数。这也就是L1稀疏,L2平滑的效果。

2.2.从图形

-----------以下方便理解-----

一、参数方法和非参数方法

在讲正则化之前,需要介绍2个概念。机器学习的方法,可以大致分成两类。

参数方法(Parametric Methods) 通过训练来确定一组参数。当我们参数的值定下来,可以说预测的过程已经跟之前的训练集无关了,模型已经定下来了,我们只需要把测试集代入对应参数就能出结果。参数化方法的好处就是。我们的模型复杂程度不会随着训练数据的增加而增加(注意不是训练模型的复杂度,是模型的复杂程度)。举例:逻辑回归,SVM,神经网络。

非参数方法 (Non-Parametric Methods),利用训练集本身来预测。比如K近邻算法,在训练过程中,我们并没有确定任何参数,甚至都不需要训练这个过程。但是缺点也很明显,训练集数量越大,我们模型就越复杂。当我们要预测一个新数据的时候,我们需要拿它与所有的训练数据比较。举例:KNN。

正则化,针对的主要就是参数方法。

二、复杂模型 VS 简单模型

WX20220524-082702.png

从直觉上来说,既然它们两个模型都能准确预测我的测试样本,那当然是第一个模型简单粗暴。而且,根据奥卡姆剃刀原理(Occam's Razor, Ockham's Razor),越是简单粗暴的东西,有时候反而越有效。

模型的复杂程度 这里有个比较专业点的术语叫做,模型结构化风险。咱们这里就用模型的复杂程度比较接地气。在训练参数方法的过程中,我们不仅要关注模型的准确程度,同时也要让模型更加精简,模型复杂程度低。这不仅仅是为了计算量少,而且越精简的模型,往往泛化能力越强大!

三、降低模型复杂度

既然知道了我们要尽可能训练出简单的模型。我们要在训练的过程中,将模型的复杂度作为一项指标,参与到训练的过程中,从而约束我们的模型。

机器学习模型的训练过程,简单来说就是我们要让我们模型的输出与真实采集到的结果的误差最小。同时,我们还有一个衡量误差的指标,叫做损失函数(loss function)。

WX20220524-082836.png

再拿最简单的线性回归来举例子。当我们说我们的线性的模型复杂度高,它的意思是什么呢?其实就是这个权重 [公式] 的每个值都很大。比如我们之前说到的两个权重向量[公式] ,[公式],明显第二个更加复杂。所以我们的 [公式] 函数得是一个关于参数w的函数。而且w越复杂,这个值就越大。这样,就算我们的模型的误差非常小,但是模型相当复杂的话,它的损失函数也会变得非常大。

线性回归的损失函数定义(最小二乘法,就是平方和最小法):
WX20220524-082932.png

四、正则化

WX20220524-083042.png

所以说,对模型正则化,就是说在训练的时候加上了一个关于模型复杂度的惩罚项,使得模型最后训练出来的参数尽量又少又小。

正则这个名字让人云里雾里地,听起来就给人一种高大上,不明觉厉的感觉(跟正则表达式没半毛线关系)。其实我觉得还不如叫做惩罚项,这样比较容易理解。

五、L1,L2比较

这个比较网上到处都是权威解释,请自行搜索相关资料。。我再说下个人的通俗点的理解。

首先,L1正则要算绝对值,算绝对值要比直接平方要复杂,这一点上L2正则胜。

当然L1的好处也很多。比如下面就是L1,L2正则的比较。左边正方形是L1正则的等值线。右边圆形代表L2等值线,右上角那个彩色的一圈圈的就是误差项的函数。最小化的时候就是这两个相交的时候。左边的L1函数图像是带一个尖角的。明显更容易相交在数轴上,就是为整数的点上,这样就会有更多的刚好为0的解。而L2相交在圆弧上,各种位置都有可能。

v2-4fa18b21ec50f65f222f52a753115ae5_720w.jpeg

六、关于L1,L2正则解的稀疏性的详细数学解释

WX20220524-083243.png

参考:
https://zhuanlan.zhihu.com/p/44899616

一、 ERNIE-B的掩码机制

ERNIE-B的掩码机制如图1所示,它由BERT的随机掩码再加前面我们介绍的短语级别掩码和实体级别掩码。
v2-481094206463321eded1d5a3d477c148_r.jpeg

图1:ERNIE-B的三种掩码

基本级别掩码(Basic-Level Masking):

这里采用了和BERT完全相同的掩码机制,在进行中文语料时,这里使用的是字符级别的掩码。在这个阶段并没有加入更高级别的语义知识。

短语级别掩码(Phrase-Level Masking):

在这个阶段,首先使用语法分析工具得到一个句子中的短语,例如图1中的“a serious of”,然后随机掩码掉一部分,并使用剩下的对这些短语进行预测。在这个阶段,词嵌入中加入了短语信息。

实体级别掩码(Entity-Level Masking):

在这个阶段,将句子中的某些实体掩码掉,这样模型就有了学习更高级别的语义信息的能力。

二、 DLM

得益于百度贴吧强大的数据量,ERNIE-B使用了海量的对话内容,因此在ERNIE-B中使用了对话语言模型(Dialogue Language Model,DLM)。作者认为一组对话可能有多种形式,例如QRQ,QRR,QQR等(Q:Query,R:Response)。为了处理这种多样性,ERNIE-B给输入嵌入中加入了对话嵌入(Dialogue Embedding)特征。另外在ERNIE-B中,DLM是可以和掩码语言模型的兼容的,如图2所示。
v2-3b8ecdb02232ce7dd8fee4c49fa6e1ac_r.jpeg

参考:https://zhuanlan.zhihu.com/p/360351761