0

在基础 Transformer 模型(Vaswani 等人)上训练后解码/翻译测试数据集时,我有时会在输出中看到这个标记“unk”。

这里的“unk”指的是一个未知的令牌,但我的问题是这背后的原因是什么?基于https://nlp.stanford.edu/pubs/acl15_nmt.pdf,这是否意味着我为训练集构建的词汇不包含测试集中存在的单词?

作为参考,我为德语到英语的翻译任务构建了VocabusingSpacy en_core_web_smde_core_news_sm

示例输出:

ground truth = ['a', 'girl', 'in', 'a', 'jean', 'dress', 'is', 'walking', 'along', 'a', 'raised', 'balance', 'beam', '.']

predicted = ['a', 'girl', 'in', 'a', '<unk>', 'costume', 'is', 'jumping', 'on', 'a', 'clothesline', '.', '<eos>']

正如你所看到的,牛仔裤在这里是“unk”的。

4

1 回答 1

1

神经机器翻译模型的词汇量有限。原因是您可以通过将编码器的隐藏状态乘以每个词汇标记有一行的矩阵来获得目标词汇标记的分布。您提到的论文使用 1000 维的隐藏状态。如果您想合理地涵盖英语,则需要至少 200k 个标记的词汇表,这意味着仅此矩阵需要 800MB。

您提到的论文是 2015 年的过时解决方案,并试图找到如何使词汇量尽可能大。然而,增加词汇量似乎并不是最好的解决方案,因为随着词汇量的增加,您将越来越少见的词添加到词汇表中,并且这些词嵌入的训练信号越来越少,因此模型最终不会学会正确使用这些词。

最先进的机器翻译使用BPE 算法于 2016 年引入的子词分割。与此同时,谷歌为他们的第一个生产神经机器翻译系统提供了一个名为 WordPiece 的替代解决方案。后来,谷歌在 2018 年推出了改进的分割算法 SentencePiece

子词词汇表的主要原则是频繁词保持不变,而稀有词被分割成更小的单元。稀有词通常是没有真正翻译的专有名称。对于具有复杂形态的语言,子词分割允许模型学习如何创建相同单词的不同形式。

于 2021-10-19T08:05:23.720 回答