柚子快报激活码778899分享:自然语言处理 NLP笔记

http://www.51969.com/

文本分类:

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

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

一、数学知识

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

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

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

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

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

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

P(A|B)==

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

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

P(A|B)=                             P(AB)=P(B)P(A|B)

P(B|A)=                             P(AB)=P(A)P(B|A)

P(...)=P()P(|)P(|)...P(|)

5、全概率公式

事件、、...、构成一个完备事件组,即它们两两互不相融,并和为。P()>0,则对任一事件B有:P(B)=

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

6、贝叶斯公式

全概率公式:因果

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

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

解:令、、、为四条生产线,B为生产不合格事件

                   (全概率公式)

                  (贝叶斯公式)

7、概率和似然的区别

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

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

       

二、梯度下降

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

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

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

微分

1.单变量的微分

2.多变量微分

梯度下降数学公式

 

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

例子:

函数

求微分

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

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

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

三、BTM模型

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

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

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

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

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

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

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

则有10个词对

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

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

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

 

四、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  walk + ing

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

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

中国外企业务 中国    外企    业务

其中国外企业 其中    国外    企业

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

Mr.Smith visited    Mr.    Smith     visited

Wendy's new house    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.    I(PRP) can(MD) open(VB) this(DT) can(NN)

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

猪肉 n      一直 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。很多情况下,step和iteration表示的是同样的含义。

6、Iteration

一般叫做“迭代”,多数情况下就表示在训练过程中经过一个step的操作。一个iteration包括了一个step中前向传播、损失计算、反向传播和参数更新的流程。当然,在某些情况下,step和iteration可能会有细微的区别——有时候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、上下位关系

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

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

柚子快报激活码778899分享:自然语言处理 NLP笔记

http://www.51969.com/

查看原文