Применение векторизации слов для нечеткого поиска | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 7 декабря, печатный экземпляр отправим 11 декабря.

Опубликовать статью в журнале

Автор:

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №24 (262) июнь 2019 г.

Дата публикации: 17.06.2019

Статья просмотрена: 541 раз

Библиографическое описание:

Печеницын, И. А. Применение векторизации слов для нечеткого поиска / И. А. Печеницын. — Текст : непосредственный // Молодой ученый. — 2019. — № 24 (262). — С. 109-112. — URL: https://moluch.ru/archive/262/60625/ (дата обращения: 23.11.2024).



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

Ключевые слова: нечеткий поиск, векторизация слов, word embedding, word2vec.

Одной из проблем при обработке поисковых запросов, является тот факт, что написание слова не связано с его смысловым значением. Как следствие, даже применение морфологического и синтаксического анализа запроса может оказаться недостаточно для разрешения имеющейся неопределенности.

В качестве возможного решения этой проблемы, рассматривается перенос слов в векторное пространство (word embedding), при осуществлении которого семантически близкие слова должны получить близкие значения векторов. Такой способ представления слов позволяет реализовать нечеткий поиск, учитывающий не только синтаксис, но и семантику запроса.

Основные предположения

Для решения задачи нечеткого поиска, в классическом подходе применяются различные методы и алгоритмы, например: расстояние Левенштейна (и его модификации), метод n-грамм, алгоритм расширения выборки (ввод искусственных ошибок в запрос) и другие. Все эти методы объединяет тот факт, что они основаны на представлении слов как последовательности символов, а не через их значение.

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

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

Реализация итестирование

Программная реализация выполнена на языке Python, для построения векторной модели используется реализация модели word2vec из библиотеки gensim, предобработка осуществляется методами из библиотеки nltk. Обучение модели произведено на датасете OpinRank Data [5].

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

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

Рис. 1. Метод модификации предложения

Применение векторной модели не ограничивается поиску с учетом синонимов и модификации предложений. Одним из преимуществ векторов является то, что это набор числовых значений, а значит к ним применимы арифметические операции. Рассмотрим это на примере следующего алгоритма:

0) Получить два сравниваемых предложения, разбить на отдельные слова. Объявить массивы для сохранения результатов. Переменная i = 1.

1) Выбрать слова из первого предложения под номерами i и i+1 как w1 и w2. Переменная j = 1.

2) Выбрать слова из второго предложения под номерами j и j+1 как w3 и w4.

3) Для каждого из слов (w1, w2, w3, w4) получить вектор (v1, v2, v3, v4)

4) Вычислить разницу векторов в словосочетании (v1 минус v2, аналогично v3 минус v4). Эта разность считается отношением слов в паре, чем ближе вектора разности, тем больше похожи выбранные пары. Для этого вычисляется взвешенная поэлементная абсолютная разность полученных векторов.

5) Если найдено соответствие между двумя парами, записать в массив результатов. Если j+1 меньше длины второго предложения, прибавить к переменной j единицу, перейти к шагу 2), иначе к шагу 6).

6) Если i+1 меньше длины первого предложения, прибавить к переменной i единицу, перейти к шагу 1), иначе завершить поиск и вывести результаты.

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

Рис. 2. Пример поиск пар словосочетаний

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

Заключение

В этой статье рассматривалась проблема осуществления поиска с применением векторизации слов. Преимущества такого подхода состоят в отсутствии необходимости вручную составлять словари или размечать текст, возможность перехода от символьных операций к числовым. Основным недостатком является необходимость использования больших выборок текста при обучении. Также следует отметить, что результаты вычислений в векторной модели необходимо интерпретировать и оценить для получения адекватных результатов.

Литература:

  1. Автоматическая обработка текстов на естественном языке и анализ данных: учеб. пособие / Большакова Е. И., Воронцов К. В., Ефремова Н. Э., Клышинский Э. С., Лукашевич Н. В., Сапин А. С. — М.: Изд-во НИУ ВШЭ, 2017. — 269 с.

2. Библиотека NLTK http://www.nltk.org/

  1. Adam Geitgey Natural Language Processing is Fun! medium.com/@ageitgey/natural-language-processing-is-fun-9a0bff37854e
  2. Madhu Sanjeevi Chapter 9.2: NLP — Code for Word2Vec neural network(Tensorflow). https://medium.com/deepmath-machine-learning-ai/chapter-9–2-nlp-code-for-word2vec-neural-networktensorflow-544db99f5334
  3. Корпус текстов OpinRank Data. kavita-ganesan.com/entity-ranking-data/
Основные термины (генерируются автоматически): векторная модель, слово, нечеткий поиск, векторное пространство, пар, поиск, последовательность символов, предложение, сосед.


Ключевые слова

нечеткий поиск, word2vec, векторизация слов, word embedding

Похожие статьи

Анализ эффективности алгоритмов сортировки и вcтроенных реализаций на примере языка программирования Java

В данной статье показана значительная роль проведения анализа работы алгоритмов сортировки на массивах данных различной размерности. Рассмотрены актуальные алгоритмы и стандартные реализации сортировки в языке программирования Java.

Метод извлечения SAO-структур из текстовых источников

В данной работе предлагается метод для извлечения SAO структур из текстовых данных на основе семантических правил. Предложен алгоритм, который адаптирован для русского языка.

Применение нечеткой логики и методов визуализации графических решений при анализе показателей финансового рынка

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

Векторизация слов для нечеткого поиска в вопросно-ответных системах

В статье автор исследует применение векторизации слов для нечеткого поиска в вопросно-ответных системах, путем улучшения точности через современные подходы к векторизации слов и поиск семантически близких слов.

Сравнительный анализ методов Наивного Байеса и SVM алгоритмов при классификации текстовых документов

В статье раскрывается понятие классификации текстовых документов для автоматического обнаружения категорий по текстам. Проводится сравнительный анализ двух самых главных алгоритмов, которыми являются методы наивного Байеса и SVM. Делается вывод, что ...

Разработка систем рекомендаций на основе Big Data

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

Линейное программирование

В данной статье рассматривается задача линейного программирования и возможный способ её решения — симплекс метод. Приведены примеры, поясняющие, что такое линейное программирование и симплекс метод.

Анализ данных на Python

В статье автор подробно исследует аналитические возможности Python, уделяя внимание ключевым библиотекам и методам, которые делают этот язык таким мощным инструментом для работы с данными.

Оптимизация работы программы по скорости методами программирования без условных операторов

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

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

В статье рассматриваются вопросы методики обучения регулярным выражениям в профильном обучении.

Похожие статьи

Анализ эффективности алгоритмов сортировки и вcтроенных реализаций на примере языка программирования Java

В данной статье показана значительная роль проведения анализа работы алгоритмов сортировки на массивах данных различной размерности. Рассмотрены актуальные алгоритмы и стандартные реализации сортировки в языке программирования Java.

Метод извлечения SAO-структур из текстовых источников

В данной работе предлагается метод для извлечения SAO структур из текстовых данных на основе семантических правил. Предложен алгоритм, который адаптирован для русского языка.

Применение нечеткой логики и методов визуализации графических решений при анализе показателей финансового рынка

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

Векторизация слов для нечеткого поиска в вопросно-ответных системах

В статье автор исследует применение векторизации слов для нечеткого поиска в вопросно-ответных системах, путем улучшения точности через современные подходы к векторизации слов и поиск семантически близких слов.

Сравнительный анализ методов Наивного Байеса и SVM алгоритмов при классификации текстовых документов

В статье раскрывается понятие классификации текстовых документов для автоматического обнаружения категорий по текстам. Проводится сравнительный анализ двух самых главных алгоритмов, которыми являются методы наивного Байеса и SVM. Делается вывод, что ...

Разработка систем рекомендаций на основе Big Data

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

Линейное программирование

В данной статье рассматривается задача линейного программирования и возможный способ её решения — симплекс метод. Приведены примеры, поясняющие, что такое линейное программирование и симплекс метод.

Анализ данных на Python

В статье автор подробно исследует аналитические возможности Python, уделяя внимание ключевым библиотекам и методам, которые делают этот язык таким мощным инструментом для работы с данными.

Оптимизация работы программы по скорости методами программирования без условных операторов

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

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

В статье рассматриваются вопросы методики обучения регулярным выражениям в профильном обучении.

Задать вопрос