Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Поиск похожих документов

Поиск похожих документов

Михаил Жуковец (Mos.ru) @ Moscow Python №75

"Прием для поиска близких по смыслу текстовых документов. И пару слов про метод и используемые библиотеки".​​​​​​

Видео: https://moscowpython.ru/meetup/75/find-similar-docs/

Moscow Python Meetup
PRO

May 27, 2021
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Поиск похожих документов

  2. Городской поиск mos.ru Новости о Москве, городские услуги, нормативно-правовые акты,

    советы по актуальным вопросам и события 1 млн пользователей в месяц ищут различную информацию
  3. Начнем с примера https://www.mos.ru/news/item/18399073/ “Гигантский ёлочный шар с танцплощадкой внутри

    появится на Поклонной горе. Он вошёл в Книгу рекордов Гиннесса в 2016 году в номинации «Самая большая светодиодная скульптура в мире»….” https://www.mos.ru/news/item/18536073/ “Гигантский ёлочный шар с танцплощадкой внутри устанавливают на Поклонной горе. Сборка продлится до середины следующей недели. Шар вошёл в Книгу рекордов Гиннесса в 2016 году в номинации «Самая большая светодиодная скульптура в мире»…” https://www.mos.ru/news/item/13091073/ “II Международный фестиваль фейерверков «Ростех» пройдёт в Москве 23 и 24 июля...” https://www.mos.ru/news/item/11866073/ “23 и 24 июля в столице состоится II Международный фестиваль фейерверков «Ростех»...”
  4. Применение в MOS.RU 1. У MOS.RU много независимых источников и

    для устранения дублей в поиске мы используем данный метод. Довольно часто на базе одного пресс-релиза появляются “братья по содержанию” 2. При помощи этого алгоритма наш краулер понимает изменился ли контент на странице и нужно ли обновить поисковый индекс 3. Несколько схожим методом мы боремся с дублями изображений
  5. Допущения, которые будут приняты 1. Вектор, которым мы оперируем, нельзя

    назвать тематическим, но мы будем :) 2. Данным методом нельзя построить антологию, или оценить меру схожести двух документов. Он подходит только для поиска дублей. 3. Дублями мы будем считать те тексты, которые состоят из одинаковых значимых слов 4. Порядок слов не имеет решающего значения
  6. Как работает Проверяем алгоритм на новостях доступных поиску MOS.RU 1)

    Подготовка текста 2) Векторизация 3) Проекция 4) Сравнение
  7. Общие импорты на проект

  8. Нормализация и фильтрация Полный список граммем для pymorphy2 - https://pymorphy2.readthedocs.io/en/stable/user/grammemes.html

    Граммема Значение Примеры ADJF имя прилагательное (полное) хороший ADJS имя прилагательное (краткое) хорош COMP компаратив лучше, получше, выше NUMR три, пятьдесят числительное NPRO местоимение-существительное он PREP предлог в CONJ союз и PRCL частица бы, же, лишь INTJ междометие ой
  9. Подготовка текста

  10. Подготовка текста

  11. Подготовка текста

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

    провести их векторизацию. Звучит пугающе, но на самом деле все очень просто – все тексты разбиваются на уникальные слова и кодируются. По сути они преобразуются в большой список и дальше вместо каждого ключевого слова мы размещаем длинную строчку цифр, соответствющую нашему списку всех уникальных слов. Более подробно можно познакомиться тут https://searchengines.guru/ru/articles/36951
  13. Проекция https://scikit-learn.org/stable/modules/generated/sklearn.random_projection.GaussianRandomProjection.html Использовать привычный PCA нельзя из за высокой разреженности

    исходной матрицы Пример проекции на 10 компонентах:
  14. Поиск похожих документов

  15. Спасибо за внимание Михаил Жуковец git: github.com/neroslam/doubles_finder mail: [email protected]