Nlp 用Gensim训练手套处理词汇表外单词

Nlp 用Gensim训练手套处理词汇表外单词,nlp,stanford-nlp,gensim,word-embedding,Nlp,Stanford Nlp,Gensim,Word Embedding,我正在处理NLP任务,并加载了Gensim提供的手套向量: import gensim.downloader glove_vectors = gensim.downloader.load('glove-twitter-25') 我试图将每个单词嵌入到一个句子中,但其中一些单词不在词汇表中 使用Gensim API处理此问题的最佳方法是什么 谢谢 加载: 将gensim.downloader作为api导入 模型=api.load(“手套-twitter-25”)#加载手套向量 #模型。大多数相似

我正在处理NLP任务,并加载了Gensim提供的手套向量:

import gensim.downloader
glove_vectors = gensim.downloader.load('glove-twitter-25')
我试图将每个单词嵌入到一个句子中,但其中一些单词不在词汇表中

使用Gensim API处理此问题的最佳方法是什么

谢谢

加载:

将gensim.downloader作为api导入
模型=api.load(“手套-twitter-25”)#加载手套向量
#模型。大多数相似(“猫”)显示的单词与“猫”相似
有一种非常简单的方法可以确定这些单词是否存在于模型的词汇表中

result=print('Word exists'),如果model.wv.vocab中的单词不存在,则打印('Word exists')
除此之外,我还使用以下逻辑创建了带有N标记的句子嵌入(25 dim):

from\uuuuu future\uuuuu导入打印功能,分区
导入操作系统
进口稀土
导入系统
导入正则表达式
将numpy作为np导入
从functools导入部分
从模糊导入过程
从Levenshtein进口比率作为lev_比率
进口gensim
导入临时文件
def语音检查(型号、文字):
相似词=模型。最相似(词)
匹配比率=0。
匹配单词=“”
对于sim_单词,类似单词的sim_分数:
比率=级别比率(字、模拟字)
如果比率>匹配比率:
匹配单词=模拟单词
如果匹配单词=='':
返回相似的单词[0][1]
返回模型。相似性(单词、匹配单词)
def sentence2vector(型号,已发送,尺寸=25):
words=sent.split(“”)
emb=[model[w.strip()]表示w(大写)]
权重=[1.如果w在model.wv.vocab中,则为w检查(model,w)是否为w在words中]
如果len(emb)==0:
已发送=np.0(尺寸,数据类型=np.16)
其他:
发送向量=np.dot(重量,单位为emb)
sent\u vec=sent\u vec.astype(“float16”)
已发送的回复

Afaik处理OOV单词的通常方法是忽略它们。否则,您必须从自己的语料库中训练自己的嵌入。如何有效地忽略它们?这将是一个问题,因为我有文本,必须使用向量进行转换。word\u vec(word)如果单词不在vocab中,那么我就得到了错误。我不熟悉Gensim,但肯定有一种方法可以检查模型中是否存在单词。我假设它可能是:
if(WORD in model.wv.key_to_index).
您可以使用其他单词嵌入(fastText,BERT…),它也可以表示OOV单词?谢谢,是的,有很多方法可以检查它,但运行起来需要很多时间。又名,非常低效(至少我到目前为止一直在做的事情)。其他单词嵌入的替代方案很有吸引力,但我相信Gensim的KeyedVector仍然无法从中获益。谢谢,我仍然希望它能与手套预训练嵌入一起工作,但这确实是一个很好的替代方案。谢谢分享。我已将代码更新为通用方法。请告诉我这是否适用于你。