在解码过程中为词汇表外的单词使用 UNK 标记有什么意义?
What's the point to have a UNK token for out of vocabulary words during decoding?
首先,我知道这个问题有点跑题,但我已经尝试在别处问过,但没有得到回应。
在词汇表中添加一个UNK
标记是NLP任务中处理oov词的常规方式。用它来编码完全可以理解,但是用它来解码有什么意义呢?我的意思是你永远不会期望你的解码器在预测期间生成一个 UNK
令牌,对吧?
我曾在以下情况下使用过一次:
我有一个预处理的 word2vec(glove.6b.50d.txt) 并且我正在输出一个嵌入的向量,为了将它转换成一个词,我使用基于 word2vec 中所有向量的余弦相似度,如果最相似的矢量是我会输出它。
也许我只是在这里猜测,但我认为在幕后可能发生的事情是它根据之前的词进行预测(例如,它预测出现在 3 次迭代前的词)并且如果该词是神经网络net 输出它。
根据您预处理训练数据的方式,您可能在训练期间需要 UNK
。即使你使用BPE或者其他分词,训练数据中也会出现OOV,通常是一些奇怪的UTF-8东西,字母表的碎片,你根本不感兴趣等等
例如,如果您使用 WMT 训练数据进行英德翻译,进行 BPE 并使用词汇表,您的词汇表将包含数千个在训练数据中恰好出现一次的汉字。即使您将它们保留在词汇表中,模型也没有机会了解它们,甚至无法复制它们。将它们表示为 UNK
s.
是有意义的
当然,你通常在推理时做的是你阻止模型预测UNK
个标记,UNK
总是不正确的。
首先,我知道这个问题有点跑题,但我已经尝试在别处问过,但没有得到回应。
在词汇表中添加一个UNK
标记是NLP任务中处理oov词的常规方式。用它来编码完全可以理解,但是用它来解码有什么意义呢?我的意思是你永远不会期望你的解码器在预测期间生成一个 UNK
令牌,对吧?
我曾在以下情况下使用过一次:
我有一个预处理的 word2vec(glove.6b.50d.txt) 并且我正在输出一个嵌入的向量,为了将它转换成一个词,我使用基于 word2vec 中所有向量的余弦相似度,如果最相似的矢量是我会输出它。
也许我只是在这里猜测,但我认为在幕后可能发生的事情是它根据之前的词进行预测(例如,它预测出现在 3 次迭代前的词)并且如果该词是神经网络net 输出它。
根据您预处理训练数据的方式,您可能在训练期间需要 UNK
。即使你使用BPE或者其他分词,训练数据中也会出现OOV,通常是一些奇怪的UTF-8东西,字母表的碎片,你根本不感兴趣等等
例如,如果您使用 WMT 训练数据进行英德翻译,进行 BPE 并使用词汇表,您的词汇表将包含数千个在训练数据中恰好出现一次的汉字。即使您将它们保留在词汇表中,模型也没有机会了解它们,甚至无法复制它们。将它们表示为 UNK
s.
当然,你通常在推理时做的是你阻止模型预测UNK
个标记,UNK
总是不正确的。