未在训练中的新词的词嵌入

数据挖掘 nlp word2vec 词嵌入
2021-09-16 01:44:44

假设我为我的 10,000 个词汇量训练了一个 Skip-Gram 模型 (Word2Vec)。该表示允许我将维度从 10,000(单热编码)减少到 100(神经网络隐藏层的大小)。

现在假设我的测试集中有一个单词不在我的训练词汇中。什么是单词在 100 维空间中的合理表示?对我来说,我似乎无法使用我训练的神经网络来提出词嵌入。

3个回答

为“ OOV ”(词汇外)词生成词嵌入是许多标准嵌入(如 Glove 和 word2vec)的主要限制之一。不过fastText在一定程度上规避了这个问题。

与传统的方法不同,它们对每个单词都有不同的向量,而是采用字符 n-gram 级别的表示。例如,一个 n=3 的单词将由字符 n-grams 表示:

<wh, whe, her, ere, re>

和特殊序列:

< where >

这里,<> 是 n-gram 的一部分。

s(w,c)=gεGwzgTvc
这里,G表示 n-gram 字典的大小,并给定一个单词w, 然后Gw{1,...,G}表示出现在 w. 他们关联一个向量表示zg对每个 n-gramg并通过其 n-gram 的向量表示的总和来表示一个单词。

这有助于他们通过了解子词的某些表示来处理 OOV 词。例如,一个 OOV 词: sechero

3克:

<se, sec, ech, che, her, ero, ro>

因为,这些 3-gram 可能是在学习过程中通过其他已知单词遇到的,例如:

<se - section che - cheer ro> - hero

因此,它至少可以形成一些合理的嵌入,而不是返回一个无用的<UNK>

Fastext 实际上是 word2vec 的扩展,主要具有上面解释的功能。

在 Word2Vec 训练期间,如果您记得它们是一个超参数“min_count”,它表示特定单词应该存在于语料库中的最少时间。满足这个条件的词(连同其他词),被认为是词汇的一部分,否则被丢弃。

为了处理丢弃的单词,我们使用另一种单词表示,即“UNK”标记。

同样,在您的情况下,该词应被视为"UNK"

尽管您可以针对特定单词进行进一步的 Word2Vec 培训。

另一个关于处理 UNK 单词的相关帖子

有多种方法可以处理词汇表外的单词。其中一种方法肯定是 Vipin 的上述解决方案。然而,这不是唯一的方法。有一些使用子词信息来创建词汇表外向量的实现。

当您考虑业务问题时,不可能创建包含所有可能单词的词汇表来训练 word2vec 模型,而不管 SkipGram 或 CBOW 是什么。我开始欣赏的实现之一是 Facebook 在 FastText 中的实现。该实现基于本文

这是FastText的链接。

您也可以自己编写一个小型网络,通过一起实现几篇论文,将一个热点转换为您空间中的向量。

恕我直言,您需要回答的问题是,处理词汇之外的单词对您来说有多重要,它的影响是什么?