PaddlePaddle自然语言处理总结

时间:2022-11-29 10:51:52

11月28日 week14 周一 910节 物联201 2008070101

本文总结:

1.介绍词向量引入对自然语言处理有着至关重要的作用;

2.介绍了word2vec算法;

3.介绍CBOW算法的实现;

4.介绍Skip-Gram算法的实现。

基本流程

1.数据预处理:选择需要使用的数据,做好预处理;

2.网络定义:预先定义好网络结构,包括输入层、中间层(隐藏层)、输出层、损失函数和优化算法;

3.网络训练:将准备好的数据送入神经网络进行学习,并观察学习的过程是否正常,如损失函数值是否在降低,也可以及时返回一些关键步骤的结果;

4.网络评估:使用测试集合测试训练好的神经网络,看看训练效果如何。

参考链接:飞桨PaddlePaddle-源于产业实践的开源深度学习平台

目录

词向量

word2vec算法

CBOW算法

1.输入层

2.隐藏层

3.输出层

Skip-Gram算法 

1.结构 

2.实现

代表中心词的tensor

代表目标词的tensor

代表目标词标签的tensor


词向量

[1.]词向量(Word Embedding)的引入:表示自然语言里单词的一种方法,把每个词都表示为一个N维空间内的点,即一个高维空间内的向量,使用这个方法可以把自然语言转换为向量

通过计算这些向量之间的距离,就可以计算出词语之间的关联关系,从而达到让计算机像计算数值一样去计算自然语言的目的。

PaddlePaddle自然语言处理总结

word2vec算法

[2.]word2vec算法:通过上下文来学习语义信息,word2vec包括两个经典模型:CBOW(continuous bag-of-words)和Skip-gram;

CBOW:通过上下文的词向量推理中心词。

Skip-gram:根据中心词推理上下文。

PaddlePaddle自然语言处理总结

一般来说,CBOW比Skip-gram训练速度快,训练过程更加稳定,原因是CBOW使用上下文average的方式进行训练,每个训练step会见到更多样本。而在生僻字(出现频率低的字)处理上,skip-gram比CBOW效果更好,原因是skip-gram不会刻意回避生僻字(CBOW结构中输入中存在生僻字时,生僻字会被其它非生僻字的权重冲淡)。 

CBOW算法

[3.]CBOW算法实现:CBOW是一个具有3层结构的神经网络;

PaddlePaddle自然语言处理总结

1.输入层

一个形状为PaddlePaddle自然语言处理总结的one-hot张量,其中C代表上线文中词的个数,通常是一个偶数,我们假设为4;V表示词表的大小,我们假设为5000,该张量的每一行都是一个上下文词的one-hot向量表示,比如"Pineapples, are, and, yellow"。

2.隐藏层

一个形状为PaddlePaddle自然语言处理总结的参数张量W1,一般称为word-embedding,N表示每个词的词向量长度,我们假设为128。输入张量和word embedding W1进行矩阵乘法,就会得到一个形状为PaddlePaddle自然语言处理总结的张量。综合考虑上下文中所有词的信息去推理中心词,因此将上下文中C个词相加得一个1×N的向量,是整个上下文的一个隐含表示。

3.输出层

创建另一个形状为N×V的参数张量,将隐藏层得到的1×N的向量乘以该N×V的参数张量,得到了一个形状为1×V的向量。最终,1×V的向量代表了使用上下文去推理中心词,每个候选词的打分,再经过softmax函数的归一化,即得到了对中心词的推理概率:

PaddlePaddle自然语言处理总结

Skip-Gram算法 

[4.]Skip-Gram算法实现

PaddlePaddle自然语言处理总结

1.结构 

PaddlePaddle自然语言处理总结 

2.实现

在实现的过程中,通常会让模型接收3个tensor输入:

代表中心词的tensor

称之为center_words PaddlePaddle自然语言处理总结,一般来说,这个tensor是一个形状为[batch_size,vocab_size]的one-hot tensor,表示一个mini-batch中每个中心词具体的ID。

代表目标词的tensor

称之为target_words PaddlePaddle自然语言处理总结,一般来说,这个tensor同样是一个形状为[batch_size,vocab_size]的one-hot tensor,表示一个mini-batch中每个目标词具体的ID。

代表目标词标签的tensor

假设我们称之为labels PaddlePaddle自然语言处理总结,一般来说,这个tensor是一个形状为[batch_size,1]的tensor,每个元素不是0就是1(0:负样本,1:正样本)。