首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Spacy中为OOV术语指定词向量?

如何在Spacy中为OOV术语指定词向量?
EN

Stack Overflow用户
提问于 2019-08-26 21:28:37
回答 1查看 1.1K关注 0票数 1

我有一个预先训练好的word2vec模型,我将其加载到spacy中以向量化新单词。给定新文本,我执行nlp('hi').vector来获得单词'hi‘的向量。

最终,一个新词需要被矢量化,这在我的预训练模型的词汇表中并不存在。在这个场景中,spacy默认是一个用零填充的向量。我希望能够为OOV术语设置此默认向量。

示例:

代码语言:javascript
复制
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的向量。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-27 06:52:05

如果您只是想要自己的插件向量而不是SpaCy默认的全零向量,那么只需添加一个额外的步骤,将所有的全零向量替换为您的向量即可。例如:

代码语言:javascript
复制
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单词合成比没有更好的猜测向量。这类似于人们经常能从熟悉的词根中找出一个单词的要点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57658888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档