Вопрос или проблема
Я пробую свои силы в обучении модели Word2Vec с использованием gensim. Я создал простой файл для обучения, который по сути содержал одну и ту же строку, повторенную несколько раз
развлечения фильмы Фильмы кино
развлечения Фильмы
развлечения фильмы
развлечения кино
Идея использования обучающего файла, подобного вышеуказанному, заключается в том, чтобы гарантировать, что такие слова, как фильмы и т.д., окажутся наиболее похожими на развлечение.
>>> wv_model = gensim.models.Word2Vec(sents, size=300, min_count=1,
workers=8, window=1, sg=0)
Но когда я проверяю результаты, оказывается, что развлечение имеет отрицательную оценку схожести
>>> wv_model.most_similar(positive=['Фильмы'])
[('кино', 0.14602532982826233), ('фильмы', -0.022810805588960648), ('развлечение', -0.030070479959249496)]
Результат, которого я пытаюсь добиться, заключается в том, чтобы наиболее похожим словом для фильмы
, фильмы
, кино
оказалась развлечение
Word2vec (или, например, GloVe) обучает похожие представления для слов, которые появляются в *похожие контексты (т.е. соотносятся с одной и той же распределением слов), а не непосредственно со-существуют.$^*$ Это интуитивно понятно, поскольку слова, которые появляются вместе, не обязательно являются похожими (например, синонимичными), но могут быть иначе связанными, например, синий и небо.
Например, скажем, фильм и фильм часто соотносятся с такими словами, как актер, режиссер, рейтинг и т.д., тогда их представления будут похожими (по сравнению с другими словами), даже если фильм и фильм никогда не встречаются вместе (что часто бывает с синонимами, так как вы бы сказали одно или другое).
[$^*$ конечно, если два слова часто встречаются вместе, то их контексты могут быть схожи.]
Настойчиво заставить представления двух слов $w_1, w_2$ быть похожими не просто (если только вы не измените их представления вручную..), поскольку представления отображают статистику из корпуса. Для того чтобы word2vec мог изучать похожие представления, распределения слов, которые соотносятся с $w_1, w_2$, должны быть похожи. Один из способов (или “хака”) сделать это может заключаться в том, чтобы дублировать корпус и во втором экземпляре заменить все вхождения $w_1$ на $w_2$ и наоборот. Затем обучаться на обеих копиях, объединенных вместе.
[Более подробная информация, если интересно: Слова, которые непосредственно соотносятся, обычно имеют более высокое скалярное произведение между их представлениями, поскольку это приближает их связанную точечную взаимную информацию (например, смотрите этот документ для информации). Однако похожесть оценивается по косинусу угла между представлениями (1, если идентичны, 0, если ортогональны и т.д.), что проверяет, находятся ли представления в одном направлении. Поскольку представление слова отражает распределение всех слов, которые с ним соотносятся (например, смотрите этот документ), представления, имеющие похожие направления, обычно указывают на слова, имеющие похожие распределения со-существования, т.е. похожесть.]
Ответ или решение
Для обеспечения высокой схожести обучаемых векторных представлений слов (word embeddings) с определенными словами, такими как "развлечения" и "фильмы", необходимо учитывать несколько ключевых аспектов.
-
Статистическая природа векторного представления: Модели, такие как Word2Vec, обучаются на основе контекстуальной информации, что означает, что схожесть слов определяется тем, как часто они встречаются в схожих контекстах в тексте. Если слова "развлечения", "фильмы", "кино" и "мультики" не имеют общего контекста, модель может не уметь захватить их взаимосвязь.
-
Построение датасета: Ваш текущий метод создания обучающего файла, состоящего из повторяющихся строк, мог быть недостаточно изолированным. Для улучшения обучения попробуйте добавить больше разнообразия в данные. Включите контекстные слова, которые часто встречаются в сочетании с вашими целевыми словами. Например, можно расширить датасет так:
развлечения фильмы кино развлечения фильмы актер фильмы развлекательный кино критики развлекательные программы
-
Дублирование и модификация контекста: Если ваша цель — обеспечить схожесть конкретных пар слов, вы можете использовать отработанный прием. Создайте два набора текстов, где слова в одном наборе подвергаются замене, например: все "развлечения" заменяются на "фильмы" и наоборот. Это поможет модели увидеть, что оба слова часто выступают в одном контексте.
-
Тренировка модели с изменением параметров: Попробуйте использовать разные параметры для обучения вашей модели Word2Vec. Например, изменяйте размер окна (window) для захвата большего контекста. Увеличьте
size
(размер вектора) для более детального представления или изменитеsg
на 1 для использования Skip-gram, что может помочь при обучении на меньших выборках данных. -
Постобработка и дальнейшая доработка: После первоначального обучения извлеките вектора для целевых слов и вручную настраивайте их при необходимости, чтобы достичь желаемого уровня схожести. Можно использовать метод, при котором к вектору "фильмы" добавляется вектор "развлечения", что поможет сместить его в нужном направлении.
-
Оценка результатов: После внедрения указанных методов дополнительно проверяйте модель, используя функции, такие как
most_similar()
, чтобы оценить изменения в схожести и корректировать подход по мере необходимости.
В завершение, помните, что для успешного достижения нужной схожести между словами потребуется творческое мышление и эксперименты. Удачи в обучении вашей модели!