假设我有一个已经使用维基百科文章(如官方网站所述)训练过的fasttext模型。我能否用另一个语料库(如科学文献)再次训练它,以便添加新的或更相关的词语关联?特别是对于科学词汇?
简而言之,我需要维基百科提供的所有英语词语之间的经典关联。但我想通过添加特定领域的新文档来增强这个模型。有没有办法做到这一点?如果可以,有没有办法“加权”训练,使来自我自定义文档的关系“更重要”?
我的最终目标是计算非常科学的文档之间的余弦相似度(这就是为什么我考虑通过添加更多科学文档来获得更好的结果)。
回答:
使用您特定领域的训练数据来调整更通用的模型通常被称为“微调”。
gensim
中的FastText
实现允许现有模型通过新训练数据中的内容(通过build_vocab(..., update=True)
)扩展其已知词汇,然后进行进一步的训练周期,包括这些新词汇(通过train()
)。
但是,这种特定的更新形式会引入旧数据和新数据之间平衡的问题,尚无明确的最佳实践。
举个例子,原模型中没有在新数据中重复出现的标记/短语,新训练会将这些新数据中的标记/短语拉到对新数据最优的位置……但可能会与旧标记/短语的兼容性相差甚远。
此外,一些模型模式(如负采样与层次化softmax),以及某些数据组合,可能比其他方法更有可能从这种方法中受益——但您基本上需要自己敲定这些权衡,没有通用的规则可依。
(对于其他类型的模型,可能有更好的微调策略;这里只是在讨论gensim
中的FastText
更新词汇和重复训练的能力。)
但也许,您感兴趣的领域是科学文本。可能您还拥有大量代表性文本——甚至在训练时,您想要比较的论文的完整宇宙。
在这种情况下,您确定要处理从更通用的词模型开始的复杂性吗?如果您实际上已经拥有足够多样化和代表性的您领域的词汇在您领域的上下文中,为什么还要用维基百科等通用参考资料中的主导词义来污染您的分析呢?
因此,我建议首先尝试使用您自己的代表性数据来训练您自己的模型。只有在您担心缺少重要词汇/意义时,才尝试混入维基百科衍生的意义。(在这一点上,另一种混合这种影响的方法是将维基百科文本与您的其他语料库混合。您还应该准备好测试这是否真的有帮助或有害——因为它可能是两者之一。)
此外,如果您的真正目标是比较完整的论文,您可能需要研究其他文档建模策略,包括词袋表示法,gensim
中的Doc2Vec
(“段落向量”)实现,或其他方法。这些方法不一定需要逐词向量作为输入,但可能仍然适用于量化文本到文本的相似性。