Как добавить термины OOV в модель вложения слов - PullRequest
1 голос
/ 11 апреля 2019

Я использую модель вложения слов (FastText через библиотеку Gensim), чтобы расширить условия поиска.Итак, в основном, если пользователь пишет «операционная система», моя цель состоит в том, чтобы расширить этот термин очень похожими терминами, такими как «os», «windows», «ubuntu», «software» и т. Д.

Модельработает очень хорошо, но сейчас пришло время улучшить модель с помощью «внешней информации», под «внешней информацией» я имею в виду термины OOV (вне словаря) ИЛИ термины, которые не имеют хорошего контекста.

Следуя примеру, который я написал выше, когда пользователь пишет операционная система , я хотел бы расширить запрос с помощью «общих» терминов:

Термины, встроенные в модель FastText:

  • windows
  • ubuntu
  • software

AND

термины, которые представляют (организации / компании) подобные«Microsoft», «Apple», поэтому полный запрос будет выглядеть следующим образом:

  • term : операционная система
  • запрос : операционная система,ОС, программное обеспечение, Windows, IOS, Microsoft, Apple

Моя проблема в том, что я не имеюУ меня есть компании внутри корпуса ИЛИ, если они есть, мне не нужно много контекста, чтобы «связать» Microsoft с «операционной системой».

Например, если я извлечу часть из корпуса, я смогу прочитать «..Я начал работать в Microsoft в ноябре 2000 года с моим другом Джоном ... "так что, как вы можете видеть, я не могу контекстуализировать слово" Microsoft ", потому что у меня действительно нет хорошего контекста.

НебольшойРезюме:

  1. У меня есть корпус, где компании (термины) имеют плохой контекст
  2. У меня есть большая база данных с компаниями и описанием того, что они делают.

Что мне нужно сделать:

Я хотел бы включить компании в мою модель FastText и установить "вручную" их контекст слов / облако связанных терминов.

Идеи?

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

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

Если вы как-то знаете, a priori , что 'microsoft' должно появиться в некоторых конкретных векторных координатах, тогда, конечно, вы можете исправить модель, чтобы включить это слово-> векторное отображение.(Хотя такие классы моделей часто не включают в себя удобные методы для таких добавочных дополнений, потому что ожидается, что слова обучаются в массе из корпусов, а не продиктованы индивидуально.)

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

Действительно, вам нужно найти адекватные данные для тренировок.И затем, предполагая, что вы хотите, чтобы векторы для этих новых терминов находились в «одном и том же пространстве» и были сопоставимы с вашими существующими векторами слов, объедините это с вашими предыдущими данными и объедините все данные в одну объединенную модель.(И, кроме того, для алгоритма, подобного FastText, для синтеза разумных векторов угадывания для никогда ранее не замеченных слов OOV, требуется множество примеров слов, которые имеют перекрывающиеся значения и перекрывающиеся фрагменты символьного грамма.)

Расширение вашего корпуса, чтобы иметь лучшие учебные данные, скажем, для 100 названий целевых организаций, может быть так же просто, как просмотреть предложения / параграфы, включая имена из доступных источников, таких как Википедия или Интернет.

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

1 голос
/ 11 апреля 2019

Нет простого способа сделать это. Алгоритм FastText использует информацию на уровне символов, поэтому он может вывести вложения для невидимых слов. Вот что пишет FastText о представлении слов:

enter image description here

Однако это имеет смысл только в случае слов, где вы можете понять, что они означают, зная части. Например, если у вас было надежное вложение для «прогулки», но не для «ходьбы» и было много слов, заканчивающихся на «ing», FastText мог бы вывести вложение. Но это, очевидно, не может работать с такими словами, как «Microsoft».

Лучшее, что вы можете сделать, - это обучить встраивания данные, содержащие слова, с которыми вы хотите, чтобы модель работала в жанре как можно более похожими. Если ваш текст на английском языке, tt не должно быть слишком сложным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...