Слова отсутствуют в обученном словаре модели word2vec - PullRequest
0 голосов
/ 08 мая 2019

В настоящее время я работаю с python, где я тренирую модель Word2Vec, используя предложения, которые я предоставляю.Затем я сохраняю и загружаю модель, чтобы получить вложение слов для каждого слова в предложениях, которые использовались для обучения модели.Тем не менее, я получаю следующую ошибку:

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

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

sportsteam n1985_chicago_bears teamplaysincity city chicago

Поэтому я хотел бы знать, почему некоторые слова отсутствуют в словаре, несмотря на то, что они обучены этим словам из этого предложения.

Обучение модели word2vec на собственном корпусе

import nltk
import numpy as np
from termcolor import colored
from gensim.models import Word2Vec
from gensim.models import KeyedVectors
from sklearn.decomposition import PCA


#PREPARING DATA

fname = '../data/sentences.txt'

with open(fname) as f:
    content = f.readlines()

# remove whitespace characters like `\n` at the end of each line
content = [x.strip() for x in content]


#TOKENIZING SENTENCES

sentences = []

for x in content:
    nltk_tokens = nltk.word_tokenize(x)
    sentences.append(nltk_tokens)

#TRAINING THE WORD2VEC MODEL

model = Word2Vec(sentences)

words = list(model.wv.vocab)
model.wv.save_word2vec_format('model.bin')

Примеры предложений из предложений.txt

sportsteam hawks teamplaysincity city atlanta
stadiumoreventvenue honda_center stadiumlocatedincity city anaheim
sportsteam ducks teamplaysincity city anaheim
sportsteam n1985_chicago_bears teamplaysincity city chicago
stadiumoreventvenue philips_arena stadiumlocatedincity city atlanta
stadiumoreventvenue united_center stadiumlocatedincity city chicago
...

Там1860 таких строк в файле sentences.txt, каждая из которых содержит ровно 5 слов и не содержит стоп-слов.

После сохранения модели я попытался загрузить ее из другого файла Python в том же каталоге, что и сохраненный model.bin, как показано ниже.

Загрузка сохраненного model.bin

import nltk
import numpy as np
from gensim import models

w = models.KeyedVectors.load_word2vec_format('model.bin', binary=True)
print(w['n1985_chicago_bears'])

Однако я получаю следующую ошибку

KeyError: "word 'n1985_chicago_bears' not in vocabulary"

Есть ли способ получить вложение слова для каждого слова в обученном корпусе предложения, используя один и тот же метод?

Любые предложения в этом отношении будут высоко оценены.

1 Ответ

2 голосов
/ 08 мая 2019

Значение по умолчанию min_count=5 для реализации gensim в Word2Vec и похоже на искомый токен n1985_chicago_bears встречается в вашем корпусе менее 5 раз. Измените ваш счетчик минут соответственно.

Подпись метода:

class gensim.models.word2vec.Word2Vec (предложения = нет, corpus_file = нет, размер = 100, альфа = 0.025, окно = 5, min_count = 5, max_vocab_size = нет, выборка = 0,001, семена = 1, рабочие = 3, min_alpha = 0,0001, sg = 0, hs = 0, отрицательный = 5, ns_exponent = 0,75, cbow_mean = 1, hashfxn =, iter = 5, null_word = 0, trim_rule = Нет, sorted_vocab = 1, batch_words = 10000, compute_loss = False, обратные вызовы = (), max_final_vocab = нет)

content = [
    "sportsteam hawks teamplaysincity city atlanta",
    "stadiumoreventvenue honda_center stadiumlocatedincity city anaheim",
    "sportsteam ducks teamplaysincity city anaheim",
    "sportsteam n1985_chicago_bears teamplaysincity city chicago",
    "stadiumoreventvenue philips_arena stadiumlocatedincity city atlanta",
    "stadiumoreventvenue united_center stadiumlocatedincity city chicago"
]

sentences = []

for x in content:
    nltk_tokens = nltk.word_tokenize(x)
    sentences.append(nltk_tokens)

model = Word2Vec(sentences, min_count=1)
print (model['n1985_chicago_bears'])
...