深度学习-->NLP-->NNLM简介

本篇博文将总结 N L P NLP NLP 里面的 e m b e d d i n g embedding embedding w o r d 2 v e c t o r word2vector word2vector,以及 N N L M NNLM NNLM 的简介。

embedding

在一般任务中,我们总是非常自然的用特征值来表示一个词汇。但是,到底怎么样表示一个词,才是最合理的? 存储其 A S C I I ASCII ASCII 码表示,只会告诉你这个词是什么,并不能表示这个词真正的语义(也许你可以从这个词的词缀中获得该词的词性或其他属性,但也只能获得这些东西)。更进一步的, 我们应该在什么场景下, 将这些词的表示联合起来考虑? 因为我们的神经网络,常常输入维度是整个词典的大小 ∣ V ∣ |V| V,输出维度是标签集合的大小(一般远小于 ∣ v ∣ |v| v )。如何从稀疏的高维空间生成较小的维度空间?

如果我们用 o n e − h o t one-hot onehot 来表示词的话:

这里写图片描述

我们能得到如图的一个表示: 只有某一维度的值是1,其他维度都是0, 这个值为1的维度就代表这个词。

你可能马上就会意识到,这样表示如果词典大了,会不会向量就太长了?是的! 但这不是这个表示的最大问题,这个表示最大的问题是:它将所有单词视为彼此无关的独立实体。 但是,我们真正想要的表示,是表示词语的语义,显然有很多词的语义是相似的,而不是独立的. 一个好的表示,应该要把这些相似关系也刻画出来。

由此产生了 w o r d − e m b e d d i n g word-embedding wordembedding,给出一个文档,文档就是一个单词序列比如 “ A   B   A   C   B   F   G ” “A\ B\ A\ C\ B\ F\ G” A B A C B F G, 希望对文档中每个不同的单词都得到一个对应的向量(往往是低维向量)表示。比如,对于这样的 “ A   B   A   C   B   F   G ” “A\ B\ A\ C\ B\ F\ G” A B A C B F G 的一个序列,也许我们最后能得到: A A A 对应的向量为 [ 0.10.6 − 0.5 ] [0.1 0.6 -0.5] [0.10.60.5] B B B 对应的向量为 [ − 0.20.90.7 ] [-0.2 0.9 0.7] [0.20.90.7] (此处的数值只用于示意)之所以希望把每个单词变成一个向量,目的还是为了方便计算,比如“求单词 A A A 的同义词”,就可以通过“求与单词 A A A c o s cos cos 距离下最相似的向量”来做到。

数学上的概念,从一个空间映射到另外一个空间,保留基本属性。
w o r d   e m b e d d i n g word\ embedding word embedding 就是从一个高维空间(如:维度=词汇表长度=1M),映射到低维度空间(如300)。

在神经网络语言模型中,也就是 e m b e d d i n g   l o o k u p embedding\ lookup embedding lookup ,其实就是一个非线性变换。

非线性变换: e m b e d d i n g   l o o k u p embedding\ lookup embedding lookup
y = e b l ( x ) = W [ x , : ] , W ∈ R ∣ v ∣ ∗ d y = ebl(x) = W [x, :],W\in {R}^{|v|*d} y=ebl(x)=W[x,:]WRvd
作用: i n t − > e m b e d d i n g int -> embedding int>embedding,作用就是输入一个整数 x x x,得到一个向量。
例如:

这里写图片描述

那么这个 e m b e d d i n g embedding embedding 矩阵 w w w怎么得到呢?在神经网络语言模型中,首先先验性的给定这个矩阵的 s h a p e shape shape,初始化,然后通过不断的学习学到这个矩阵。

##NNLM(Neural Network Language Model)

首先看看 n − g r a m n-gram ngram 语言模型潜在的问题:

  • 对“词”的理解有限
    不能很好的理解每个词之间的联系和含义。

  • 上下文的长度有限

我们以 t r i g r a m trigram trigram 举例, [ ( a , b ) , c ] [(a,b),c] [(a,b),c],即已知 a , b a,b a,b 预测 c c c,利用神经网络语言模型。

这里写图片描述

从上面的图可以看到有层 i n p u t   e m b e d d i n g s input\ embeddings input embeddings,那么结合上面说的,这个 e m b e d d i n g embedding embedding 层有上面作用呢?我们可以这样简单理解,在对 w o r d word word 进行 o n t − h o t ont-hot onthot 编码时,得出的矩阵是稀疏的,且每个 w o r d word word之间的相互独立的,但是在用 e m b e d d i n g embedding embedding 之后得出的矩阵是稠密的,每个 w o r d word word 都能对于这个矩阵的每一行,可以看做对这个 w o r d word word 提取出了 d i m dim dim f e a t u r e s features features。这样就有以下几个好处:

  • 能够捕捉到词法的相似性。
    g o o d , b e t t e r good, better good,better
  • 能够捕捉到语法的相似性。
    s e e , s a w see, saw see,saw
  • 能够捕捉到语义相似性。
    d o g , c a t dog, cat dog,cat

找出每个词对应于 e m b e d d i n g embedding embedding矩阵向量,然后将其在二维上可视化如下,越相似的 w o r d word word 距离越近。

这里写图片描述

N N L M NNLM NNLM 模型的基本思想可以概括如下:

  • 假定词表中的每一个 w o r d word word 都对应着一个连续的特征向量;
  • 假定一个连续平滑的概率模型,输入一段词向量的序列,可以输出这段序列的联合概率;
  • 同时学习词向量的权重和概率模型里的参数。

这里写图片描述

我们可以将上面整个模型拆分成两部分加以理解:

  1. 首先是一个线性的 e m b e d d i n g embedding embedding 层。它将输入的 N − 1 N−1 N1 o n e − h o t one-hot onehot 词向量,通过一个共享的 D × V D×V D×V 的矩阵 C C C,映射为 N − 1 N−1 N1 个分布式的词向量 ( d i s t r i b u t e d v e c t o r ) (distributed vector) distributedvector。其中, V V V 是词典的大小, D D D e m b e d d i n g embedding embedding 向量的维度(一个先验参数)。*** C C C 矩阵里存储了要学习的 w o r d   v e c t o r word\ vector word vector。***

  2. 其次是一个简单的前向反馈神经网络 g g g 。它由一个 t a n h tanh tanh 隐层和一个 s o f t m a x softmax softmax 输出层组成。通过将 e m b e d d i n g embedding embedding 层输出的 N − 1 N−1 N1 个词向量映射为一个长度为 V V V 的概率分布向量,从而对词典中的 w o r d word word 在输入 c o n t e x t context context 下的条件概率做出预估:
    p ( w t ∣ w 1 , w 2 , . . . , w t − 1 ) ≈ f ( w t , w t − 1 , . . . , w t − n + 1 ) = g ( w i , C ( w t − n + 1 ) , . . . , C ( w t − 1 ) ) p({w}_{t}|{w}_{1},{w}_{2},...,{w}_{t−1})≈f({w}_{t},{w}_{t−1},...,{w}_{t−n+1})=g({w}_{i},C({w}_{t−n+1}),...,C({w}_{t−1})) p(wtw1,w2,...,wt1)f(wt,wt1,...,wtn+1)=g(wi,C(wtn+1),...,C(wt1))

我们可以通过最小化一个 c r o s s − e n t r o p y cross-entropy crossentropy 的正则化损失函数来调整模型的参数 θ θ θ
L ( θ ) = 1 T ∑ t l o g f ( w t , w t − 1 , . . . , w t − n + 1 ) + R ( θ ) L(θ)=\frac{1}{T}\sum_{t}^{}logf({w}_{t},{w}_{t−1},...,{w}_{t−n+1})+R(θ) L(θ)=T1tlogf(wt,wt1,...,wtn+1)+R(θ)

为什么 E m b e d d i n g Embedding Embedding 会有这样的作用?即所谓的“特征学习/表示学习”( r e p r e s e n t a t i o n   l e a r n i n g representation\ learning representation learning),也是 D e e p   l e a r n i n g Deep\ learning Deep learning 的核心原因之一。

Word2Vec

N − g r a m N-gram Ngram 模型一样, N N L M NNLM NNLM 模型只能处理定长的序列。

因此, M i k o l o v Mikolov Mikolov 等人在2010年提出了一种 R N N L M RNNLM RNNLM 模型,用递归神经网络代替原始模型里的前向反馈神经网络,并将 e m b e d d i n g embedding embedding 层与 R N N RNN RNN 里的隐藏层合并,从而解决了变长序列的问题。

另一个问题就比较严重了。*** R N N L M RNNLM RNNLM 的训练太慢了***。即便是在百万量级的数据集上,即便是借助了40个CPU进行训练, R N N L M RNNLM RNNLM 也需要耗时数周才能给出一个稍微靠谱的解来。显然,对于现在动辄上千万甚至上亿的真实语料库,训练一个 R N N L M RNNLM RNNLM 模型几 乎是一个 i m p o s s i b l e   m i s s i o n impossible \ mission impossible mission

我们对原始的 N N L M NNLM NNLM 模型做如下改造:

  1. 移除前向反馈神经网络中非线性的 h i d d e n   l a y e r hidden\ layer hidden layer,直接将中间层的 e m b e d d i n g   l a y e r embedding\ layer embedding layer 与输出层的 s o f t m a x   l a y e r softmax\ layer softmax layer 连接;

  2. 忽略上下文环境的序列信息:输入的所有词向量均汇总到同一个 e m b e d d i n g   l a y e r embedding\ layer embedding layer;将 f u t u r e   w o r d s future\ words future words纳入上下文环境

这里写图片描述

说下右边 s k i p _ g r a m skip\_gram skip_gram 模型,输入 w ( t ) w(t) w(t)是一个 o n e − h o t one-hot onehot 类型数据,然后通过一个线性的 e m b e d d i n g embedding embedding 层,也就是通过学习到的 D × V D×V D×V 的矩阵 C C C进行 e m b e d d i n g   l o o k u p embedding\ lookup embedding lookup,得到一个稠密向量,再进行 s o f t m a x softmax softmax 来预测上下文的词。这就是 s k i p _ g r a m skip\_gram skip_gram 模型,用来预测目标词周围的词,这里面全是线性的,没有任何非线性的操作。因此这种模型非常快,从而可以处理大量的数据。

用途:

  • 寻找近义词。
  • 用来作为别的自然语言任务的特征值。(训练过程中学习到 e m b e d d i n g embedding embedding
  • 用来为别的Neural Network做初始化。( w o r d 2 v e c word2vec word2vec 训练出来的 e m b e d d i n g embedding embedding 作为别的神经网络语言模型的 e m b e d d i n g embedding embedding 的初始值)

w o r d 2 V e c word2Vec word2Vec 代码实现可参考tensorflow实现word2vec,代码讲解可参考代码讲解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值