对话机器人学习篇(五)--- NLP

NLP

 

一. 词向量

表示词的向量,可认为是词的特征向量或表征

词嵌入,把词映射为实数域向量

 

离散表示:

One-hot表示

词袋模型:通过先构建一个包含语料库中所有词的词典,然后根据词典完成对每个词的向量化,进而完成文本向量化。

问题:维度灾难;未保留次序;语义鸿沟(通过向量无法表示两个词是否为同义词)

TF-IDF:一种用于信息检索与数据挖掘的常用加权技术。TF是词频(Term Frequency),IDF是逆文本频率指数(Inverse Document Frequency)

 

 

TF_IDF=TF*IDF :可以看出,当w在文档中出现的次数增大时,而TF-IDF的值是减小的

字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。一个词语在一篇文章中出现次数越多, 同时在所有文档中出现次数越少, 越能够代表该文章。

 

统计模型:一个句子是由多个词语按顺序组合构成。统计语言模型就是计算这个组合出现的概率。

 

 

N-gram模型:为了保持词的顺序,做了一个滑窗的操作,这里的n表示的就是滑窗的大小,例如2-gram模型,也就是把2个词当做一组来处理,然后向后移动一个词的长度,再次组成另一组词,把这些生成一个字典,按照词袋模型的方式进行编码得到结果。改模型考虑了词的顺序。

n-gram模型假设一个词的出现只与它前面的固定数目的词有关系,相当于做了一个n-1阶的Markov的假设,认为一个词的出现只与它前面n-1个词相关,即

  

 

缺点:

对于一般的NLP问题,是可以使用离散表示文本信息来解决问题的,但对于要求精度较高的场景就不适合了。

  • 无法衡量词向量之间的关系。
  • 词表的维度随着语料库的增长而膨胀。
  • n-gram词序列随语料库增长呈指数型膨胀,更加快。
  • 离散数据来表示文本会带来数据稀疏问题,导致丢失了信息,与我们生活中理解的信息是不一样的。

 

 

分布式表示

用一个词附近的其它词来表示该词,一个词是由这个词的周边词汇一起来构成精确的语义信息

共现矩阵:词共同出现,词文档的共现矩阵主要用于发现主题(topic),用于主题模型,如LSA

局域窗中的word-word共现矩阵可以挖掘语法和语义信息,例如:

  • I like deep learning.
  • I like NLP.
  • I enjoy flying

有以上三句话,设置滑窗为2,可以得到一个词典:{"I like","like deep","deep learning","like NLP","I enjoy","enjoy flying","I like"}

我们可以得到一个共现矩阵(对称矩阵):

 

 

中间的每个格子表示行和列组成的词组在词典中共同出现的次数,也就体现了共现的特性。

 

缺点:

  • 向量维数随着词典大小线性增长。
  • 存储整个词典的空间消耗非常大。
  • 一些模型如文本分类模型会面临稀疏性问题。
  • 模型会欠稳定,每新增一份语料进来,稳定性就会变化。

 

 

神经网络表示

NLNLM:定义一个前向窗口大小,其实和上面提到的窗口是一个意思。把这个窗口中最后一个词当做y,把之前的词当做输入x,通俗来说就是预测这个窗口中最后一个词出现概率的模型

(和n-gram模型功能一样,输入是词序列,输出是概率)

 

 

 

Word2Vec:实际是一种浅层的神经网络模型,它有两种网络结构,**分别是CBOW(Continues Bag of Words)连续词袋和Skip-gram;

 

CBOW:获得中间词两边的的上下文,然后用周围的词去预测中间的词,把中间词当做y,把窗口中的其它词当做x输入,x输入是经过one-hot编码过的,然后通过一个隐层进行求和操作,最后通过激活函数softmax,可以计算出每个单词的生成概率

(图中目标词 Wt 前后只取了各两个词,所以窗口的总大小是2)

 

 

Skip-gram:与CBOW相反,通过当前词来预测窗口中上下文词出现的概率模型,把当前词当做x,把窗口中其它词当做y,依然是通过一个隐层接一个Softmax激活函数来预测其它词的概率

(图中目标词 Wt 前后只取了各两个词,所以窗口的总大小是2)

  

 

ULMFIT:通用语言模型的微调,搞定一项NLP任务,不再需要从0开始训练模型,拿来ULMFiT,用少量数据微调一下,它就可以在新任务上实现更好的性能

ELMo:用语言模型(language model)来获取词嵌入,同时也把词语所处句、段的语境考虑进来。

BERT:Bidirectional Encoder Representations from Transformers,意思是来自Transformer的双向编码器表示,也是一种预训练语言表示的方法

Auto Keras:执行AutoML任务的开源库

 

 

层次softmax和负采样替换输出层softmax,降低复杂度

参考链接:https://zhuanlan.zhihu.com/p/44599645

层次softmax(Hierarchical Softmax):

 

 

基于层级sotfmax的CBOW:

 

 

 

 

负采样(Negative Sampling):随机采样代替softmax

负采样实际上是采样负例来帮助训练的手段,其目的与层次softmax一样,是用来提升模型的训练速度。我们知道,模型对正例的预测概率是越大越好,模型对负例的预测概率是越小越好。由于正例的数量少,很容易保证每个正例的预测概率尽可能大,而负例的数量特别多,所以负采样的思路就是根据某种负采样的策略随机挑选一些负例,然后保证挑选的这部分负例的预测概率尽可能小。所以,负采样策略是对模型的效果影响很大,word2vec常用的负采样策略有均匀负采样、按词频率采样等等。

原文地址:https://www.cnblogs.com/xiaowa/p/15397629.html