为什么使用神经网络训练得到的语言模型不需要做数据平滑

版权声明:本文为博主jmh原创文章,未经博主允许不得转载。 https://blog.csdn.net/jmh1996/article/details/83001702

我们都知道,在自然语言处理的语言模型里面,最核心的就是计算得到一个句子的概率,为了得到这个概率,我们需要计算得到一系列的条件概率。这些条件概率就是整个语言模型的参数。
为了得到条件概率,我们可以有两种不同的方法。
第一种就是使用统计概率方法,通过统计的方法得到不同的词对的条件概率。这种方式简单易行,但是此类方式很容易因为语料库的稀疏,而导致某些词对并没有出现在语料库而导致某些条件概率为0。
举个栗子:
给定以下语料:

John read a book.
Tom read a novel.
A novel was read by Catter.
Cherry was singing a song.
John was singing a song.
Tom was singing a song.

当计算S=Cherry read a book,这个句子的概率的时候,我们需要对P(read|Cherry)这个条件概率进行平滑,否则这个概率就为0了。
为了解决条件概率为0的问题,人们提出了一系列条件概率数据平滑方法。
因此,语料稀疏导致的某些词对没有出现而使得该词对的条件概率为0,进而采用数据平滑处理。
第二种方式则基于神经网络的方法来得到这些词对的条件概率。使用神经网络的方法进行训练的时候,一方面,我们可以得到语言模型(即那一堆条件概率),另一方面我们也自然而然地获得了这些词的词向量。当获得这些词向量,那就好办了。这些词向量是具有语义相关性的。因此,针对上面的语料库,我们会发现最终John,Tom,Cherry这些词的词向量是很相近的。于是当我们想通过神经网络获取条件概率P(read|Cherry)的时候,我们输入的是Cherry的词向量,尽管语料库没有出现Cherry read 这样的词对,模型依然会认为我们输入了一个类似于John和Tom那样的词,而John read 和 Tom read是在语料库出现过的。进而,P(read|Cherry)无需额外平滑也不为0 。

猜你喜欢

转载自blog.csdn.net/jmh1996/article/details/83001702
今日推荐