KeyError ("слово '% s' отсутствует в словаре"% word) - PullRequest
0 голосов
/ 19 сентября 2019

После преобразования моих предсказанных меток из изображений в список all_tags и последующего разбиения их и, наконец, сохранения в word_list, в котором все метки хранятся в виде предложения.

Все, что я хочу сделать, - это использовать Google Word2Vec.предварительно обученная модель (https://mccormickml.com/2016/04/12/googles-pretrained-word2vec-model-in-python/), чтобы сгенерировать и распечатать все значения Word2Vec моих предсказанных меток. Импортировал и отобразил предварительно обученный вес модели, но я получаю ошибку

KeyError: "word '[' cliff '' not in запасной словарь"

Однако, слово 'cliff' доступно в словаре. Любое понимание будет оценено. Пожалуйста, проверьте фрагменты кода нижедля справки.

execution_path = os.getcwd()
TEST_PATH = '/home/guest/Documents/Aikomi'


prediction = ImagePrediction()
prediction.setModelTypeAsDenseNet()
prediction.setModelPath(os.path.join(execution_path, "/home/guest/Documents/Test1/ImageAI-master/imageai/Prediction/Weights/DenseNet.h5"))
prediction.loadModel()

pred_array = np.empty((0,6), dtype=object)

predictions, probabilities = prediction.predictImage(os.path.join(execution_path, "1.jpg"), result_count=5)

for img in os.listdir(TEST_PATH):
    if img.endswith('.jpg'):
        image = Image.open(os.path.join(TEST_PATH, img))
        image = image.convert("RGB")
        image = np.array(image, dtype=np.uint8)
        predictions, probabilities = prediction.predictImage(os.path.join(TEST_PATH, img), result_count=5)
        temprow = np.zeros((1,pred_array.shape[1]),dtype=object)
        temprow[0,0] = img
        for i in range(len(predictions)):
            temprow[0,i+1] = predictions[i]
        pred_array = np.append(pred_array, temprow, axis=0)


all_tags = list(pred_array[:,1:].reshape(1,-1))
_in_sent = ' '.join(list(map(str, all_tags)))


import gensim
from gensim.models import Word2Vec
from nltk.tokenize import sent_tokenize, word_tokenize
import re
import random
import nltk
nltk.download('punkt')


word_list = _in_sent.split() 

from gensim.corpora.dictionary import Dictionary

# be sure to split sentence before feed into Dictionary
word_list_2 = [d.split() for d in word_list]
dictionary = Dictionary(word_list_2)
print("\n", dictionary, "\n")

corpus_bow = [dictionary.doc2bow(doc) for doc in word_list_2]

model = Word2Vec(word_list_2, min_count= 1)
model = gensim.models.KeyedVectors.load_word2vec_format('/home/guest/Downloads/Google.bin', binary=True)

print(*map(model.most_similar, word_list))

1 Ответ

1 голос
/ 19 сентября 2019

Ответ тут же, вы очень четко напечатали

KeyError(“word '%s' not in vocabulary” % word)

и ошибка

KeyError: "word '[' cliff '' не в словаре"

Поскольку содержимое переменной word должно быть между 'и' Следовательно, переменная word содержит строку ['cliff', а не строку cliff

Удалите пунктуацию из вашего текста, например:'и [] и т. д.

...