Некоторые расходящиеся проблемы Word2Vec в Gensim с использованием высоких значений альфа - PullRequest
0 голосов
/ 18 декабря 2018

Я реализую word2vec в gensim, на корпусе с вложенными списками (набором токенизированных слов в форме предложений) с 408226 предложениями (списками) и в общей сложности 3150546 словами или токенами.

Я получаю значимые результаты (с точки зрения сходства между двумя словами, использующими model.wv.simility) с выбранными значениями 200 как размер, окна как 15, min_count как 5, iter как 10 и альфакак 0.5.Все они являются лемматизированными словами, и все они являются входными данными для моделей со словарным запасом 32716.

Результаты, полученные от значения по умолчанию альфа-канала, размера, окна и измерений, для меня не имеют смысла, основываясь на данных, используемых для вычисления значений подобия.Однако более высокое значение альфа, равное 0,5, дает мне некоторые значимые результаты с точки зрения получения значимых оценок сходства между двумя словами.Однако, когда я вычисляю верхние n похожих слов, это снова бессмысленно.Нужно ли менять все параметры, использованные в начальном процессе обучения?

Я до сих пор не могу точно определить причину, почему модель ведет себя хорошо с таким более высоким альфа-значением при вычислении сходства между двумя словамииспользованный корпус, тогда как он бессмыслен при вычислении первых n похожих слов с оценками для входного слова.Почему это так?

Отклоняется ли оно от оптимального решения.Как это проверить?

Любая идея, почему это так, глубоко ценится.

Примечание: я использую Python 3.7 на машине Windows с приглашением anaconda и передаю данные модели изфайл.

Это то, что я пробовал.

import warnings
warnings.filterwarnings(action='ignore', category=UserWarning, module='gensim')
from gensim.models import Word2Vec
import ast

path = "F:/Folder/"
def load_data():
    global Sentences
    Sentences = []
    for file in ['data_d1.txt','data_d2.txt']:
        with open(path + file, 'r', encoding = 'utf-8') as f1:
           Sentences.extend(ast.literal_eval(*f1.readlines()))
load_data()

def initialize_word_embedding():
    model = Word2Vec(Sentences, size = 200, window = 15, min_count = 5, iter = 10, workers = 4)
    print(model)
    print(len(model.wv.vocab))
    print(model.wv.similarity(w1 = 'structure', w2 = '_structure_'))
    similarities = model.wv.most_similar('system')
    for word, score in similarities:
        print(word , score)

initialize_word_embedding()    

Пример списка предложений следующий:

[[' ученый ',' время ',' комета ',' активность ',' сублимация ',' углерод ',' двуокись ',' около ',' лед ',' система '], [' несовместим ',' возраст ',' система ',' год ',' размер ',' столкновение '], [' интеллект ',' система '], [' пример ',' приложение ',' фильтр ',' изображение ',' движение ',' канал ',' оценка ',' выравнивание ','example', 'application', 'filter', 'system']]

data_d1.txt и data_d2.txt - это вложенный список (список списков лемматизированных токенизированных слов).Я предварительно обработал необработанные данные и сохранил их в файл.Теперь даю то же самое, что и ввод.Для вычисления лемматизирующих токенов я использовал популярный лемматизатор WordNet.

Мне нужна модель вложения слов, чтобы вычислить сходство между двумя словами и вычислить самые_подобные слова из заданного входного слова.Я получаю некоторые значимые оценки для метода model.wv.similarity(), тогда как при вычислении most_similar() слов слова (скажем, system, как показано выше).Я не получаю желаемых результатов.

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

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

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

Результаты, которые я получаю без установки альфа = 0,5

Редактировать в последние комментарии:

Результаты:

Word2Vec (vocab = 32716, размер = 200, альфа = 0,025)

Сходство между set и _set_ составляет: 0.000269373188960656, что для меня бессмысленно, так как оно очень и очень мало вс точки зрения точности, но я получаю 71%, устанавливая альфа как 0,5, что кажется мне значимым, так как слово set одинаково для обоих доменов.

Объяснение: Слово set должно быть одинаковым для обоих доменов (так как я сравниваю данные двух доменов с одним и тем же словом).Не путайте со словом _set_, это потому, что слово совпадает с установленным, я ввел символ _ в начале и в конце, чтобы различать одно и то же для двух разных доменов.

Лучшие 10 слов вместе с оценками _set_:

_niche_ 0.6891741752624512
_intermediate_ 0.6883598566055298
_interpretation_ 0.6813371181488037
_printer_ 0.675414502620697
_finer_ 0.6625382900238037
_pertinent_ 0.6620787382125854
_respective_ 0.6619025468826294
_converse_ 0.6610435247421265
_developed_ 0.659270167350769
_tent_ 0.6588765382766724

Принимая во внимание, что 10 лучших слов для набора:

cardinality 0.633270263671875
typereduction 0.6233855485916138
zdzisław 0.619156002998352
crisp 0.6165326833724976
equivalenceclass 0.605925977230072
pawlak 0.6058803200721741
straight 0.6045454740524292
culik 0.6040038466453552
rin 0.6038737297058105
multisets 0.6035065650939941

Почему cosine similarity value равно 0,00 для слова set для двух разных данных.

...