我有一个预先训练好的word2vec模型,我将其加载到spacy中以向量化新单词。给定新文本,我执行nlp('hi').vector来获得单词'hi‘的向量。
最终,一个新词需要被矢量化,这在我的预训练模型的词汇表中并不存在。在这个场景中,spacy默认是一个用零填充的向量。我希望能够为OOV术语设置此默认向量。
示例:
import spacy
path_model= '/home/bionlp/spacy.bio_word2vec.model'
nlp=spacy.load(path_spacy)
print(nlp('abcdef').vector, '\n',nlp('gene').vector)这段代码为单词'gene‘输出了一个密集向量,为单词'abcdef’输出了一个充满0的向量(因为它不在词汇表中):

我的目标是能够指定缺少单词的向量,因此,您可以(例如)获得一个充满1的向量,而不是为单词'abcdef‘获取一个充满0的向量。
发布于 2019-08-27 06:52:05
如果您只是想要自己的插件向量而不是SpaCy默认的全零向量,那么只需添加一个额外的步骤,将所有的全零向量替换为您的向量即可。例如:
words = ['words', 'may', 'by', 'fehlt']
my_oov_vec = ... # whatever you like
spacy_vecs = [nlp(word) for word in words]
fixed_vecs = [vec if vec.any() else my_oov_vec
for vec in spacy_vecs]我不知道你为什么要这么做。大量处理单词向量的工作只是省略了词汇表之外的单词;使用任何插入值,包括SpaCy的零向量,可能只会增加无用的噪声。
如果更好地处理OOV单词很重要,请注意,其他一些单词向量模型,如FastText,可以通过使用在训练期间为子词片段学习的向量,为OOV单词合成比没有更好的猜测向量。这类似于人们经常能从熟悉的词根中找出一个单词的要点。
https://stackoverflow.com/questions/57658888
复制相似问题