> For the complete documentation index, see [llms.txt](https://baozoulin.gitbook.io/neural-networks-and-deep-learning/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://baozoulin.gitbook.io/neural-networks-and-deep-learning/di-wu-men-ke-xu-lie-mo-xing-sequence-models/di-wu-men-kexulie-mo-578b28-sequence-models/di-san-zhou-xu-lie-mo-xing-he-zhu-yi-li-ji-zhi-ff08-sequence-models-and-attention-mechanism/32-xuan-ze-zuike-neng-de-ju-zi-ff08-picking-the-most-likely-sentence.md).

# 3.2 选择最可能的句子（Picking the most likely sentence）

**seq2seq**机器翻译模型和第一周所用的语言模型之间有很多相似的地方，但也有许多重要的区别：

可以把机器翻译想成是建立一个条件语言模型，能够估计句子的可能性

[![](https://github.com/fengdu78/deeplearning_ai_books/raw/master/images/a8b8c64483ee84d57135829ab025da53.png)](https://github.com/fengdu78/deeplearning_ai_books/blob/master/images/a8b8c64483ee84d57135829ab025da53.png)

绿色（编号2）表示**encoder**网络，紫色（编号3）表示**decoder**网络。不同在于语言模型总是以零向量（编号4）开始，而**encoder**网络会计算出一系列向量（编号2）来表示输入的句子，以这个向量作为输入，这叫做条件语言模型（**conditional language model**）

相比语言模型输出任意句子的概率，翻译模型会输出句子的英文翻译（编号5），这取决于输入的法语句子（编号6）。即估计一个英文翻译的概率，比如估计"**Jane is visiting Africa in September.**"翻译的概率，这句翻译是取决于法语句子，"**Jane visite I'Afrique en septembre.**"，这就是英语句子相对于输入的法语句子的可能性，是一个条件语言模型

[![](https://github.com/fengdu78/deeplearning_ai_books/raw/master/images/fd97f885fe1e6e1a7c70bb965595210a.png)](https://github.com/fengdu78/deeplearning_ai_books/blob/master/images/fd97f885fe1e6e1a7c70bb965595210a.png)

> 模型将法语翻译成英文，通过输入的法语句子模型将会告诉你各种英文翻译所对应的可能性

$$x$$是法语句子"**Jane visite l'Afrique en septembre.**"，它将告诉你不同的英语翻译所对应的概率：从这个分布中进行取样得到$$P(y|x)$$，但不是从得到的分布中进行随机取样，而是要找到一个英语句子$$y$$（编号1），使得条件概率最大化：

$$
max\ P(y^{<1>},y^{<2>},\cdots,y^{\<T\_y>}|x^{<1>},x^{<2>},\cdots,x^{\<T\_x>})
$$

而解决这种问题最通用的算法就是束搜索(**Beam Search**)

为什么不用贪心搜索(**Greedy Search**)：

贪心搜索生成第一个词的分布以后，将会根据条件语言模型挑选出最有可能的第一个词进入机器翻译模型中，在挑选出第一个词之后将会继续挑选出最有可能的第二个词……这种算法就叫做贪心搜索，但是真正需要的是一次性挑选出整个单词序列，从$$y^{<1>}$$、$$y^{<2>}$$到$$y^{\<T\_{y}>}$$来使得整体的概率最大化。所以贪心算法先挑出最好的第一个词，在这之后再挑最好的第二词，然后再挑第三个，这种方法并不管用

[![](https://github.com/fengdu78/deeplearning_ai_books/raw/master/images/c50a0e8948bbdb9a1d23f2f8a768bf5c.png)](https://github.com/fengdu78/deeplearning_ai_books/blob/master/images/c50a0e8948bbdb9a1d23f2f8a768bf5c.png)

第一串（编号1）翻译明显比第二个（编号2）好，但如果贪心算法挑选出了"**Jane is**"作为前两个词，因为在英语中**going**更加常见，于是对于法语句子来说"**Jane is going**"相比"**Jane is visiting**"会有更高的概率作为法语的翻译，所以如果仅仅根据前两个词来估计第三个词的可能性，得到的更可能是**going**，最终得到一个欠佳的句子

当想得到单词序列$$y^{<1>}$$、$$y^{<2>}$$一直到最后一个词总体的概率时，一次仅仅挑选一个词并不是最佳的选择。如果字典中有10,000个单词，翻译有10个词，可能的组合就有10,000的10次方这么多，从这样大一个字典中来挑选单词，句子数量非常巨大，大大增加了运算成本，降低运算速度，不可能去计算每一种组合的可能性

所以最常用的办法就是用一个近似的搜索算法，它会尽力地将挑选出句子$$y$$使得条件概率最大化，尽管不能保证找到的$$y$$值一定可以使概率最大化

机器翻译模型和之前的语言模型一个主要的区别就是：相比之前的模型随机地生成句子，该模型是找到最有可能的翻译
