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

标签 python word2vec spacy

我有一个预先训练的 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 向量(因为它不存在于词汇表中):

enter image description here

我的目标是能够指定缺失单词的向量,因此您可以获得(例如)一个充满 1 的向量,而不是为单词“abcdef”获取充满 0 的向量。

最佳答案

如果您只是想要插件向量而不是 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]

我不确定你为什么要这样做。许多关于词向量的工作只是简单地删除了词汇表之外的词。使用任何插 header value ,包括 SpaCy 的零向量,可能只会增加无用的噪音。

如果更好地处理 OOV 单词很重要,请注意,其他一些单词向量模型(例如 FastText)可以通过使用在训练期间为子单词片段学习的向量来合成 OOV 单词的比没有更好的猜测向量。这类似于人们通常可以从熟悉的词根中找出单词的主旨。

关于python - 如何在Spacy中为OOV术语指定词向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57658888/

相关文章:

python - gensim word2vec : Find number of words in vocabulary

python - 在 Heroku 应用程序上安装 spacy en_core_web_lg 时出错

Python/Pandas/spacy - 遍历 DataFrame 并计算 pos_ 标签的数量

python - 基于类的 View 中的可选 url 参数

python - 如何在圆形分布中生成随机点

machine-learning - 有什么办法可以理解word2vec的输出特征吗?

deep-learning - word2vec : find words similar in a case insensitive manner

python - 识别 spaCY 中的 "it"主题

python - Numpy 切片慢?

python - 使用 Python 获取 Rethinkdb 数据库的大小