处理测试数据集中新术语的先例

时间:2017-02-07 11:28:34

标签: machine-learning nlp word2vec

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

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

你遇到过类似的问题吗?有任何想法/建议如何处理看不见的条款?

2 个答案:

答案 0 :(得分:0)

首先,你确定删除未知条款是如此糟糕吗? (你试过吗?)如果你的训练数据中没有这些术语的例子,它们可能不那么普遍或重要 - 至少在你有更多训练数据和许多不同的使用例子之前。即使它们是相关的,在你预先有很多例子之前,你也不能了解它们的重要性。

正如您所说,您可以重新训练包含新示例的Word2Vec模型,从而对未知单词所属的位置有一些模糊的概念。可以想象,然后使用所有新的单词向量重新训练任何下游分类器,或者将新单词投射回原始空间。 (这可以使用与 Exploiting Similarities among Languages for Machine Translation 论文第4部分中描述的方法类似的方法,但现在您的两种语言'是新词之前和之后的模型(s)被添加。)但是,如果你只是从一些这样的单词出现,或者也许只是在一个新的文本中工作,那么你所知道的关于那个单词的一切都已经是周围单词的函数了已经可用于您的分类器,因此收益可能非常小。 (也就是说,它只是来自其他地方的许多不同例子的更为重要的含义,除了现有的背景之外,它可能会增加对新文本的理解。)

word2vec的一些变体,如Facebook的fastText,也学习单词片段的向量。将它们组合起来制作完整的单词向量。然后,当稍后遇到新的原始词汇单词时,他们可以从共享片段合成单词向量。当新单词在形态上与已知单词相关时,此策略可以正常运行。所以你可能想看看FastText。 (它还有一种模式,将分类标签混合到单词矢量训练中,这可以使单词矢量更好地用于以后在相同标签中的分类。)

答案 1 :(得分:0)

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