选择最可能的句子(Picking the most likely sentence)

来源:Coursera吴恩达深度学习课程

seq2seq机器翻译模型和我们在之前学习的语言模型之间有很多相似的地方,但是它们之间也有许多重要的区别,让我们来具体看看。

如上图第一行,是一个条件语言模型(conditional language model),这个模型可以估计句子的可能性,也可以用它来生成一个新的句子,输入x^<1>和x^<2>,那么x^<2> = y^<1>,但是x^<1>和x^<2>等在这里并不重要。为了让图片看起来更简洁,先把它们抹去,如果定义x^<1>为一个全为0的向量,然后x^<2>和x^<3>等都等于之前所生成的输出,这就是所说的语言模型。

上图第二行是机器翻译模型(machine translation model)用绿色表示encoder网络(编码网络),紫色表示decoder网络(解码网络)。注意到decoder网络(紫色部分)看起来和刚才所画的语言模型几乎一模一样,机器翻译模型其实和语言模型很相似,不同在于语言模型总是以零向量(上图中的a^<0>)开始,而encoder网络(绿色部分)会计算出一系列向量来表示输入的句子。有了这个输入句子,decoder网络(紫色部分)以这个句子开始,而不是以零向量开始,因此这个模型叫做条件语言模型(conditional language model)。相比语言模型,输出任意句子的概率,翻译模型会输出句子的英文翻译,这取决于输入的法语句子。换句话说,我们将估计一个英文翻译的概率,比如估计这句英语翻译的概率,"Jane is visiting Africa in September.",这句翻译是取决于法语句子,"Jane visite I'Afrique en septembre.",这就是英语句子相对于输入的法语句子的可能性,所以它是一个条件语言模型。

如上图,假如你想真正地通过模型将法语翻译成英文,通过输入的法语句子模型将会告诉你各种英文翻译所对应的可能性。在这里x是法语句子"Jane visite l'Afrique en September.",而它将告诉你不同的英语翻译所对应的概率。显然我们不想让它随机地进行输出,如果从这个分布中进行取样得到P(y|x),可能取样一次就能得到很好的翻译,"Jane is visiting Africa in September."。但是也可能得到这个截然不同的翻译,"Jane is going to be visiting Africa in September.",这句话听起来有些笨拙,但它不是一个糟糕的翻译,只是不是最好的而已。当然也可能得到这个翻译,"In September, Jane will visit Africa.",或者有时候你还会得到一个很糟糕的翻译,"Her African friend welcomed Jane in September."。所以当我们使用这个模型来进行机器翻译时,并不想从得到的分布中进行随机取样,而是找到一个英语句子y使得条件概率最大化(maximizes that conditional probability)。所以在开发机器翻译系统时(in developing a machine translation system),需要想出一个算法,用来找出合适的y值,使得该项最大化,而解决这种问题最通用的算法就是束搜索(Beam Search),之后会见到它。

不过在了解束搜索之前,思考一下,为什么不用贪心搜索(Greedy Search)呢?

贪心搜索是一种来自计算机科学的算法,生成第一个词的分布以后,它将会根据你的条件语言模型挑选出最有可能的第一个词进入你的机器翻译模型中,在挑选出第一个词之后它将会继续挑选出最有可能的第二个词,然后继续挑选第三个最有可能的词,这种算法就叫做贪心搜索,但是你真正需要的是一次性挑选出整个单词序列,从y^<1>、y^<2>到y^<T_y>来使得整体的概率最大化。所以这种贪心算法先挑出最好的第一个词,在这之后再挑最好的第二词,接着再挑第三个,这种方法其实并不管用,我们来考虑下面两种翻译来证明这个观点。

第一行翻译明显比第二行好,所以我们希望机器翻译模型会说第一个句子的P(y|x)比第二个句子要高,第一个句子对于法语原文来说更好更简洁。但如果贪心算法挑选出了"Jane is"作为前两个词,因为在英语中going更常见,于是对于法语句子来说"Jane is going"相比"Jane is visiting"会有更高的概率作为法语的翻译,所以很有可能如果你仅仅根据前两个词来估计第三个词的可能性,得到了going,最终将会得到一个欠佳的句子(a less optimal sentence),在P(y|x)模型中这不是一个最好的选择。

这种说法可能比较粗略,但确实是一种广泛的现象(a broader phenomenon),当我们想得到单词序列y^<1>、y^<2>一直到最后一个词总体的概率时,一次只挑选一个词并不是最佳的选择。当然在英语中各种词汇的组合数量有很多。假设你的字典中有10,000个单词,并且你的翻译可能有10个词,那么可能的组合数就是10,000的10次方,这仅仅是10个单词的情况,从这样大一个字典中来挑选单词,所以可能的句子数量非常巨大,不可能去计算每一种组合的可能性。最常用的办法就是用一个近似的搜索算法,这个近似的搜索算法做的就是它会尽力地,尽管不一定总会成功,但它将挑选出句子y使得条件概率最大化,尽管它不能保证找到的y值一定可以使概率最大化。

以上就是机器翻译的内容,它可以用来解决条件语言模型问题,这个模型和之前的语言模型的一个主要区别就是,之前的模型随机生成句子,而该模型寻找最有可能的英语句子,最可能的英语翻译,但是可能的句子组合数量过于巨大,无法一一列举,因此我们需要一种合适的搜索算法,接下来文章可以看到。

说明:记录学习笔记,如果错误欢迎指正!转载请联系我。

猜你喜欢

转载自blog.csdn.net/csdn_xmj/article/details/119114915