人工智能深度学习之自然语言处理必备神器huggingface,nlp,rnn,word2vec,bert,gpt

一。Huggingface与Nlp介绍解读

(1)nlp中经常会听到分类,机器翻译,情感分析,智能客服,文本摘要,阅读理解等。我们训练的nlp模型,目的学会数据表达的逻辑,学会人类文字怎么去描述与理解,这体现出模型要有语言能力,这样就不管后续做什么都行。nlp不像cv一样输入图像后最后输出结果一个结果就完事了。

如何培养模型的学习能力呢?首先要很多很多输入学习资料(这些都是大厂才能做的事)让模型去学习,提高nlp的学习理解能力。

(2)NLP中的江湖人物

早期nlp与cv有点像,主要做单一预测(例分类,回归),没强调模型的语言学习能力。现在nlp主要分为二大类:bert(类似五岳剑派,比较正派,常规性)和gpt(类似魔教),bert类似据句子前,后做完形填空,gpt类似据全文每个字往下生成,做自回归。这二个都是基于transformer框架去做的。

(3)传统模型拼的是网络结构,算法等。但nlp拼的主要是数据量和参数量,算力。所以对于nlp,我们是以人家预训练好的模型做特定的自己下游任务(如机器翻译,情感分析等)即可。

(4)Huggingface

它不仅是一个工貝包,更是一个社区(里面有很多开源模型),也是nlp大佬们的舞台。nlp现在是面向Huggingface编程了,bert(谷歌)和gpt(facebook)席卷nlp,Huggingface在它们的基础上做顶层抽象,以后都用它的接口了,Huggingface就做了渔翁之利统一天下。所以现在我们就用Huggingface社区中的开源模型做自己的任务,此时是站在巨人的肩膀上,但算法也是需熟悉的,模型也要会用。中国的mmlab(视觉cv这块)有点类似Huggingface,而Huggingface想一统江湖了,mmlab碰到对手了。

二。bert系列算法解读

(1)必备的基础知识点word2vec模型解读

1)词向量模型通俗解读

计算机只认识数字,那人们输入文本后首先考虑怎么把文本向量化。若只考虑某些词出现频率肯定远远不够的,还要考虑它们的前后位置关系吧,又还要考虑词与词之间的相似度(词向量空间上表达的相近度,例如"nlp"与"自然语言处理"是等价的)。word2vec模型就是解决这三个问题的。

词向量空间就是词映射到高维空间上(例如a,b,c三个单词在高维空间上对应有相应坐标值,意义越接近它们就离得越近,相似度越高)。只要有向量就可用不同方法计算相似度(例余弦距离或欧式距离等)。而词向量通常是很高维(默认300维)的,例某个人只用身高与体重,年龄三个维度描述是远远不够的。

2)模型整体框架

<1>通常来说,数据的维度越高,能提供的信息就越多,从而计算结果的可靠性就越高。如何来描述语言的特征呢?通常都在词的层面上构建特征,而word2vec就是把词转成向量。

<2>假设拿到一份训练好的词向量,其中每个词都是50维的向量,这50个数值只有计算机才能识别它的意思(假设都是-2到2范围的数值),把这50维向量都分别用热度图表示,发现相似意义的词在相同位置上的颜色是相似的,相似的词在空间中的位置是相近的,相似的词在特征表达上是相似的。

<3>在词向量模型中,输入与输出分别是什么?首先输入词,然后连神经网络到语料库中查找这词对应的向量(50维或300或500维),词向量的语料库一开始都是随机初始化出来的(即每个词都会先随机初始化出向量出来),经过前向传播计算损失函数的err值,然后反向传播通过损失函数来一步步更新神经网络的权重参数(即更新w值,如w对y的贡献有多大,即y对w求偏导),而在word2vec模型中还会一并更新输入词在词料中的向量(更新x,即y对x求偏导)。经过多次这样训练就会得到更好的词向量,这样最后连上多分类的softmax后预测出更准备的输出结果词。

输入文本------>word2vec模型------>输出为一个嵌入矩阵(Embedding Matrix)。其实嵌入矩阵中是包括很多个词向量构成的,在这个过程中word2vec模型是根据数据集中的每个句子进行训练,并且以一个固定窗囗在句子上滑动,根据句子的上下文来预测固定窗囗中间那个词的向量,最后根据一个损失函数与优化方法来对这个模型进行训练。

制作词向量可以直接用gensim这个库来训练出一个word2vec词向量(自己训练不现实),当然也可以用现成的word2vec词向量。典型的word2vec模型是google帮我们在大规模数据集上训练出来的,它包括1000亿个不同的词,在这个模型中,谷歌创建出300万个词向量,每个向量维度为300

3)训练数据构建

训练数据只要是正常语言构造出的词即可用作训练数据。这里是先分词(英文已分好,中文未分好)再构建两步,构建数据就通过平移方式不断构建出很多条样本出来,每个样本的输出词变成下一个样本的输入词了。例如:i  played  football yestody in school,假设第一样本是i  played  football,而第二样本就是played  football yestody,第三样本就是football yestody in,第四样本就是yestody in school。当然不一定用三个字组成。这样每个样本可看到是输入与输出结构,到时候还可对这些样本加上标签来标注。

4)CBOW与skip-gram模型

有了训练数据后就可训练模型了, 这里可选择不同架构的模型,例如CBOW模型是输入上,下文,而输出是中间词。而skip-gram模型是与CBOW模型刚好相反,给出中间词,预测出上下文。如果语料库很庞大,最后一层的softmax计算会很耗时,解决方案也许可以这样:把原来输入一个a,预测出输出的可能性很多,计算量大,这时想到把a与输出(假设b)一起输入到神经网络,标签定义为1,那如果softmax值为0.95,那么说明a后面输出就应是b了,这样把多种结果转成二分类判断的问题了。但是如果标签全是1的话,只是想到正确的匹配结果,这样训练出的结果不会很好,所以要手动加多一些不能作为输出的负样本(负采样模型,很多算法中都有用到这种方式)进来,用标签0表示。训练过程中不断更新初始化出的x与权重值和手动新增的负样本值,最后就构建出词向量的word2vec模型.

单词要转成向量(高维度空间)才能被计算机识别,词向量是具有空间意义(例如意义相似的词在高维空间中的距离是很相近的)的并非是简单的映射,单词的向量表示也被称为词嵌入。

(2)必备的基础知识点-RNN网络架构与情感分析(LSTM)

1)RNN网络模型解读

神经网络的一个分支叫递归神经网络,它只是对原始神经网络作一些改进。原始神经网络一般是数据输入,经过多个隐藏网络,最后输出预测层,它是没考虑数据的时间性的,是独立的,是先洗牌后再做batch选择。但现在如果输入的数据是有时间先后性,这时

你可能感兴趣的:(算法,机器学习,深度学习,自然语言处理,人工智能)