【问题标题】:Update spaCy Vocabulary更新 spaCy 词汇
【发布时间】:2017-05-08 12:27:02
【问题描述】:

我想知道是否可以更新 spacys 的默认词汇表。我正在尝试做的是:

  • 使用 gensim 在我自己的语料库上运行 word2vec
  • 使用nlp.vocab.load_vectors_from_bin_loc(\path)将向量加载到我的模型中

但是由于我的语料库中的很多单词不在 spacys 默认词汇表中,所以我无法使用导入的向量。有没有(简单的)方法来添加那些缺失的类型?

编辑:
我意识到混合向量可能会有问题。所以我的问题是:
如何将自定义词汇导入 spacy?

【问题讨论】:

    标签: python word2vec spacy


    【解决方案1】:

    这在下一个版本中要容易得多,它应该在本周发布 --- 我刚刚完成测试。现在:

    默认 spaCy 加载一个 data/vocab/vec.bin 文件,其中“data”目录位于 spacy.en 模块目录中 使用 spacy.vocab.write_binary_vectors 从 bz2 文件创建 vec.bin 文件 要么替换 spaCy 的 vec.bin 文件,要么在运行时调用 nlp.vocab.load_rep_vectors,使用二进制文件的路径。 上面的方法起初有点不方便,但二进制文件格式更小,加载速度更快,而且矢量文件相当大。请注意,GloVe 以 gzip 格式分发,而不是 bzip。

    出于兴趣:您使用的是 GloVe 向量,还是您根据自己的数据训练过的东西?如果是您自己的数据,您是否使用过 Gensim?我想让这变得更容易,所以如果你想看到什么样的工作流程,我将不胜感激。

    在运行时加载新向量,可选择转换它们

        import spacy.vocab
    
        def set_spacy_vectors(nlp, binary_loc, bz2_loc=None):
            if bz2_loc is not None:
                spacy.vocab.write_binary_vectors(bz2_loc, binary_loc)
            write_binary_vectors(bz2_input_loc, binary_loc)
    
            nlp.vocab.load_rep_vectors(binary_loc)
    

    替换 vec.bin,这样你的向量就会被默认加载

    from spacy.vocab import write_binary_vectors
        import spacy.en
    
        from os import path
    
        def main(bz2_loc):
            bin_loc = path.join(path.dirname(spacy.en.__file__), 'data', 'vocab', 'vec.bin')
            write_binary_vectors(bz2_loc, bin_loc)
    
    if __name__ == '__main__':
        plac.call(main)
    

    【讨论】:

    • 通过 gensim 轻松地将 spacy.vocab 向量转储为可用格式,在新语料库上使用 gensim 重新训练,然后在 Spacy 中重新加载,这将是一件很酷的事情。目前这很简单吗?
    猜你喜欢
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 2020-04-18
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多