目录
目录
1.n-gram
一句话由许多词构成,例如:“I love NanJing University”。在语言模型里面,我们常常将某句话生成的看做是一个概率事件。我们脑海里常常构思的语言句子,那么其出现的频数也比较多,发生概率就大,胡言乱语的语句频数少,发生的概率也较小。但是从句子粒度上考虑是欠妥的,因为句子的表达式丰富多彩的:例如:“I like NanJing University”。不过可以发现,句子表达可能是无穷无尽的,但是表示句子的词语(单词)是有限的。这里我们暂且将词语认为就是构句子的原子(即最小粒度),若有所有词语的概率,然后用词语的联合分布去表示一句话,那么所有的句子就都可以为被我们表示。
因此,基于这个想法,我们可以将上面的那个例子:
这样,任何一段话的我们都可以用词的联合分布来表示。但是这样也存在一个问题,就是上式中的链式法则越往后越稀疏,如“I love NanJing”这样的句子在文章中几乎就可以理解为一句话了,这段话在文中中出现的概率几乎是0了,更不用说在其发生下的情况下再接着跟着一个“University”。这就不得不用到我们的马尔科夫假设了:
即当前事件的发生仅仅与前一时刻发生的事情有关,即
这样,“NanJing University”同时出现的概率要比"I love NanJing University"大的多,这很大程度上缓解了数据稀疏性带来的影响,当然也有一些平滑的手段来缓解数据稀疏的问题,这里不去过多讨论。那么,刚才的例子,我们就可以表示为:
这样与前面1个词有关的我们称为一阶马尔科夫假设(2-gram),若与前面2个词有关则为二阶马尔科夫假设(3-gram)。而具体的概率计算则为:
其中count函数表示语料库中单词出现的次数,V表示为预料中所有的单词。而条件概率函数函数的计算如下:
2.神经网络语言模型
不像图像,其本身输入到计算机中是矩阵,矩阵里的数字就隐含了其各种各样的特征,这些特征可以通过模型去学习和捕捉。而文本的输入,是字符串,这是计算机处理不了的,所以当初人们首先想到的就是独热编码,第一是这样就可以将文本转化为数字,计算机能进行处理;第二就是每个词都可以独一无二的被表示。但是这种表示丢失了词的一个很重要的特征,即语义。为了进行语义信息,联想到了分布式表示,分布式表示一个很重要的核心思想是:语义相近的词在高纬度上是相互接近的。这里用一个简单的例子来感受一下分布式表示的魅力:
比如,我们要表示三样东西“红色的正三角形”,“红色的圆正方形”,“绿色的正三角形”,如果用one-hot编码表示,则分别为[1,0,0],[0,1,0],[0,0,1]。可以发现若这样表示,三个向量在三维空间上彼此正交,其之间的潜在特征将会因为这样的表示而消失。若我们在3维空间上,第一个维度空间表示颜色(红色0绿色1),第二个维度空间上表示圆和正(正0圆1),第三个维度空间上表示形状(三角形0正方形1),那么此时这三个向量可以表示为[0,0,0],[0,1,1],[1,0,0],我们发现,这三个向量彼此之间就存在了联系,若在来一个“绿色的圆三角形”,我们也可以轻松的表示为 [1,1,0],而不是独热编码的所有向量由三维变成思维。这也是独热编码的另一个致命缺陷,数据过于稀疏。
下面一个重点问题就是,到底如何用分布式表示来表示词呢,也可以说是词表征问题。最原始的做法就是神经网络语言模型(Neural network language model,nnml),其一个精华部分在于:表面上模型用于预测下一个词,但其目的在于通过训练任务,使得训练后的语义接近的词向量在高纬空间上相互接近。nnml具体的构造如下:


还是以上面的例子“I love NanJing University”为例(假设我们的语料库也只有这一句话,4个单词),此时假设我们输入前面三个“I love NanJing”,来预测“University”。我们可以发现网络一共大致可以看做有四层,分别为输入层、投影层、隐藏层、以及输出层,左图也可以清晰的有四层,以下我们一层一层解析,并且分析每层的复杂度:
输入层:输入层输入的是词的one-hot编码,那么我们输入的三次词分别是:
当然我们在真正计算的时候,肯定是以一个矩阵的形式,因此我们将输入合并写在一起则是:
为什么输入要进行one-hot编码呢?这是为了投影层所服务,投影层为细说这样的好处,现在我们就先简单知道输入层是每个词的one-hot编码,那么我们的输入。此层无参数,复杂度为0。
投影层:顾名思义,就是找出每个词向量在这一层的投影,投影层经历了一个线性变化:

本文深入探讨了n-gram、神经网络语言模型(nnml)及其优化方法word2Vec。介绍了n-gram的马尔科夫假设以及数据稀疏性问题,然后详细阐述了nnml的结构和复杂度问题。接着,重点讲解了word2Vec的cbow和skip-gram模型,以及它们如何解决nnml的复杂度问题。此外,还讨论了负采样、重采样和层序softmax等训练技巧,以提高模型效率和性能。


被折叠的 条评论
为什么被折叠?



