Хотя эти небольшие фразы не совсем похожи на разнообразный текст на естественном языке, обычно используемый с word2ve c и связанными с ним алгоритмами, с достаточным количеством данных, это может быть полезно. Он будет стремиться узнать, какие слова являются «сильно родственными», даже если не точными синонимами.
Наилучшие данные содержат множество примеров использования каждого токена в различных контекстах, включая смеси разных lin go. Например, если у вас есть только тренировочные данные, которые включают ...
blah blah oral tablet
blah blah po tab
... ему будет сложнее обнаружить сходство между "устным" и "по", и "планшетом" & 'tab', чем если бы у вас также были обучающие примеры, включающие:
blah blah oral tab
blah blah po tablet
(то есть: данные, которые немного более хаотичны / постепенны в своих микшерах lin go, могут быть лучше, чем то, что хранит альтернативные соглашения совершенно разные.)
Когда вы говорите, что получаете "весь шум", являются ли списки наиболее похожих слов подходящими для ваших целей? (Например, «устно» и «по» очень близко после тренировки?) Если это так, хотя бы немного, вы можете быть на правильном пути и иметь возможность настраиваться дальше, чтобы получить лучшие результаты. Если нет, ваши данные или параметры обучения могут быть недостаточными или иметь другие проблемы.
При обучении с меньшими или менее разнообразными данными может быть полезно уменьшить размерность вектора или увеличить количество тренировочных эпох, чтобы выжать значимые конечные векторные позиции. Если ваши данные имеют какой-то естественный порядок сортировки, который группирует все связанные элементы вместе (например, некоторые слова появляются только рано или поздно), то первоначальная последовательность примеров может немного помочь.
Параметр window
может особенно влиять на то, подчеркивает ли результирующая модель точное сходство 'syntacti c' (слово с заменой слов), или общее сходство домена / топи c. Меньшие windows - скажем, всего 1-3 слова - подчеркивают вставные замещающие слова (как синонимы, так и антонимы), а большие windows находят более общие ассоциации.
(См. этот ответ , чтобы узнать больше контекста и ссылку на статью, в которой наблюдался этот эффект размера окна.)
Возможно, вы захотите попробовать более позднюю версию word2ve Реализация c, как в библиотеке Python gensim, если какая-то часть вашего конвейера находится в Python или вы хотите попробовать несколько вариантов, которых не было в исходной версии Google word2vec.c
(например, использование значения по умолчанию ns_exponent
, которые, как предложил один документ, были особенно полезны в приложениях рекомендаций, где частоты токенов корзины связанных элементов несколько отличаются от естественного языка).
Если многие из ваших «неизвестных» слов находятся в Сокращение фактов или опечатки известных слов, может помочь уточнение word2ve c на Facebook «FastText». Он также запоминает векторы для подслов, поэтому тянет «табуляцию» и «таблетку» ближе друг к другу, и при столкновении с невиданным ранее словом может собрать вектор-кандидат из фрагментов слова, которые обычно лучше, чем случайное предположение, то же самое как люди интуитивно понимают общий смысл слова из корней слов. (Python gensim также содержит реализацию FastText.)
Если вы достигли словесной модели, чьи списки наиболее похожих слов кажутся вам разумными, вы можете попробовать:
когда у вас есть текст со словами, которых вы не знаете в RxNorm, попробуйте заменить неизвестные слова ближайшим соседом из RxNorm
используя «Расстояние от Word Mover» для сравнения ваших фраз с известными фразами - часто это хорошо для количественной оценки сдвига между короткими фразами, используя векторы слов в качестве входных данных. Это дорого для больших текстов, но для фрагментов из 4-6 слов может работать очень хорошо. (Он доступен в классах слов-векторов gensim как метод .wmdistance()
.)
Наконец, в той степени, в которой ограничено количество типов 'tab' -> 'tablet', точных замена, постепенно заменяющая любые нечеткие открытия из анализа word2ve c на синонимы, подтвержденные экспертами, кажется хорошей идеей, чтобы заменить статистические предположения достоверными вещами.
Возвращаясь к приведенному выше примеру, если вы уже знали «tab» -> «tablet», но еще не «po» -> «oral», возможно, имеет смысл взять все тексты, которые имеют «tab» или 'tablet' и создайте новые дополнительные примеры syntheti c с обратным словом. Это может дать последующему обучению word2ve c дополнительный намек / толчок в направлении способности понять, что «po» / «устный» заполняет одну и ту же относительную роль обоими «tab» / «tablet».