Вложения слов для одного и того же слова из двух разных текстов

Если я вычислю word2vec для того же слова (скажем, "обезьяна"), один раз на основе одного большого текста из 1800 года и другого раза на основе одного большого текста из 2000 года, то результаты не будут сравнимо с моей точки зрения. Я прав? И почему это так? У меня есть следующая идея: текст из прошлого может иметь совершенно другой словарный запас, что является проблемой. Но как можно вылечить это (сделать сопоставимые вложения)?

Заранее спасибо.

1 ответ

Решение

Там нет "правильной" позиции для любого слова в Word2Vec модель - просто позиция, которая работает довольно хорошо, по отношению к другим словам и данным тренировки, после множества толчков инкрементальной тренировки. Действительно, каждая модель начинается с слов-векторов в случайных положениях малой величины, а само обучение включает в себя как заданную случайность (например, путем случайного выбора того, какие слова использовать в качестве отрицательных контрастных примеров), так и случайность порядка выполнения (как кратное потоки прогрессируют с немного разными скоростями из-за несколько произвольных вариантов планирования ЦП операционной системой).

Таким образом, ваши модели "предложения-от-1800" и "предложения-от-2000" будут отличаться, потому что учебные данные различны - вероятно, из-за того, что использование авторов было разным, и что каждый корпус представляет собой лишь крошечный образец всех существующее использование. Но также: просто тренировка на корпусе "samples-from-1800" дважды подряд приведет к появлению разных моделей! Каждая такая модель должна быть примерно такой же хорошей, как и другая, с точки зрения относительного расстояния / положения слов относительно других слов в той же модели. Но координаты отдельных слов могут быть очень разными и несопоставимыми.

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

Так, если, например, вам нужно сравнить "calenture" (старое слово для тропических лихорадок, которое может отсутствовать в вашем корпусе 2000-х) с "penicillin" (который был обнаружен в 20-м веке), лучше всего было бы перемешать вместе два корпуса в один корпус и обучить одну модель. Поскольку каждое слово появлялось рядом с определенными словами, появившимися в обеих эпохах, с относительно устойчивым значением, их векторы-слова могли бы тогда быть сопоставимыми.

Если вам нужен только один комбинированный вектор-слово для "обезьяны", этот подход также подойдет для ваших целей. Да, значение слова меняется со временем. Но даже в любой отдельный момент времени слова являются многозначными: они имеют несколько значений. И векторы слов для слов со многими значениями имеют тенденцию перемещаться в координаты между каждым из их альтернативных значений. Таким образом, даже если значение "обезьяна" изменилось в значении, это все-таки тот случай, когда использование комбинированного эра корпуса, вероятно, даст вам один вектор для "обезьяны", который разумно представляет его среднее значение по всем эпохам.

Если вы специально хотите смоделировать изменение значений слов во времени, то вам могут потребоваться другие подходы:

  • Возможно, вы захотите построить отдельные модели для эпох, но изучите переводы между ними, основываясь на идее, что некоторые слова могут меняться - мало, а другие - много. (Есть способы использовать определенные "якорные слова", которые, как предполагается, имеют одинаковое значение, для изучения трансформации между отдельными Word2Vec затем примените это же преобразование к другим словам, чтобы проецировать их координаты в другую модель.)

  • Или создайте комбинированную модель, но, вероятнее всего, замените слова, изменяющие значения которых вы хотите отслеживать, альтернативными токенами определенной эпохи. (Например, вы можете заменить некоторую пропорцию вхождений 'обезьяна' на 'обезьяна @1800' и 'обезьяна @2000', в зависимости от ситуации, чтобы в итоге вы получили три вектора слов для 'обезьяна', 'обезьяна @1800', ' Обезьяна @ 2000 ', что позволяет сравнивать разные чувства.)

Некоторая предшествующая работа по отслеживанию значений с течением времени с использованием векторов-слов - это проект "HistWords":

https://nlp.stanford.edu/projects/histwords/

Другие вопросы по тегам