浅层深度学习的自然语言研究(1)

来源:互联网 发布:vba 数据库 编辑:程序博客网 时间:2024/06/06 03:08

     常用的词表示方法是 One-hot Representation(即0,1表示方式),例如:
           “话筒”表示为 [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ...]
           “麦克”表示为 [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ...]
这个向量的维度是词表大小,其中绝大多数元素为 0,只有一个维度的值为 1,这个维度就代表了当前的词。优点:编程实现比较方便,只需给每个词进行编号;能够满足大多数文本处理的要求。缺点:“词汇鸿沟”现象:任意两个词之间都是孤立的;通过向量看不出两个词之间有什么关系;词表太大时,维数灾难。

     Deep Learning表示词的方法:Distributed Representation。即:采用一种低维的实数向量表示,维数一般为50或100。例如:[0.792, −0.177, −0.107, 0.109, −0.542, ...]。优点:1、相关或者相似的词,在距离上更接近。向量的距离可以用最传统的欧氏距离来衡量,也可以用余弦相似度来衡量。2、不存在维数灾难的问题。最经典的文章:
     Yoshua Bengio, Réjean Ducharme, Pascal Vincent, and Christian Janvin. (2003). A Neural  Probabilistic Language Model. Journal of Machine Learning Research, 3, 1137-1155.
建立方法:词向量的构建都是在训练语言模型的同时,顺便得到词向量。
    在说Bengio的经典算法之前,我们也提一下n-gram模型,对于一个句子,怎么算它出现的概率呢?假设句子是由词序列w1, w2, w3, … wt组成,那么:
P(w1, w2, w3…wt)=P(w1)P(w2|w1)P(w3|w1,w2)…P(wt|w1,w2…wt-1)。缺陷:参数空间过大,不能实用化; 数据稀疏严重。常用的语言模型都是近似地求 P(wt|w1,w2,…,wt−1) ;n-gram 模型就是用 P(wt|wt−n+1,…,wt−1) 近似表示前者,在实践中用的最多的就是bigram(前1个词)和trigram(前2个词)。Bigram的例子:
      P(w1w2w3…wt)=P(w1)P(w2|w1)P(w3|w1w2)…P(wt|w1w2…wt-1)
                   ≈P(w1)P(w2|w1)P(w3|w2)…P(wt|wt-1)
    假如采用最大似然估计计算概率,会出现很多概率为0的情况,这时需要采用数据平滑(data Smoothing)或回退法处理。数据平滑的目的有两个:一个是使所有的n-gram概率之和为1,使所有的n-gram概率都不为0.
    Bengio在文章中,还提及n-gram存在其他问题:1.n-gram语言模型无法建模更远的关系,语料的不足使得无法训练更高阶的语言模型(当时的现状);
2. 模型无法建模出词之间的相似度,有时候两个具有某种相似性的词,如果一个词经常出现在某段词之后,那么也许另一个词出现在这段词后面的概率也比较大,比如:
        The cat is walking in the bedroom.
        A dog was running in a room.
如果第一句话里的元组在语料中出现的很多,训练充分,第二句话中的元组在语料中出现的少,训练不充分,那么使用语言模型计算第一句话的概率就比较高,而第二句话的概率就低。 如果有一种方法,能知道The和a相似,cat和dog相似等等,并且会给相似的词类似的语言模型概率,那么第二句话也可以得到高概率。Bengio 提出通过一个三层神经网络来构建语言模型和词向量,同样也是 n-gram 模型,并且自带数据平滑功能。

网络的第三层(输出层)一共有 |V| 个节点,每个节点 yi 表示 下一个词 i 的未归一化 log 概率。最后使用 softmax 激活函数将输出值 y 归一化成概率,

                                                       

y 的计算公为:

                                          

式子中的 U (一个 |V|×h 的矩阵)是隐藏层到输出层的参数,整个模型的多数计算集中在 U 和隐藏层的矩阵乘法中。式子中还有一个矩阵 W (|V|×(n−1)m ),这个矩阵包含了从输入层到输出层的直连边。

利用梯度下降法进行求解:

                                           

需要注意的是,一般神经网络的输入层只是一个输入值,而在这里,输入层 x 也是参数(存在 C 中),也是需要优化的。优化结束之后,词向量和语言模型都有了。

算法缺点:Most of the research work did focus on overcoming practical problems when using these attractive models: the computational complexity was originally too high for real world tasks. It was reported by Bengio in 2001 that training of the original neural net language model took almost a week using 40 CPUs for just a single training epoch (and 10 to 20 epochs were needed for reaching optimal results), despite the fact that only about 14M training words were used (Associated Press News corpus), together with vocabulary reduced to as little as 18K most frequent words. Moreover, the number of hidden neurons in the model had to be restricted to just 60, thus the model could not have demonstrated its full potential. Despite these limitations, the model provided almost 20% reduction of perplexity over a baseline n-gram model, after 5 training epochs.

在这基础上,后面就有了很多研究,当然现在最火的就是MikolovTomáš.Statistical Language Models based on NeuralNetworks. PhD thesis, Brno University of Technology. 2012,以及以此为基础,研发出来的Word2vec工具,这个我们下期再讲!

这里要感谢很多前辈,我这个也是在他们基础上的一个加工,主要是:

http://licstar.net/archives/328?replytocom=1038

http://www.cnblogs.com/wowarsenal/p/3293586.html

还有很多微博,这里没有记录下来的请大家见谅!



0 0
原创粉丝点击