我想知道是否可以更新spacys默认词汇表。我正在尝试做的是:
nlp.vocab.load_vectors_from_bin_loc(\path)
但由于我的语料库中的很多单词都不是默认词汇,我无法使用导入的向量。是否有(简单)方法添加缺少的类型?
修改
我意识到混合矢量可能会有问题。所以我的问题是:
如何将自定义词汇表导入spacy?
答案 0 :(得分:2)
这在下一个版本中会更容易,本周应该出来了 - 我刚刚完成测试。现在:
默认情况下,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)