Skip to content

Python library for correcting registry and spelling errors in user input when comparing with a database of texts.

License

Notifications You must be signed in to change notification settings

sheriff1max/recs-searcher

Repository files navigation

GitHub Workflow Status (branch) Read the docs

PyPI PyPI - Downloads

recs-searcher — библиотека для поиска похожих текстов

Библиотека позволяет находить похожие на пользовательский ввод тексты из датасета.

Содержание

  1. Проблематика
  2. Особенности библиотеки
  3. Установка
  4. Примеры применения
  5. Помощь в выборе/настройке алгоритмов

Проблематика

Пользовательский ввод может содержать как орфографические, так и реестровые ошибки.

Рассмотрим самые частые ошибки:

  • используются сокращения или полные формы слова: «Литературный институт имени А.М. Горького» || «Литературный институт им. А.М. Горького»;
  • пропущены либо добавлены слова: «Литературный институт имени А.М. Горького» || «Институт имени А.М.Горького»;
  • пропущены либо добавлены дополнительные символы: «Сибирский федеральный университет» || «Сибрский федерааальный универ»;
  • слова могут быть в не правильном порядке: Институт космических и информационных технологий || Институт информационных и космических технологий.

Данные проблемы помогает решить разработанный модуль recs-searcher (registry error correction system - searcher), основанный на известных NLP-алгоритмах.

Особенности библиотеки:

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

Установка

pip install recs-searcher

Примеры применения

  1. Соберём pipeline:
from recs_searcher import (
    dataset,  # учебные датасеты
    preprocessing,  # предобработка текста
    embeddings,  # преобразование текста в эмбеддинги
    similarity_search,  # быстрые поисковики в пространстве эмбеддингов
    augmentation,  # аугментация текста для валидации пайплайнов
    explain,  # интерпретация сходства двух текстов
    api,  # Пайплайн
)

model_embedding = embeddings.CountVectorizerWrapperEmbedding(
    analyzer='char',
    ngram_range=(1, 2),
)

pipeline = api.Pipeline(
    dataset=['Красноярск', 'Москва', 'Владивосток'],
    preprocessing=[preprocessing.TextLower()],
    model=model_embedding,
    searcher=similarity_search.FaissSearch,
    verbose=True,
)
# Pipeline ready!
  1. Найдём 3 схожих текстов в базе данных на пользовательский ввод "Красный ярск":
pipeline.search('Красный ярск', 3, ascending=True)
# return: pandas.DataFrame

Документация.

Более подробные примеры кода API.

Пример WEB-интерфейса, в который внедрена данная библиотека.

Помощь в выборе/настройке алгоритмов

Алгоритм сравнения датасета с пользовательским вводом Преимущества Недостатки
Мешок слов Хорошо подходит для исправления реестровых ошибок при отсутствии орфографических ошибок. Также подходит для задачи поиска похожих текстов из датасета на ключевые слова. Даёт качество выше для больших текстов, чем для коротких. При совершении всего одной орфографической ошибки в тексте или изменении формы слов перестаёт качественно выдавать ответы. Данный метод требователен к памяти при больших объёмах датасета.
Мешок символов Хорошо подходит для разных задач: исправление реестровых и орфографических ошибок, а также поиск похожих текстов в датасете на ключевые слова. Не зависит от положения слов в тексте, а зависит только от их символов и N-грамм. Показывает чаще лучше качество и работает быстрее, чем другие алгоритмы в этом модуле. Данный метод требователен к памяти при больших объёмах датасета. Требует тонкую настройку гиперпараметров для разных датасетов. Плохо работает на длинных текстах из-за того, что не учитывается контекст N-грамм символов.
Расстояние Левенштейна Хорошо подходит для исправления орфографических ошибок в текстах, где мало слов. Метод малотребователен к памяти по сравнению с другими алгоритмами. Крайне медленный метод. Медленно и менее качественно работает на длинных текстах, чем на коротких.
Трансформерные модели Создаёт вектора текстов фиксированной длины, что при больших объёмах датасетов может сэкономить память. Подходит для поиска больших статей из набора данных по запросу. Учитывает не только символы, но и контекст и положение слов в текстах. Можно ускорить с помощью GPU. Требует тонкую настройку гиперпараметров.

Автор