word2ve c или альтернатива для поиска синонимичных фраз на основе позиции - PullRequest
2 голосов
/ 21 февраля 2020

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

Например, "500 мг таблетки тиленола »будет сопоставлен с RxNorm 209459,« Ацетаминофен 500 мг оральные таблетки [Тайленол] » с оценкой 0,8, с использованием RxNav API

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

Например, «500 мг тайленола по таб» также отображается на RxNorm 209459, но только с результатом 0,67, потому что RxNorm, кажется, не знает, что «po» - это обычный медицинский жаргон для «рта» или «устного», а tab - лексический вариант «таблетки». Кажется, что он работает очень хорошо, но только с идеальным соответствием слов.

Может ли word2ve c или что-то еще обнаружить сходство между «po tab» и «устным планшетом», поскольку EHR часто содержит такие строки, как

"бла-бла-по-таб"

И RxNorm имеет

"бла-бла-оральный планшет"

с теми же "бла"?

Я попробовал, следуя демонстрационным скриптам word2ve c, но получил почти весь шум. Очевидно, что мои строки сами по себе являются короткими фразами, а не фрагментами из повествований. Тренировочный набор слишком мал ... до сих пор я тренировался на хорошо охарактеризованном корпусе из 11 026 087 (неуникальных) слов, разбросанных по 2 148 750 строкам.

Я использовал 2013 форк word2ve c, который компилируется под MacOS без лягушек.

1 Ответ

1 голос
/ 24 февраля 2020

Хотя эти небольшие фразы не совсем похожи на разнообразный текст на естественном языке, обычно используемый с 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».

...