Word2Vec: слово не в словаре, хотя его в корпусе - PullRequest
0 голосов
/ 17 марта 2019
test = pd.read_csv('test.csv')
train = pd.read_csv('train.csv')

image

def prep_corpus():
    sentences = []
    for x in test['title']:
        sentences.append(x.strip().split())

    for x in train['title']:
        sentences.append(x.strip().split())

    return sentences

corpus = prep_corpus()

Корпус - это список предложений, где одно предложение - это один список слов:

image

word_model = Word2Vec(corpus, workers = 2,sg=1, iter = 5)

word_model['maybelline', 'clear'].shape

У меня есть слово vector, которое, кажется, работает:

image

Однако, когда я пытаюсь выполнить word_model ['интенсивность], я получаю сообщение об ошибке: «слово« интенсивность »отсутствует в словаре»

И это несмотря на то, что слово интенсивность есть в списке корпусов. Появляется один раз в тесте.

Я проверил список корпусов, интегрируя его и обнаружив индекс предложения, содержащего «интенсивность»

Я также проверил фрейм данных и нашел его внутри:

image

Есть также некоторые слова, которые есть в списке корпусов, но отсутствуют в словаре word2vec .

Я пытался использовать как cbow и skipgram и пробовать разные эпохи 1,5,15.

Во всех сценариях я все еще сталкиваюсь с этой ошибкой. Как мне решить эту проблему?

1 Ответ

1 голос
/ 17 марта 2019

Вероятно, вы используете реализацию gensim Word2Vec.

Эта реализация, как и исходный код word2vec.c, обеспечивает применение по умолчанию min_count для слов из 5. Слова, содержащие менее 5 примеров, будут игнорироваться.В целом, это значительно улучшает качество оставшихся слов-векторов.

(Слова с одним или несколькими примерами использования сами по себе не имеют сильных векторов слов, поскольку недостаточно разнообразия, чтобы отразить их реальное значение в более широком языке, и их несколько примеров влияют на модельгораздо меньше, чем у других слов с большим количеством примеров. Но, поскольку таких слов, как правило, много, у многих таких слов мало примеров, в итоге они оказываются разбавленными / мешающими обучению, которое может выполнить модель, другими словами, с многочисленными примерами.)

Вы можете установить min_count=1 для сохранения таких слов, но по сравнению с отбрасыванием этих редких слов:

  • векторы редких слов будут плохими
  • редкие слова«присутствие сделает модель намного больше и заметно медленнее обучать
  • векторы для других более распространенных слов будут незначительно хуже
...