Размер словаря для модели Word2Ve c значительно ниже, чем размер словаря в списке, на котором он основан? - PullRequest
0 голосов
/ 15 февраля 2020
model1 = Word2Vec(words_list_no_dupes, min_count=0,size= 20,workers=3, window =3, sg = 1)
print(model1)
print(len(model1.wv.vocab))
print(model.wv.vectors.shape)

вывод: Word2Ve c (vocab = 58, size = 20, alpha = 0.025) 58 (31752, 20)

Однако, когда я проверяю, чтобы увидеть длину списка, модель сформирована из

print(len(words_list_no_dupes))

вывод:

1906

Что вызывает это? Полный код, который я использовал для извлечения дубликатов из списка, находится здесь:

words = []
for r in range(0,len(df)):
    temp = []
    for word in nltk.tokenize.WhitespaceTokenizer().tokenize(df["CAR NAME"][r]):   
        temp.append(word.lower())
    words.append(temp)
words_flat_list = [item for sublist in words for item in sublist]

def remove_duplicates(x):
  return list(dict.fromkeys(x))

words_list_no_dupes = remove_duplicates(words_flat_list)

1 Ответ

0 голосов
/ 15 февраля 2020

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

У него не будет необходимой связи с длиной, количеством текстов, в корпусе (len(words_list_no_dupes)) - потому что у каждого текста должно быть много слов, включая много слов, повторенных из других текстов.

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

Тем не менее, ваш показанный вывод немного странный: len(model1.wv.vocab) должен быть того же размера, что и model.wv.vectors.shape[0] - но ваш вывод показывает 58, а затем 31,752. Вы уверены, что это значения из вашего прогона?

Кроме того, ваш «полный код, который я использовал для извлечения дубликатов из списка», немного сбивает с толку намерения и следствия. Вы можете показать в своем вопросе несколько примеров того, что находится в списке в начале и в конце, чтобы, возможно, показать, почему это неправильный ввод для Word2Vec. Например, какие первые элементы в words_flat_list?

print(words_flat_list[0:3])

Тогда, какие первые несколько предметов в words_list_no_dupes?

print(words_list_no_dupes[0:3])

Это то, что вы ожидали?

Это words_list_no_dupes, который вы передаете в Word2Vec, что он ожидает - это последовательность Python, где каждый элемент является списком строковых токенов? (Если что-то еще, вы должны ожидать странные результаты.)

...