使用 glove.6B.100d.txt 嵌入 spacy 得到零 lex.rank
Using glove.6B.100d.txt embedding in spacy getting zero lex.rank
我正在尝试在 spacy nlp 管道中加载 glove 100d emebddings。
我按如下方式创建了 spacy 格式的词汇表:
python -m spacy init-model en spacy.glove.model --vectors-loc glove.6B.100d.txt
glove.6B.100d.txt通过在第一行添加“400000 100”转换为word2vec格式。
现在
spacy.glove.model/vocab has following files:
5468549 key2row
38430528 lexemes.bin
5485216 strings.json
160000128 vectors
在代码中:
import spacy
nlp = spacy.load("en_core_web_md")
from spacy.vocab import Vocab
vocab = Vocab().from_disk('./spacy.glove.model/vocab')
nlp.vocab = vocab
print(len(nlp.vocab.strings))
print(nlp.vocab.vectors.shape) gives
给予
407174
(400000, 100)
然而问题是:
V=nlp.vocab
max_rank = max(lex.rank for lex in V if lex.has_vector)
print(max_rank)
给出 0
我只想将 spacy 中的 100d 手套嵌入与来自 en_core_web_md 的 "tagger"、"parser"、"ner" 模型结合使用。
有谁知道如何正确地做到这一点(这可能吗)?
tagger/parser/ner 模型使用包含的词向量作为特征进行训练,因此如果您将它们替换为不同的向量,您将破坏所有这些组件。
您可以使用新向量来训练新模型,但用训练过的组件替换模型中的向量效果不佳。 tagger/parser/ner 组件很可能会提供无意义的结果。
如果您想要保存 100d 个向量而不是 300d 个向量space,您可以调整向量的大小,这会将每个条目截断为前 100 个维度。结果性能会有所下降。
import spacy
nlp = spacy.load("en_core_web_md")
assert nlp.vocab.vectors.shape == (20000, 300)
nlp.vocab.vectors.resize((20000, 100))
我正在尝试在 spacy nlp 管道中加载 glove 100d emebddings。
我按如下方式创建了 spacy 格式的词汇表:
python -m spacy init-model en spacy.glove.model --vectors-loc glove.6B.100d.txt
glove.6B.100d.txt通过在第一行添加“400000 100”转换为word2vec格式。
现在
spacy.glove.model/vocab has following files:
5468549 key2row
38430528 lexemes.bin
5485216 strings.json
160000128 vectors
在代码中:
import spacy
nlp = spacy.load("en_core_web_md")
from spacy.vocab import Vocab
vocab = Vocab().from_disk('./spacy.glove.model/vocab')
nlp.vocab = vocab
print(len(nlp.vocab.strings))
print(nlp.vocab.vectors.shape) gives
给予 407174 (400000, 100)
然而问题是:
V=nlp.vocab
max_rank = max(lex.rank for lex in V if lex.has_vector)
print(max_rank)
给出 0
我只想将 spacy 中的 100d 手套嵌入与来自 en_core_web_md 的 "tagger"、"parser"、"ner" 模型结合使用。
有谁知道如何正确地做到这一点(这可能吗)?
tagger/parser/ner 模型使用包含的词向量作为特征进行训练,因此如果您将它们替换为不同的向量,您将破坏所有这些组件。
您可以使用新向量来训练新模型,但用训练过的组件替换模型中的向量效果不佳。 tagger/parser/ner 组件很可能会提供无意义的结果。
如果您想要保存 100d 个向量而不是 300d 个向量space,您可以调整向量的大小,这会将每个条目截断为前 100 个维度。结果性能会有所下降。
import spacy
nlp = spacy.load("en_core_web_md")
assert nlp.vocab.vectors.shape == (20000, 300)
nlp.vocab.vectors.resize((20000, 100))