Используйте Word2Vec для создания встраивания смысла - PullRequest
0 голосов
/ 16 мая 2019

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

Я работаю с аннотированным корпусом, так что у меня есть однозначные слова в данном предложении, благодаря идентификатору синтаксиса WordNet, который я буду называть тегами. Например:

Dataset

<sentence>
  <text>word1 word2 word3</text>
  <annotations>
    <annotation anchor=word1 lemma=lemma1>tag1</annotation>
    <annotation anchor=word2 lemma=lemma2>tag2</annotation>
    <annotation anchor=word3 lemma=lemma3>tag3</annotation>
  <annotations>
</sentence>

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

Погружение

lemma1_tag1 dim 1 dim 2 dim 3 ... dim n
lemma2_tag2 dim 1 dim 2 dim 3 ... dim n
lemma3_tag3 dim 1 dim 2 dim 3 ... dim n

Я думал создать корпус для Word2Vec, начиная с каждого текста каждого предложения, и заменить каждый anchor на соответствующий lemma1_tag1 (некоторые слова могут содержать больше подчеркивания, потому что я заменил пробел в леммах подчеркиванием). Поскольку не каждое отдельное слово аннотировано, после простой предварительной обработки, выполненной для удаления стоп-слов и других знаков препинания, в конце у меня есть что-то вроде следующего примера:

Корпус Пример

let just list most_recent_01730444a headline_06344461n

Поскольку я просто заинтересован в аннотированных словах, я также создал предопределенный словарь, чтобы использовать его в качестве словаря Word2Vec. Этот файл содержит в каждой строке записи, такие как:

Пример словаря

lemma1_tag1
lemma2_tag2

Итак, определив корпус и словарь, я использовал их в наборе инструментов Word2Vec:

Эмуляция терминала

./word2vec -train data/test.txt -output data/embeddings.vec -size 300 -window 7 -sample 1e-3 -hs 1 -negative 0 -iter 10 -min-count 1 -read-vocab data/dictionary.txt -cbow 1

выход

Starting training using file data/test.txt
Vocab size: 80
Words in train file: 20811

Проблема в том, что количество слов в корпусе равно 32000000+, а количество слов в предопределенном словарном файле - около 80000. Я даже пробовал на Python с Gensim, но (конечно) у меня был тот же вывод , Я думаю, что проблема в том, что Word2Vec не рассматривает слова в формате lemma1_tag1 из-за подчеркивания, и я не знаю, как решить эту проблему. Любая подсказка приветствуется, заранее спасибо!

1 Ответ

0 голосов
/ 16 мая 2019

И оригинал word2vec.c от Google, и Word2Vec от gensim'а отлично справляются со словами с подчеркиванием.

Если оба смотрят на ваш входной файл, и оба сообщают только 80 уникальных слов, где вы ожидаете более 100 000, возможно, что-то не так с вашим входным файлом.

Что сообщает wc data/test.txt?

...