【发布时间】:2020-02-22 08:04:03
【问题描述】:
首先,我知道这个问题有点离题,但我已经尝试在其他地方提问,但没有得到回应。
在词汇表中添加UNK 标记是处理 NLP 任务中 oov 单词的常规方法。将它用于编码是完全可以理解的,但是将它用于解码有什么意义呢?我的意思是您永远不会期望您的解码器在预测期间生成UNK 令牌,对吧?
【问题讨论】:
标签: neural-network deep-learning nlp machine-translation
首先,我知道这个问题有点离题,但我已经尝试在其他地方提问,但没有得到回应。
在词汇表中添加UNK 标记是处理 NLP 任务中 oov 单词的常规方法。将它用于编码是完全可以理解的,但是将它用于解码有什么意义呢?我的意思是您永远不会期望您的解码器在预测期间生成UNK 令牌,对吧?
【问题讨论】:
标签: neural-network deep-learning nlp machine-translation
根据您预处理训练数据的方式,您可能在训练期间需要UNK。即使你使用 BPE 或其他子词分割,OOV 也会出现在训练数据中,通常是一些奇怪的 UTF-8 东西、字母的片段,你根本不感兴趣等等。
例如,如果您将 WMT 训练数据用于英德翻译,进行 BPE 并获取词汇表,您的词汇表将包含数千个在训练数据中恰好出现一次的汉字。即使您将它们保留在词汇表中,模型也没有机会了解它们,甚至没有机会复制它们。将它们表示为UNKs 是有意义的。
当然,你通常在推理的时候做的是你阻止模型预测UNK令牌,UNK总是不正确的。
【讨论】:
我曾在以下情况下使用过一次:
我有一个预处理的 word2vec(glove.6b.50d.txt) 并且我正在输出一个嵌入的向量,为了将其转换为一个词,我使用基于 word2vec 中所有向量的余弦相似度,如果最相似的向量是我会输出它。
也许我只是在这里猜测它,但我认为可能会在幕后发生的是它根据之前的单词进行预测(例如,它预测 3 次迭代前出现的单词)以及该单词是否是神经网络输出它。
【讨论】: