首页 文章

Gensim Word2Vec从预训练模型中选择一组较小的单词向量

提问于
浏览
0

我在gensim中有一个大型的预训练Word2Vec模型,我希望在我的Keras模型中使用预训练的单词向量作为嵌入层 .

问题是嵌入大小是巨大的,我不需要大多数单词向量(因为我知道哪些单词可以作为输入发生) . 所以我想摆脱它们来减少嵌入层的大小 .

有没有办法只保留所需的wordvectors(包括相应的索引!),基于单词的白名单?

1 回答

  • 0

    那里需要很多代码,并且可以在现有的 gensim 代码上建模 . 一些可能的替代策略:

    • 加载完整的向量,然后以易于解析的格式保存 - 例如通过 .save_word2vec_format(..., binary=False) . 这种格式几乎是不言自明的;编写自己的代码以从该文件中删除不在白名单中的所有行(确保更新entry-count的前导行声明) . load_word2vec_format()save_word2vec_format() 的现有源代码可能具有指导意义 . 然后,您将拥有一个子集文件 .

    • 或者,假装你要使用你感兴趣的语料库(只有有趣的单词)训练一个新的Word2Vec模型 . 但是,只创建模型并执行 build_vocab() 步骤 . 现在,你有未经训练的模型,有随机向量,但只有正确的词汇 . grab 模型的 wv 属性 - 具有正确词汇的 KeyedVectors 实例 . 然后分别加载超大的矢量集,对于右侧大小的 KeyedVectors 中的每个字,复制较大集合中的实际矢量 . 然后保存正确大小的子集 .

    • 或者,查看Word2Vec intersect_word2vec_format() 上的(可能已经破解的gensim-3.4)方法 . 它或多或少地试图做任何工作,或提供你想要做的事情的模板 .

相关问题