这篇文章是我的笔记分享,内容主要来自吴恩达老师的深度学习课程。^[AI中国官网-全球领先的线上AI教育、实践平台 (deeplearningai.net)]
之前我们讲到的都是这种类型的序列模型。从一个输入开始进行生成。但是在机器翻译中这个模型是不合适的。因为及其翻译是输入一句话得到另一句话,并且两句话的长度通常情况下是不一样的。
所以在机器翻译中我们的模型长这样:
换一个说法就是前一部分是encoder将内容编码,后一部分decoder进行解码,这就是序列到序列的模型。
之前我们语言模型计算时使用:
$$
P\left(y^{(1)}, \ldots, y^{\langle T y\rangle)}\right)
$$
现在我们使用:
$$
P\left(y^{(1)}, \ldots, y^{\left(T{y}\right\rangle} \mid x^{\langle 1\rangle}, \ldots, x^{\left\langle T{x}\right\rangle}\right)
$$
因为输出是要建立在输入的条件基础之上的,因此这种模型又可以称之为“conditional language model”。
简写为
$$
P\left(y^{<1>}, \ldots, y^{<T}>\mid x\right)
$$
- 其中x为输入的句子
现在我们还应该意识到一个问题,咱就是说模型出来的不可能只有一个输出。他要从众多候选中选取一个句子。
比如现在举个机器翻译的例子。
一句法语Jane visite l’Afrique en septembre.
将其翻译之后,假设最好的结果为Jane is visiting Africa in September.
但现在情况是这样的:
Jane visite l’Afrique en septembre.
→ 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
可以使用束搜索之类的算法。这里就不详细说明束搜索了。
那为什么不可以使用贪心算法呢?
因为我们在机器翻译中要做的是$\underset{y^{<1>}, \ldots, y^{<T{y}>}}{\arg \max } P\left(y^{<1>}, \ldots, y^{<T{y}>} \mid x\right)$,找到概率最大的结果进行输出。
使用贪心算法相当于从头开始逐个单词寻找最大概率。
假设依旧是一万长度的单词表。
第一个输出要从一万个中找到最大概率的Jane
。
第二步要在前边是Jane
的基础上继续从10000长度的单词表中找到is
。
第三步,在英语中,is going
明显比is visiting
更常见,因此贪心算法会认为is going
置信度更高。
以此类推,总找目前最好的选择并不一定是全局最好的选择。毕竟最后的结果 Jane is going to be visiting Africa in September.
就是不如Jane is visiting Africa in September.
来得好。
因此不能使用贪心算法。 在这里更常用的是使用近似搜索算法。