【问题标题】:What's the point to have a UNK token for out of vocabulary words during decoding?在解码过程中为词汇表外的单词使用 UNK 标记有什么意义?
【发布时间】:2020-02-22 08:04:03
【问题描述】:

首先,我知道这个问题有点离题,但我已经尝试在其他地方提问,但没有得到回应。

在词汇表中添加UNK 标记是处理 NLP 任务中 oov 单词的常规方法。将它用于编码是完全可以理解的,但是将它用于解码有什么意义呢?我的意思是您永远不会期望您的解码器在预测期间生成UNK 令牌,对吧?

【问题讨论】:

    标签: neural-network deep-learning nlp machine-translation


    【解决方案1】:

    根据您预处理训练数据的方式,您可能在训练期间需要UNK。即使你使用 BPE 或其他子词分割,OOV 也会出现在训练数据中,通常是一些奇怪的 UTF-8 东西、字母的片段,你根本不感兴趣等等。

    例如,如果您将 WMT 训练数据用于英德翻译,进行 BPE 并获取词汇表,您的词汇表将包含数千个在训练数据中恰好出现一次的汉字。即使您将它们保留在词汇表中,模型也没有机会了解它们,甚至没有机会复制它们。将它们表示为UNKs 是有意义的。

    当然,你通常在推理的时候做的是你阻止模型预测UNK令牌,UNK总是不正确的。

    【讨论】:

    • 那么将这些奇怪的代币映射到 UNK 对我们有什么好处?在我看来,这可以帮助我们减少解码过程中的一些成本,而不会浪费时间为那些奇怪的令牌计算 logits。我说得对吗?
    • 是的,你是对的。它只是为您在准备训练数据时省去了很多麻烦。
    【解决方案2】:

    我曾在以下情况下使用过一次:

    我有一个预处理的 word2vec(glove.6b.50d.txt) 并且我正在输出一个嵌入的向量,为了将其转换为一个词,我使用基于 word2vec 中所有向量的余弦相似度,如果最相似的向量是我会输出它。

    也许我只是在这里猜测它,但我认为可能会在幕后发生的是它根据之前的单词进行预测(例如,它预测 3 次迭代前出现的单词)以及该单词是否是神经网络输出它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2018-01-07
      相关资源
      最近更新 更多