Словарный запас слов, созданный моделями Word2vec и Glove, отличается для одного и того же корпуса

#nlp #stanford-nlp #word2vec #word-embedding #named-entity-recognition

#nlp #stanford-nlp #word2vec #встраивание слов #распознавание именованных объектов

Вопрос:

Я использую набор данных CONLL2003 для создания вложений слов с использованием Word2vec и Glove. Количество слов, возвращаемых word2vecmodel.wv.vocab, отличается (намного меньше), чем glove.dictionary . Вот код: Word2Vec:

 word2vecmodel = Word2Vec(result ,size= 100, window =5, sg = 1)
X = word2vecmodel[word2vecmodel.wv.vocab]
w2vwords = list(word2vecmodel.wv.vocab)
  

Выходной len(w2vwords) = 4653

Glove:

 from glove import Corpus
from glove import Glove
import numpy as np
corpus = Corpus()
nparray = []
allwords = []
no_clusters=500
corpus.fit(result, window=5)
glove = Glove(no_components=100, learning_rate=0.05)
glove.fit(corpus.matrix, epochs=30, no_threads=4, verbose=True)
glove.add_dictionary(corpus.dictionary)
  

Вывод: len(glove.dictionary) = 22833

Входные данные представляют собой список предложений. Например: результат [1: 5] =

 ['Peter', 'Blackburn'],
 ['BRUSSELS', '1996-08-22'],
 ['The',
  'European',
  'Commission',
  'said',
  'Thursday',
  'disagreed',
  'German',
  'advice',
  'consumers',
  'shun',
  'British',
  'lamb',
  'scientists',
  'determine',
  'whether',
  'mad',
  'cow',
  'disease',
  'transmitted',
  'sheep',
  '.'],
 ['Germany',
  "'s",
  'representative',
  'European',
  'Union',
  "'s",
  'veterinary',
  'committee',
  'Werner',
  'Zwingmann',
  'said',
  'Wednesday',
  'consumers',
  'buy',
  'sheepmeat',
  'countries',
  'Britain',
  'scientific',
  'advice',
  'clearer',
  '.']]
  

В списке результатов всего 13 517 предложений.
Может кто-нибудь, пожалуйста, объяснить, почему список слов, для которых создаются вложения, сильно отличается по размеру?

Ответ №1:

Вы не упомянули, какую Word2Vec реализацию используете, но я предполагаю, что вы используете популярную библиотеку Gensim.

Как и исходный word2vec.c код, выпущенный Google, Gensim Word2Vec использует min_count параметр по умолчанию 5 , означающий, что любые слова, встречающиеся менее 5 раз, игнорируются.

Алгоритму word2vec требуется множество разнообразных примеров использования слова в разных контекстах для генерации сильных слов-векторов. Когда слова редки, они сами по себе не могут получить очень хорошие векторы слов: в нескольких примерах показано только несколько применений, которые могут быть идиосинкратичными по сравнению с тем, что показала бы большая выборка, и не могут быть тонко сбалансированы со многими другими представлениями слов наилучшим образом.

Но, кроме того, учитывая, что в типичных распределениях слов много таких низкочастотных слов, в целом они также имеют тенденцию ухудшать векторы слов для других более частых кордов. Более низкочастотные слова, сравнительно, являются «помехой», которая поглощает состояние / усилие обучения в ущерб другим, более неподходящим словам. (В лучшем случае вы можете немного компенсировать этот эффект, используя больше периодов обучения.)

Таким образом, отбрасывание низкочастотных слов обычно является правильным подходом. Если вам действительно нужны векторы — для этих слов, получение большего количества данных, чтобы эти слова больше не были редкими, — лучший подход.

Вы также можете использовать значение lower min_count , включая as low as min_count=1 , чтобы сохранить все слова. Но часто отбрасывание таких редких слов лучше для любой конечной цели, для которой будут использоваться векторы слов.