更新 spaCy 词汇表
Update spaCy Vocabulary
我想知道是否可以更新 spacys 的默认词汇表。我正在尝试做的是:
- 运行 word2vec 在我自己的语料库上与 gensim
- 使用
nlp.vocab.load_vectors_from_bin_loc(\path)
将向量加载到我的模型中
但是由于我语料库中的很多词不在 spacy 的默认词汇表中,所以我无法使用导入的向量。有没有一种(简单的)方法来添加那些缺失的类型?
编辑:
我意识到混合向量可能会有问题。所以我的问题是:
如何将自定义词汇导入 spacy?
这在下一个版本中要容易得多,应该会在本周发布 --- 我刚刚完成测试。目前:
默认情况下,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)
我想知道是否可以更新 spacys 的默认词汇表。我正在尝试做的是:
- 运行 word2vec 在我自己的语料库上与 gensim
- 使用
nlp.vocab.load_vectors_from_bin_loc(\path)
将向量加载到我的模型中
但是由于我语料库中的很多词不在 spacy 的默认词汇表中,所以我无法使用导入的向量。有没有一种(简单的)方法来添加那些缺失的类型?
编辑:
我意识到混合向量可能会有问题。所以我的问题是:
如何将自定义词汇导入 spacy?
这在下一个版本中要容易得多,应该会在本周发布 --- 我刚刚完成测试。目前:
默认情况下,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)