我是NLP的新手。我目前正在特定领域中构建NLP系统。在对文档训练了word2vec和fasttext模型后,我发现嵌入效果不是很好,因为我没有提供足够数量的文档(例如,嵌入看不到“ bar”和“ pub”与彼此,因为“ pub”仅在文档中出现一些)。后来,我发现了一个在线的word2vec模型,该模型建立在特定领域的语料库上,该模型肯定具有更好的嵌入方式(因此“ pub”与“ bar”更多相关)。有什么方法可以使用我发现的模型来改善我的单词嵌入?谢谢!
答案 0 :(得分:1)
Word2Vec(和类似的模型)确实需要大量不同的数据来创建强大的向量。
但是,模型的向量通常仅与在同一会话中一起训练的其他向量一起才有意义。这都是因为该过程包括一些随机性,并且向量仅通过与所有其他向量和训练模型各方面的拔河来获得其有用的位置。
因此,没有类似“ bar”这样的词的标准位置-在特定模型中,只要训练数据和模型参数以及其他词共同填充模型,该位置就很好。
这意味着来自不同模型的混合向量是不平凡的。有很多方法可以学习将向量从一个模型的空间移动到另一个模型的“转换”,但这本身就很像重新训练。您可以使用来自其他地方的向量来预先初始化模型...但是一旦训练开始,训练语料库中的所有单词将开始漂移到该数据的最佳对齐方式,并逐渐远离其原始位置,并远离与未更新的其他字词具有纯可比性。
我认为,最好的方法通常是使用更适当的数据扩展语料库,以使它在足够不同的上下文中具有对您重要的每个单词的“足够”的示例。
许多人使用诸如Wikipedia文章之类的大型自由文本转储来进行单词矢量培训,但要注意,其写作风格(干燥,权威的参考文本)可能并非在所有领域都适用。如果您的问题区域是“业务评论”,则可能最好找到其他评论文本。如果是小说故事,则更多是虚构的作品。依此类推。您可以将其他文本输入与数据混在一起以扩大词汇范围。
如果您希望自己的本地数据有效地发挥更大的影响力,还可以随机整理额外个重复的本地数据示例。 (通常,仅重复少数几个不变的示例并不能帮助改善单词向量:这是不同示例之间的微妙对比,但有帮助。但是,当有很多示例不胜枚举时,作为一种逐步增强某些示例的影响力的方法总体来看,可能更有意义。)