вложениях
Давайте вернемся назад и поймем, что такое word2vec. Word2vec (например, Glove, FastText и т. Д.) - это способ представления слов в качестве векторов. Модели ML не понимают слова, они понимают только числа, поэтому, когда мы имеем дело со словами, мы хотели бы преобразовать их в числа (векторы). Горячее кодирование - это один наивный способ кодирования слов как векторов. Но для большого словарного запаса горячее кодирование становится слишком длинным. Также нет семантической связи между горячим закодированным словом.
С DL пришло распределенное представление слов (так называемые вложения слов). Одним важным свойством этих вложений слов является то, что векторное расстояние между связанными словами мало по сравнению с расстоянием между несвязанными словами. т.е. distance(apple,orange) < distance(apple,cat)
Так как же обучаются эти модели встраивания? Модели встраивания обучаются на (очень) огромном корпусе текста. Когда у вас будет огромный корпус текста, модель узнает, что яблоки оранжевого цвета (много раз) используются в одном и том же контексте. Он узнает, что яблоко и апельсин связаны. Таким образом, для обучения хорошей модели встраивания вам нужен огромный корпус текста (не независимые слова, потому что независимые слова не имеют контекста).
Тем не менее, редко обучают скретч-модели формы встраивания в слова, потому что хорошая модель встраивания доступна в открытом коде. Тем не менее, если ваш текст относится к конкретному домену (скажем, медицинский), вы изучаете передачу по открытым доступным встраиваниям слов.
Вне словарного запаса (OOV) слова
Вложение слов, таких как word2vec и Glove, не может возвращать вложение для слов OOV. Однако вложения типа FastText (спасибо @gojom за указание на них) обрабатывают слова OOV, разбивая их на n-граммы символов и формируя вектор путем суммирования векторов подслов, которые составляют слово.
Задача
Приходя к вашей проблеме,
Случай 1: Допустим, пользователь вводит слово WAL
, во-первых, оно не является допустимым английским словом, поэтому оно не будет в словаре, и трудно понять смысл полного вектора к этому. Встраивания, такие как FastText, обрабатывают их, разбивая их на n-граммы. Такой подход дает хорошие вложения для слов с ошибками или сленга.
Случай 2: Допустим, пользователь вводит слово WALL
, и если вы планируете использовать вектор аналогичным образом, чтобы найти ближайшее слово, оно никогда не будет близко к Walmart
, поскольку семантически они не связаны. Это скорее будет близко к словам, как window, paint, door
.
Заключение
Если ваш поиск для семантически похожих слов, тогда решение с использованием векторных вложений будет хорошим. С другой стороны, если ваш поиск основан на лексиконах, то вложение векторов не поможет.