neural-network - 在解码过程中为词汇表外的单词使用 UNK 标记有什么意义?
问题描述
首先,我知道这个问题有点离题,但我已经尝试在其他地方提问但没有得到回应。
在词汇表中添加UNK
标记是在 NLP 任务中处理 oov 单词的常规方法。将它用于编码是完全可以理解的,但是将它用于解码有什么意义呢?UNK
我的意思是您永远不会期望您的解码器在预测期间生成令牌,对吗?
解决方案
根据您预处理训练数据的方式,您可能需要UNK
在训练期间使用。即使你使用 BPE 或其他子词分割,OOV 也会出现在训练数据中,通常是一些奇怪的 UTF-8 东西,字母的片段,你根本不感兴趣等等。
例如,如果您将 WMT 训练数据用于英德翻译,进行 BPE 并获取词汇表,您的词汇表将包含数千个在训练数据中恰好出现一次的汉字。即使您将它们保留在词汇表中,模型也没有机会了解它们,甚至没有机会复制它们。UNK
将它们表示为s是有意义的。
当然,你通常在推理时做的是阻止模型预测UNK
标记,UNK
总是不正确的。
推荐阅读
- javascript - 根据选择的选项更改存在规则
- java - Java & MySQL - setBoolean() 方法出错
- django - 使用带有注解的 Django CheckConstraint
- python - 读取每个 url 并将其保存到单独的 pdf Python
- xamarin - 从一个详细信息页面到另一个详细信息页面时如何保存页面上的信息
- javascript - React Hooks 上的 useState 不更新数组
- python - 如果某些值是 NaN,我如何对 DataFrame 中的 2 个特定列行求和?
- angular - Ionic 4 - 在指令上获取 ElementRef 属性
- vue.js - 由于重复“请运行 npm install -g @vue/cli-upgrade 并重试”,无法升级 vue cli。
- database - 如何从 DataGridView 编辑行?MS Access 数据库