2017-04-20 94 views
0

我想知道是否可以更新Spacys默认词汇表。我试图做的是这样的:对我自己的语料库与gensim 更新spaCy词汇表

  • 载荷向量到我的模型与nlp.vocab.load_vectors_from_bin_loc(\path)
  • 但自从我的文集很多的话大家还不

    • 运行word2vec t在spacys默认词汇表我无法使用导入的向量。有没有一种(简单)的方式来添加这些缺失的类型?

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

    回答

    0

    这在下个版本中会更容易,这个版本应该在本周出来---我只是在完成测试。现在:

    默认情况下,spaCy会加载一个data/vocab/vec.bin文件,其中“data”目录位于spacy.en模块目录中 使用spacy.vocab从bz2文件创建vec.bin文件.write_binary_vectors 将运行时替换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) 
    
    +0

    这将是冷静轻松地通过gensim以可用的格式转储spacy.vocab矢量,在新的语料库上用gensim重新训练,然后在Spacy中重新加载。这目前是直截了当的? – geoffn91