我正在努力解决以下问题:
我下载了西班牙语的预训练词嵌入模型(超过一百万个单词,用于西班牙语的300维单词向量) 我成功加载了它,甚至设法进行了一些实验,例如西班牙语中最相似的单词和基本类比(A代表B,C代表B),但是当我尝试以下操作时:
for pais in 'Italia','Francia','India','China':
print(' is the capital of '
(A_is_to_B_as_C_is_to('Alemania','berlín',pais),pais))
它引发错误:
KeyError: "word 'berlín' not in vocabulary"
我已经检查了单词实际上是否在嵌入单词中。我还消除了编码错误的可能性。
根据我的研究,当令牌/单词应该包装在列表[]中时,会产生这种类型的错误,但是我不知道如何将其应用于此特定问题。此外,此代码块与第3章(Word2vecMath)
中的“ 深度学习食谱”中使用的代码相同。这是完整的脚本:
import os
from keras.utils import get_file
import gensim
from gensim.models.keyedvectors import KeyedVectors
import subprocess
import numpy as np
import matplotlib.pyplot as plt
from IPython.core.pylabtools import figsize
from sklearn.manifold import TsnE
import json
from collections import Counter
from itertools import chain
from keras.models import load_model
path = ("D:\Pretrained_wordEmbeddings_ESP\embeddings-l-model.vec")
model = gensim.models.KeyedVectors.load_word2vec_format(path,binary=False)
data=model.most_similar(positive=["muerte"])
print(data[:])
def A_is_to_B_as_C_is_to(a,b,c,topn=1):
a,c = map(lambda x:x if type(x) == list else [x],(a,c))
res = model.most_similar(positive=b + c,negative=a,topn=topn)
if len(res):
if topn == 1:
return res[0][0]
return [x[0] for x in res]
return None
A_is_to_B_as_C_is_to('hombre','mujer','rey')
## for pais in 'Italia','China':
## print(' is the capital of '
## (A_is_to_B_as_C_is_to('Alemania',pais))
感谢您的支持