NLP笔记

文章介绍了BERT模型在文本分类任务中的使用,包括单文本和语句对分类,以及数学概念如样本空间、条件概率、贝叶斯公式。同时讨论了梯度下降算法、BTM主题模型、知识蒸馏和模型压缩方法。此外,提到了ERNIE模型的改进以及N-gram、朴素贝叶斯在文本分类中的作用。
摘要由CSDN通过智能技术生成

文本分类:

  • 单文本分类任务:对于文本分类任务,BERT模型在文本前插入一个[CLS]符号,并将该符号对应的输出向量作为整篇文本的语义表示,用于文本分类,如下图所示。可以理解为:与文本中已有的其它字/词相比,这个无明显语义信息的符号会更“公平”地融合文本中各个字/词的语义信息。

  • 语句对分类任务:该任务的实际应用场景包括:问答(判断一个问题与一个答案是否匹配)、语句匹配(两句话是否表达同一个意思)等。对于该任务,BERT模型除了添加[CLS]符号并将对应的输出作为文本的语义表示,还对输入的两句话用一个[SEP]符号作分割,并分别对两句话附加两个不同的文本向量以作区分,如下图所示。


一、数学知识

1、样本空间:所有基本事件的集合,记作 \Omega

2、样本点:样本空间的元素,记作 \omega

例子:一枚硬币的样本空间\Omega={正,反}

           两枚硬币的样本空间\Omega ={(正,正),(正,反),(反,正),(反,反)}

3、条件概率:在\Omega样本空间中,有A,B两个事件,P(B)>0,在B已经发生的条件下A发生的概率,即A对B的条件概率,记作P(A|B)。

例子:男生有50人,女生有50人。成绩及格的学生:男生20人,女生30人。求及格的学生中女生占:30/50=3/5

P(A|B)=\frac{n_{AB}/n}{n_{B}/n}=\frac{P(AB)}{P(B)}

n是样本点,n=100;n_{AB}是AB共同发生的样本点,即30;n_{B}=50。

4、乘法公式   P(A)>0,P(B)>0

P(A|B)=\frac{P(AB)}{P(B)}                             P(AB)=P(B)P(A|B)

P(B|A)=\frac{P(AB)}{P(A)}                             P(AB)=P(A)P(B|A)

P(A_{1}A_{2}...A_{n})=P(A_{1})P(A_{2}|A_{1})P(A_{3}|A_{1}A_{2})...P(A_{n}|A_{1}A_{2}\cdots A_{n-1})

5、全概率公式

事件A_{1}A_{2}、...、A_{n}构成一个完备事件组,即它们两两互不相融,并和为\Omega。P(A_{i})>0,则对任一事件B有:P(B)=\sum_{i=1}^{n}P(A_{i})P(B|A_{i})

例子:将100人分成三队,分别是40、50、10,每一队的男生数量分别是:15、10、5。求男生的概率:P(B)=\frac{40}{100}*\frac{15}{40}+\frac{50}{100}*\frac{10}{50}+\frac{10}{100}*\frac{5}{10}=\frac{3}{10}

6、贝叶斯公式

全概率公式:因\rightarrow

贝叶斯公式:果\rightarrow因 (发烧由感冒引起的概率有多大)

例子:有四条生产线,生产产品占比分别为:15%、20%、30%、35%,生产不合格产品的概率为:0.05、0.04、0.03、0.02。

解:令A_{1}A_{2}A_{3}A_{4}为四条生产线,B为生产不合格事件

P(B)=P(A_{1})P(B|A_{1})+\cdots +P(A_{4})P(B|A_{4})                   (全概率公式)

P(A_{4}|B)=\frac{P(A_{4}B)}{P(B)}=\frac{P(A_{4})P(B|A_{4})}{P(B)}=0.222                  (贝叶斯公式)

7、概率和似然的区别

概率:描述一个事件发生的可能性

似然性:正好相反,一个事件已经发生了,反推在什么参数条件下,这个事件发生的概率最大。

       

二、梯度下降

梯度下降是通过迭代找到目标函数的最小值,或收敛到最小值。

假设这样一个场景:一个人被困在山上,需要从山上下来(找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。怎么做呢,首先以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处;同理上山也是如此,只是这时候就变成梯度上升算法了。

梯度下降的基本过程:与下山场景类似。首先,有一个可微函数,求函数的最小值。先找到给定点的梯度,沿着梯度相反的方向,就能让函数值下降的最快。(因为梯度的方向是函数在给定点上升最快的方向,那么梯度的反方向就是函数在给定点下降最快的方向。)

微分

1.单变量的微分

\frac{\mathrm{d}(x ^{2})}{\mathrm{d} x}=2x

2.多变量微分

\frac{\partial (x^{2}y^{2})}{\partial x}=2xy^{2}

梯度下降数学公式

 \Theta ^{1}=\Theta ^{0}+\alpha \triangledown J(\Theta )\rightarrow evaluatedat\Theta ^{0}

J是关于Θ的一个函数,初始点为Θ0,沿着梯度反方向找到最小值,α为步长。

例子:

函数 J(\Theta )=\Theta ^{2}

求微分 {J}'(\Theta )=2\Theta

设初始点Θ0=1,步长α=0.4

梯度前加负号,表示沿着梯度反方向前进

如图,经过四次的运算,也就是走了四步,基本就抵达了函数的最低点,也就是山底

三、BTM模型

BTM(Biterm topic model)是一个针对短文本的主题模型,还有一个常见的主题模型是LDA,但更适用于长文本。

这里有一句话“清风明月,草长莺飞,杨柳依依”,分词后得到三个词

['清风明月', '草长莺飞', '杨柳依依']

那么,这句话就包括三个biterm

['清风明月','草长莺飞'] ['杨柳依依','草长莺飞']['清风明月','杨柳依依']

再举一个例子,“今天天气不错,适合出游”,分词后得到

['今天','天气','不错','适合','出游']

则有10个词对

['今天','天气'],['今天','不错'],['今天','适合'],['今天','出游'],['天气','不错'],
['天气','适合'],['天气','出游'],['不错','适合'],['不错','出游'],['适合','出游']

 采用吉布斯抽样(Gibbs sampling)方法进行推断,得到每个词对b=(w_{i},w_{j})的条件概率:

 

四、bert模型

特点:使用self-attention实现并行计算。同一词在不同语境中可能表达不同的意思,则它对应的词向量也不同。

Self-Attention:

例子:The animal didn't cross the street because it was too tired.

    The animal didn't cross the street because it was too narrow.

这两句话中it分别指代什么,animal还是street?在第一句中,animal、tired权重占比大,it指代animal。第二句中street、narrow权重大,it指代street,所以it词向量不同。

 

五、ERNIE

2019年由百度提出的模型,是基于bert进行改进的。

根据github进行复现:

1、模型热启动:消除第⼀次⾼延迟的请求,模型加载后的第一个请求一般会进行形状推导等,这些操作耗时很⾼,比之后请求的 latency 可能会高出几个数量级。

六、知识蒸馏

知识蒸馏(Knowledge distillation)是一种模型压缩方法,是一种基于“教师-学生网络思想”的训练方式。"teacher"是“知识”的输出者,"student"的”知识“的接收者。知识蒸馏的过程分为两个阶段:

1、原始模型训练:训练”teacher模型“,简称为Net-T,它的特点是模型相对复杂,也可以由多个分别训练的模型集成而成。我们对"teacher模型"不做任何关于模型架构、参数量、是否集成方面的限制,唯一的要求就是,对于输入X,其都能输出Y,其中Y经过softmax的映射,输出值对应类别的概率值。

2、精简模型训练:训练"student模型",简称为Net-S,它是参数量较小、模型结构相对简单的单模型。同样的,对于输入X,其都能输出Y,Y经过softmax映射后同样能输出对应类别的概率值。

softmax函数:

改进后的函数:

T表示温度。

温度:温度的高低改变的是Net-S训练过程中对负标签的关注程度。温度较低时,对负标签的关注,尤其是那些显著低于平均值的负标签的关注较少;而温度较高时,负标签相关的值会相对增大,Net-S会相对多地关注到负标签。

七、最大匹配分词算法

向前最大匹配(forward-max matching)

例子:我们经常有意见分歧

词典:[“我们”,“经常”,“有”,“有意见”,“意见”,“分歧”]

假设变量max-len=5,我们取前面5个词“我们经常有”跟词典进行比对,发现词典中没有这个词,则取4个词“我们经常”跟词典比对,以此类推……直到“我们”这个词可以和词典中匹配上,就把“我们”划分成一个词。

向后最大匹配(backward-max matching)

用上面的例子:取最后面的5个词“有意见分歧”跟词典进行比对。

这两个算法的缺点:

①采用贪心策略,时间复杂度高

②out of vocabulary

③没有考虑语义、上下文、单词之间的关系

八、Pytorch

1、Tensor(张量)

是一种数据结构,单个元素叫标量(scalar),一个序列叫向量(vector),多个序列组成的平面叫矩阵(matrix),多个平面组成的立方体叫张量(tensor)

九、语法任务:

word level

morphological analysis(形态划分)一般针对于英文、阿拉伯、德语

(English) walking  \Rightarrow walk + ing

(Arabic) wktAbnA (意思:and our book) \Rightarrow w(and) + ktAb(book) +A(our)

word segmentation(分词) 一般针对于中文、泰文

中国外企业务 \Rightarrow 中国    外企    业务

其中国外企业 \Rightarrow 其中    国外    企业

tokenization(词语切分) 一般针对于英文,与中文分词类似

Mr.Smith visited  \Rightarrow  Mr.    Smith     visited

Wendy's new house  \Rightarrow  Wendy    's     new     house

POS tagging(词性标注)英文词性标注import nltk,中文词性标注import jieba,中英文标注词表不一样。

标注词表:
名词:NN,NNS,NNP,NNPS
代词:PRP,PRP$
形容词:JJ,JJR,JJS
数词:CD
动词:VB,VBD,VBG,VBN,VBP,VBZ

副词:RB,RBR,RBS

I can open this can.  \Rightarrow  I(PRP) can(MD) open(VB) this(DT) can(NN)

标注词表:
普通名词:n
人名:nr
形容词:a

副词:d

猪肉 \Rightarrow n      一直 \Rightarrow d

Sentence level

constituent parsing(成分句法)

dependency parsing(依存句法)

十、N-gram

N-gram是一种基于统计语言模型的算法,基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度为N的字节片段序列。

1、Unigram一元组 : hello , bag

由m个词组成的一句话,这句话的概率为:

out-of vocabulary(OOV)训练集里未出现的词,称为未登录词,即便出现在词汇表里,用训练集计算词频时,概率为0

P(OOV)=0

当一句话中出现未登录词,这句话的概率会变成0,解决办法为add-one smoothing:把词汇表里每一个词在训练集里出现的次数都+1,来重新估算每一个词的概率。

P(w)=(某词在训练集的次数+1) / (训练集的数量+词汇表的数量)

2、Bigram二元组: eat pizza , come on

3、Trigram三元组:cat eat mouse , mouse eat cat

当词语比较稀疏,可采用回退法(backoff),一般不采用平滑(add-n smoothing),因为会把少量的非0频率分配到未登录词,导致频率下降,出现分类偏差。

平滑算法:

①add-n smoothing

②KNessay-Ney Smoothing

③Good-Turning Smoothing

十一、朴素贝叶斯文本分类

十二、意图识别

①语义槽填充:理解一段文字的一种方法是标记那些对句子有意义的单词或记号。作用 : 将用户隐式的意图转化为显式的指令从而让计算机理解。

举例:

  • 帮我订张机票,从杭州出发。

这里就应该填充了两个槽,把『机票』、『杭州』填入名为『交通工具』、『目的地』。

那么在对话系统钟就可以让reboot理解用户是想要买一张去往杭州的机票,由于缺少出发地点,可能还会有一轮询问的对话。

最后reboot根据补充的信息,生成指令,调用接口购买从xx去往杭州的机票。

经典方法

CRF: 条件随机场。通过设置各种特征函数来给序列打分。——(CRF)

深度方法

一、RNN 槽填充

二、RNN Encoder-Decoder 槽填充

三、Bi-GRU + CRF

四、Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling (比较经典,论文是意图识别和槽填充共同训练),加入了对齐信息和attention

对 BIO的解释

“B-X”表示此元素所在的片段属于X类型并且此元素在此片段的开头。

“I-X”表示此元素所在的片段属于X类型并且此元素在此片段的中间位置。

“O”表示不属于任何类型。

② 槽与槽位

槽是由槽位构成的,举个例子,出发地点槽,是打车必填的,要填充这个槽,可以通过历史对话取得值,也可以通过询问用户取得值,还可以通过GPS定位取得值等等。

这里的必填是槽的属性,而不同的取值方式是不同槽位的属性

十三、在Jupyter添加虚拟环境

进入到指定的虚拟环境中:  activate 环境名

conda install nb_conda

conda install ipykernel

ipython kernel install --user --name=环境名

安装完成后输入: jupyter notebook进入

如果安装了nb_conda,在jupyter notebook中,会出现Python[conda env:环境名],其实Python[conda env:pytorch1-hug]和pytorch1-hug是同一个虚拟环境,但是在Python[conda env:pytorch1-hug]中可以import torch,在pytorch1-hug不能import torch,我也不知道为什么。

如果没有出现Python[conda env:环境名],从开始菜单点击Jupyter Notebook

###名词解释

1、软标签、硬标签、伪标签

伪标签(Pseudo Label)对未标注数据进行预测,进行二次训练

软标签(Soft Label)对标签转为离散值,进行二次训练,适用于大规模无监督的蒸馏模型

硬标签(hard Label)实际label值 ,过于绝对,适用于非黑即白的任务

2、学习率:将输出误差反向传播给网络参数,以此来拟合样本的输出,本质上是最优化的一个过程,逐步趋向于最优解,但是每一次更新参数利用多少误差,就需要通过一个参数来确定,这个参数就是学习率,也称步长。

学习率设置过小时,步长太小,下降速度太慢,要花很久才能找到最小值。

学习率设置过大时,步长太大,虽然收敛得速度很快,但是容易跨过或忽略了最小值,导致一直来回震荡而无法收敛。

3、batch_size

批次大小,表示单次传递给程序用以训练的数据(样本)个数。比如我们的训练集有1000个数据。这是如果我们设置batch_size=100,那么程序首先会用数据集中的前100个数据,即第1-100个数据来训练模型。当训练完成后更新权重,再使用第101-200的个数据训练,直至第十次使用完训练集中的1000个数据后停止。

我们在神经网络训练过程中,往往需要将训练数据划分为多个batch;而具体每一个batch有多少个样本,那么就是batch size指定的了。
4、epoch

一个epoch就是等于使用训练集中的全部样本训练一次的过程,所谓训练一次,指的是进行一次正向传播(forward pass)和反向传播( back pass )。

当一个epoch的样本(也就是训练集)数量太过庞大的时候,进行一次训练可能会消耗过多的时间,并且每次训练都使用训练集的全部数据是不必要的。因此,我们就需要把整个训练集分成多个小块,也就是就是分成多个Batch来进行训练

一个epoch由一个或多个batch构成,batch为训练集的一部分,每次训练的过程只使用一部分数据,即一个batch。我们称训练一个batch的过程为一个iteration。

5、step

一般叫做“步骤”,表示在一个epoch中模型进行一次参数更新的操作。在神经网络训练过程中,每次完成对一个batch数据的训练,就是完成了一个step。很多情况下,stepiteration表示的是同样的含义。

6、Iteration

一般叫做“迭代”,多数情况下就表示在训练过程中经过一个step的操作。一个iteration包括了一个step中前向传播、损失计算、反向传播和参数更新的流程。当然,在某些情况下,stepiteration可能会有细微的区别——有时候iteration是指完成一次前向传播和反向传播的过程,而step是指通过优化算法对模型参数进行一次更新的操作。但是绝大多数情况下,我们就认为二者是一样的即可。

假设,有个训练集,样本数量为20000,如果我们把这20000条数据全部训练一次,就是一个epoch。如果要将其分为多个batch,其中我们决定1批训练500条数据,则batch_size=500,那么把数据全部训练完需要训练40批,batch=step=iteration=40。

如果我们要训练多次,也就是多个epoch。假如epoch=3,把20000条数据训练三次,则step、batch、iteration也会改变,等于3*40。

7、上下位关系

概括性较强的单词叫做特定性较强的单词的上位词特定性较强的单词叫做概括性较强的单词的下位词。

 例如, 猩红色、鲜红色、胭脂红、绯红色都是“红色 ”的下位词,而红色则是猩红色的上位词。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值