Преобразовать список слов в текстовом файле в слова векторов - PullRequest
0 голосов
/ 25 марта 2019

У меня есть текстовый файл с миллионами строк, которые я хотел преобразовать в векторы слов, и позже я могу сравнить эти векторы с поисковым ключевым словом и посмотреть, какие все тексты ближе к поисковому ключевому слову.

Моя дилемма - все учебные файлы, которые я видел для Word2vec, имеют форму абзацев, так что каждое слово имеет некоторый контекстный смысл в этом файле.Теперь мой файл является независимым и содержит разные ключевые слова в каждой строке.

Мой вопрос заключается в том, возможно ли создавать встраивание слов с использованием этого текстового файла или нет, если нет, то каков наилучший подход для поиска соответствующего поиска?ключевое слово в этом миллионе текстов

** Моя структура файла: **

Walmart
Home Depot
Home Depot
Sears
Walmart
Sams Club
GreenMile
Walgreen

Ожидается

search Text : 'WAL'

Результат отМой файл:

WALGREEN
WALMART
WALMART

Ответы [ 2 ]

3 голосов
/ 25 марта 2019

вложениях

Давайте вернемся назад и поймем, что такое 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.

Заключение

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

0 голосов
/ 26 марта 2019

Если вы хотите найти walmart из фрагмента, например wal, вы, скорее всего, будете использовать что-то вроде:

  • поиск подстроки или префикса по всем записям; или
  • обратный индекс-символа-н-граммы; или
  • своего рода расстояние редактирования, рассчитанное для всех записей или подмножества вероятных кандидатов

То есть, из вашего примера желаемого вывода, это на самом деле не работа для векторов слов, даже если некоторые алгоритмы, такие как FastText, смогут предоставлять грубые векторы для фрагментов слов на основе их перекрытия с обучаемыми словами.

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

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

  • списки магазинов, посещенных одним покупателем
  • списки магазинов с одинаковым товаром / UPC
  • текст из гораздо большего корпуса (например, текст, отсканированный в Интернете, или, может быть, из Википедии), в котором достаточно контекстного использования каждого названия магазина. (Вы просто выбросили бы все другие слова, созданные в результате такого обучения, но векторы для ваших токенов могут по-прежнему использоваться в вашем домене.)
...