处理测试数据集中新术语的策略

Startegies to deal with new terms in test data set

我正在使用 word2vec 模型在训练数据集上构建分类器,想知道处理测试数据中看不见的术语(单词)的技术是什么。

删除新术语似乎不是最佳方法。 我目前的想法是在组合数据集(训练+测试)上重新计算 word2vec,并用训练数据集中最近的单词替换新术语(或者可能是 2-3 个最近的线性组合)。听起来有点棘手,但应该是可行的。

你遇到过类似的问题吗?任何idea/suggestion如何处理看不见的条款?

首先,您确定删除未知术语很糟糕吗? (你试过了吗?)如果你的训练数据中没有这些术语的例子,它们可能不会那么常见或重要——至少在你有更多的训练数据以及它们的使用的许多不同例子之前不会。即使它们是相关的,除非你前面有很多例子,否则你无法了解它们的重要性。

正如您所注意到的,您可以 re-train 一个包含新示例的 Word2Vec 模型,从而对未知单词所属的位置有一些模糊的了解。可以想象,然后 re-train 任何使用所有新 word-vectors 的下游分类器,或者将 new-word 投射回原始 space。 (这可以使用类似于 Exploiting Similarities among Languages for Machine Translation 论文第 4 节中描述的方法,只是现在你的两个 'languages' 是新单词前后的模型(s) 被添加了。)但是如果你只是从几个这样的 word-occurrences 开始工作,或者可能在一个新的文本中工作,你将学到的关于这个词的一切都已经是周围可用词的函数到你的分类器,所以收益可能非常小。 (也就是说,只有来自其他地方的许多不同示例的更重要的含义才可能增加对新文本的理解,超出其现有上下文。)

word2vec 的一些变体,如 Facebook 的 fastText,也学习单词片段的向量。将它们组合起来构成完整的词向量。然后以后遇到新的out-of-original-vocabulary个词,就可以把共享的片段合成word-vectors个。当新词在形态上与已知词相关时,这种策略就可以了。所以你可能想看看 FastText。 (它还有一种模式,其中 classification-labels 被混合到 word-vector 训练中,这可以使 word-vectors 更好地用于以后在相同标签中的分类。)

我用这个技巧来解决看不见的单词。在训练期间,我用特殊的 UNKNOWN_WORD_TOKEN(类似于 "<unk>")替换了火车语料库中的低频词(在整个火车语料库中出现一次或两次)。现在,我让 word2vec 训练并获得 "<unk>" 的表示,并在测试中遇到看不见的单词时使用它。希望这有帮助。