如何初始化词嵌入以处理词汇表外的词?

我正在尝试使用CoNLL-2003 NER(英语)数据集,并希望利用预训练的嵌入。我使用的是SENNA预训练嵌入。现在我的词汇表中有大约2万个词,其中只有9500个词有可用的嵌入。
我的当前方法是初始化一个20k X embedding_size的数组,并将其全部置为零,然后初始化那9500个我已知嵌入的词,并使所有嵌入可学习。

我的问题是,有没有更好的方法来做这件事?任何相关的研究所引用的资料都将非常有帮助?


回答:

我建议采用以下三种方法来解决这个问题,每种方法都有其独特的优势:

  • 不使用SENNA嵌入,尝试使用FastText嵌入。其优势在于可以利用字符n-gram来推断词汇表外(OOV)词的嵌入。具体的方法可以在相关论文中找到。Gensim已经实现了所有需要的功能。这将大大减轻问题,你还可以进一步微调这些推断出的嵌入,如你所述。缺点是你需要从Senna切换到FastText。
  • 尝试使用形态学或语义相似性来初始化OOV词。对于形态学,我指的是使用像Levenshtein距离这样的方法来选择嵌入。对于一个像apple这样的OOV词,选择最接近的(根据Levenshtein距离)你已有嵌入的词,例如apples。根据我的经验,这种方法效果显著。另一方面,语义相似性建议使用例如来自WordNet的同义词,或者平均计算OOV词经常与之共现的词的嵌入。
  • 在通过上述方法减少稀疏性之后,再进行随机初始化,如其他回答中所讨论的。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注