4.机器翻译
RNN-LM¶
Language Model是给定一个词汇序列,生成下一个词汇概率的模型,使用RNN的LM就叫做RNN-LM。如下,整个序列的信息通过hidden
state传递,每次输入上次输出的单词,输出下一个单词。
如下是将encoder加入的翻译器结构。
训练¶
RNN-LM 通常通过最大化训练语料库的似然来训练。这等价于最小化负对数似然(也就是交叉熵损失)。在每个时间步,模型预测下一个词的概率分布,并将其与实际的下一个词进行比较,计算损失。使用反向传播算法的变体 BPTT (Backpropagation Through Time) 来计算梯度并更新模型参数。 最开始,可以使用Teacher Forcing进行训练,给decoder输入一些“金句”,即参考句子,不管它输出什么。
decode算法¶
现在我们训好了一个LM,可以预测下一个词汇的概率,但我们该怎么用它生成一个句子呢?在decoder中,该怎么决定每次输出哪个呢?
Greedy Search (贪婪搜索)¶
方法: 在每个时间步,总是选择概率最高的那个词 (argmax)。
问题:太过确定,总会选择高频词,不会选择冷门词汇,并且容易陷入循环。
和argmax区别:argmax 是 Greedy Search 在每一步决策时使用的具体工具,而 Greedy Search 是使用这个工具来构建完整序列的策略。
Random Sampling (纯随机采样)¶
方法:如其名,随机选。。
问题:全是问题
Top-K Sampling (Top-K 采样)¶
方法: 在每个时间步,只考虑概率最高的 K 个词。将这 K 个词的原始概率(或经过温度调整后的概率)重新归一化,然后从这个缩小的集合中进行采样。
问题:K在不同情况下的最优值不一样,但是作为超参数,我们只能让其为固定值。
Top-P Sampling (Nucleus Sampling / 核心采样)¶
方法: 选择一个概率阈值 p (例如 p=0.9)。在每个时间步,按概率降序排列词汇,然后选择概率之和刚好大于或等于 p 的最小词汇集合。然后,将这个集合中的词的概率重新归一化,并从中采样。
问题: 仍然需要选择合适的 p 值,但通常比选择 K 更鲁棒一些。
Pure sampling¶
方法: 选择一个概率阈值 p (例如 p=0.9)。在每个时间步,按概率降序排列词汇,然后选择概率之和刚好大于或等于 p 的最小词汇集合。然后,将这个集合中的词的概率重新归一化,并从中采样。
问题: 仍然需要选择合适的 p 值,但通常比选择 K 更鲁棒一些。
Beam search decoding¶
每一步,只留k个最可能的项,k=1是就是贪婪算法。
Softmax temperature¶
在传统softmax中加入了温度t,将每个概率先除以t,在作为指数进行softmax。
- T > 1:不同概率彼此之间的差距相对缩小了,低概率选项也有了更高的被采样机会,生成的序列会更加多样化。
- T < 1:模型会更倾向于选择它认为最可能的选项。生成的序列会更加保守、可预测,更接近于模型的“核心”知识。
就像deepseek的api文档里,编程t=0,分析t=1,诗歌创作t=1.5。
评估¶
人工评估¶
准确全面,但昂贵耗时主观。
BLEU¶
比较机器翻译输出(Candidate)和一个或多个高质量的人工参考翻译(References)之间n-gram(通常是 1 到 4-gram)的重叠程度。
计算方法:
-
计算各阶 n-gram 精度 (Precision): 对于 n=1, 2, 3, 4,计算候选译文中 n-gram 出现在 任一 参考译文中的比例。
-
修正精度 (Modified Precision): 为了防止某个词重复出现过多而获得不合理的高分,一个候选 n-gram 的计数不能超过它在 任何单个 参考译文中出现的最大次数(Clipped Count)。
-
短句惩罚 (Brevity Penalty, BP): 如果Candidate译文比Ref译文短很多,即使精度很高,也可能遗漏了信息。BP 会惩罚过短的句子。BP <= 1,当候选译文长度接近或超过最短参考译文长度时,BP=1。
-
最终得分: BLEU = BP * geometric_mean(p1, p2, p3, p4)
但是,在句子级别 (Sentence Level) 相关性差,且不关心语义,语法。
METEOR¶
类似BLEU,但是:
- 考虑同义词和词干:比 BLEU 更懂语义。
- 考虑词序 (通过碎片惩罚): 对语序不佳的翻译会扣分。
Perplexity (PPL)¶
衡量一个语言模型对一段给定文本的预测能力。PPL 越低,表示 LM 认为这段文本出现的概率越高,也就是越符合该 LM 所学习到的语言模式。
Statistic Machine Translation¶
统计机器翻译(SMT):最初是算词库中,所有词哪个概率最大;或者对于一句话,另一个语言中哪个句子概率最大
ê = argmax_e P(e|f)
ê
是我们找到的最佳翻译结果。argmax_e
表示在所有可能的目标语言句子 e 中寻找。P(e|f)
是“给定源语言句子 f,目标语言句子 e 是其正确翻译的概率”。然而它很难精确求解。
这时用到贝叶斯公式:P(e|f) = [ P(f|e) * P(e) ] / P(f)
,P(f)
是常数,因为翻译的句子已经给出,此时之前的公式变成
ê = argmax_e P(f|e) * P(e)
。
此公式是SMT的基石。它将翻译问题分解成了两个部分:
- 翻译模型 (Translation Model) -
P(f|e)
:
给定一个目标语言句子 e,它对应回源语言句子 f 的概率是多少?
通过Alignment,词对齐,或者短语对齐来求。
-
语言模型 (Language Model) -
P(e)
:目标语言句子 e 本身有多么流利 (Fluency) 和自然?一个语法正确、符合目标语言表达习惯的句子,其概率
P(e)
会更高。通过N-gram计算, 它假设一个词出现的概率主要取决于它前面紧邻的 N-1 个词。
- 计算: 整个句子 e 的概率
P(e)
通过链式法则近似计算为各个 N-gram 概率的乘积。例如,P(w₁, w₂, ..., wₙ) ≈ P(w₁) * P(w₂|w₁) * P(w₃|w₁, w₂) * ... * P(wₙ|wₙ₋₁, wₙ₋₂)
.
训练: 语言模型通过分析大量的单语语料库(只需要目标语言的文本)来学习词语序列的出现频率,从而估计 N-gram 概率。
- 计算: 整个句子 e 的概率
最后,还要接上一个解码器,它是一个搜索算法,它的任务是在巨大的可能翻译空间中,找到那个能够最大化 P(f|e) * P(e)
乘积的目标句子 e。
- Neural Network
进入attention了
Q是把输入转化成我们关心的方面的信息,如是词性?
解码并行不了,所以很多都只有encoder