Кейс: учим поисковый движок распознавать грамматические ошибки

Когда нетпиковец сталкивается с задачей, требующей временных затрат (например, создать проект Звезды cмepти или построить компактный аппарат холодного ядерного синтеза), он в первую очередь думает, как автоматизировать эту работу. Результаты таких размышлений мы собираем на cпециальной странице нашего сайта. Сегодня мы расскажем о том, как в недрах агентства Netpeak рождается новый полезный сервис.
Давным-давно, в далекой-далекой галактике мы решили изменить поисковый движок сайта клиента для повышения видимости страниц в обычном поиске.
Задача
Как орфографические ошибки могут повлиять на позиции сайта в выдаче? Поисковый движок клиентского проекта, с которым нам пришлось работать, создавал отдельную страницу под каждый запрос. Так как запросы бывают с опечатками, то таких страниц накопилась целая гора — как правильных, так и с
Нашей задачей было сделать так, чтобы все варианты запросов — как правильные, так и с ошибками — вели на одну страницу. Например, для каждого из запросов baseball, basaball, baaeball, baselball были свои страницы, а нужно было сделать так, чтобы все варианты сходились на одну страницу с правильным запросом — baseball. В таком случае страница будет соответствовать правильной форме запроса и мы сможем избавиться от мусора в выдаче.
Примеры групп:
Стоит отметить, что агентствам далеко не всегда доверяют внедрения изменений в движке сайта. Так что мы благодарны нашему клиенту за возможность реализации этого проекта.
Цель
Создать чёткий работающий механизм простановки редиректов со страниц для фраз с ошибками на страницу клиентского сайта с правильной фразой.
Зачем заказывать сбор семантического ядра у агентства Это нужно как для улучшения сканирования и индексации целевых страниц поисковиком, так и для построения
Как рождался новый метод
Самое простое решение, которое тут же приходит в голову — загнать запросы в Google, а он нам честно исправляет. Но организовать такую пробивку — довольно затратное мероприятие. Поэтому мы с товарищами пошли другим путем. Наш математик-аналитик решил использовать лингвистический подход (внезапно!) и построить языковую модель.
Что это значит? Мы определяем вероятность встретить слово в языке и для каждого слова находим вероятности допустить в нем разные ошибки. Все бы ничего, и теория тут красивая, но для сбора такой статистики нужно иметь огромный размеченный текстовый корпус для каждого языка (опять же, ближе всего к этому подошли поисковики). Естественно, возникли вопросы, как это делать и кто все это будет воплощать в код. До нас подобным делом никто не занимался (если знаете кейс — киньте ссылку в комментарии), поэтому методику разpaбатывали с нуля. Было несколько идей и заранее не было очевидно, какая из них лучше. Поэтому мы ожидали, что разработка будет вестись циклически — подготовка идеи, реализация, тестирования, оценка качества, а затем решение — продолжать доpaбатывать идею или нет.
Реализацию технологии можно условно разбить на три этапа. О каждом из них — подробнее.
Этап №1. Формирование проблемы. Первые грабли
Внимание! После этой строки будет много терминов, которые мы постарались объяснить максимально простым языком.
Так как дополнительная информация (словари, частоты, логи) недоступна, то были попытки решить задачу с теми ресурсами, которые у нас были. Мы испробовали разные методы кластеризации. Основная идея — в том, что слова из одной группы должны не слишком сильно различаться.
Кластеризация — процеДypa, выполняющая сбор данных, содержащих информацию о выборке объектов, и затем упорядочивающая объекты в сравнительно однородные группы.
Для того, чтобы посчитать степень различия между двумя запросами на разных этапах, мы использовали расстояние Левенштейна и коэффициент Жаккарда на би- и триграммах.
Расстояние Левенштейна показывает, какое минимальное количество изменений (удаление, вставка и замена) в строке А надо сделать, чтобы получить строку В.
Пример:
- Замена символа: sh[e]res — sh[i]res, sh[o]res;
- Вставка символа: sheres — s[p]heres;
- Удаление: gol[d][f] — gol[]f, gold[].
В каждом из примеров расстояние между словом с ошибкой и правильной формой — 1 исправление.
Коэффициент Жаккарда на би- и триграммах помогает выяснить, сколько общих комбинаций из двух- или трехсимвольных слогов есть у строк А и В.
Пример: пусть мы рассматриваем строки A = snowboard и B = border. Общая формула коэффициента для биграмм имеет вид:
J = (число одинаковых биграмм для А и В) / (общее число биграмм в А и В)
Разобьем строки на биграммы:
биграммы для A = { sn, no, ow, wb, bo+, oa, ar, rd+ } - 8 штук; биграммы для B = { bo+, or, rd+, de, er } - 5 штук; Плюсиками отмечены одинаковые биграммы их 2 штуки - bo и rd.
Для триграмм будет аналогично, только вместо двух букв будут использоваться три. Коэффициент Жаккарда для них будет такой:
J = 2 / (8 + 5 - 2) = 0.18
Пример более похожих слов:
А = baseball и В = baaeball { ba+, as, se, eb+, ba+, al+, ll+ } { ba+, aa, ae, eb+, ba+, al+, ll+ } J = 5 / (7 + 7 - 5) = 0.56
Хотя коэффициент Жаккарда и работает быстрее, но не учитывает порядок слогов в слове. Поэтому использовался в основном для сравнения с расстоянием Левенштейна. Теоретически, тут все было просто. Методики кластеризации для малых данных решаются достаточно легко, но на пpaктике оказалось, что для завершения разбивки нужны либо огромные вычислительные мощности, либо — годы времени (а в идеале — и то, и другое). За две недели работы был написан скрипт на Python. При запуске он читал фразы из файла и выдавал списки групп в другой файл. При этом, как и любая программа этот скрипт грузил процессор и использовал оперативную память.
Большинство испытанных методов требовали теpaбайтов памяти и недели процессорного времени. Мы же адаптировали методы так, чтобы программе хватало 2 гигабайта памяти и одного ядра. Впрочем, миллион запросов обpaбатывался примерно 4-5 дней. Так что время выполнения задачи все равно оставляло желать лучшего. Результат работы алгоритма на небольшом примере можно представить в виде графика:
В применении к клиентскому проекту это означает, что страницы, соответствующие запросам в одном кластере, будут склеены друг с другом 301 редиректом. Напомним, что нашей целью было создать чёткий работающий механизм простановки редиректов со страниц для фраз с ошибками на страницу клиентского сайта с правильной фразой. Но даже на таком примере очевидны недочеты:
- Непонятно, как из групп находить правильные формы и есть ли они там вообще.
- Неизвестно, какие пороги для ошибок использовать. Если будет большой порог (больше 3-х ошибок), то группы будут очень большими и замусоренными, если слишком маленький — то каждое слово образует свою группу, что нас также не устраивало. Найти какое-то универсальное, приемлемое для всех групп значение — невозможно.
- Неясно, что делать со словами, которые могут быть отнесены одновременно к нескольким группам.
Этап №2. Упрощение. Новая надежда
Мы переделали алгоритм, приблизив его к традиционным механическим корректорам грамматики. Благо, таких достаточно. В качестве базы была выбрана библиотека для Python — Enchant. В этой библиотеке есть словари пpaктически для любого языка мира, в использовании она довольно проста, и есть возможность получить подсказки — что на что нужно исправлять. В ходе предыдущего этапа мы многое узнали о видах запросов и о том, на каких языках могут быть эти запросы.
Из открытого доступа были собраны следующие словари:- английский (Великобритания) ;
- английский (США) ;
- немецкий;
- французский;
- итальянский;
- испанский;
- русский;
- украинский.
Дальше мы брали фразы и разбивали их на слова. Для каждого слова:
- Если оно правильное (находится в одном из словарей) — оставляем его как есть;
- Если оно неправильное — получаем список подсказок и берем первую попавшуюся;
- Все слова вновь склеиваем в фразу. Если такой фразы мы раньше не встречали, то создаем для неё группу. Исправленная форма фразы становится её «центром». Если же встречали, то значит для этой фразы уже есть своя группа, и мы добавляем туда новую ошибочную форму.
В итоге мы получили центр группы и список слов из этой группы. Тут, конечно, все лучше, чем в первый раз, но появилась скрытая угроза. Из-за специфики проекта в запросах очень много имен собственных. Есть и имена-фамилии людей, и города, организации, и географические местности, и даже латинские названия динозавров. В дополнение ко всему, мы обнаружили слова с неправильной трaнcлитерацией. Так что мы продолжили искать пути решения проблемы.
Этап №3. Дополнения и пробуждение Силы
Проблема трaнcлитерации решилась довольно просто и традиционно. Во-первых, сделали словарик соответствия букв кириллицы и латиницы.
В соответствии с ним преобразовали каждую букву в проверяемых словах и отметили, есть ли для полученного слова исправление по словарю. Если вариант с трaнcлитерацией имел наименьшее количество ошибок, то мы выбирали его как правильный. А вот имена собственные — тот еще орешек. Самым простым вариантом пополнить словари оказался сбор слов из дампов Википедии. Однако и в Вики есть свои слабые места. Слов с ошибками там довольно много, а методика их фильтрации еще не идеальна. Мы собрали базу слов, которые начинались бы с большой буквы, и без знаков препинания перед ними. Эти слова и стали нашими кандидатами в имена собственные. Например, после обработки такого текста подчеркнутые слова добавлялись в словарь:
При внедрении алгоритма оказалось, что для поиска подсказок в дополненном словаре Enchant иногда требуется больше 3 секунд на слово. Чтоб ускорить этот процесс, была использована одна из реализаций автомата Левенштейна.
Если коротко, идея автомата состоит в том, что по имеющемуся словарю мы строим схему переходов. При этом нам заранее известно, сколько исправлений в словах будут для нас приемлемы. Каждый переход означает, что мы делаем какое-то преобразование над буквами в слове — оставляем букву или применяем один из видов исправления — удаление, замена или вставка. А каждая вершина — это один из вариантов изменения слова.
Теперь, допустим, у нас есть слово, которое мы хотим проверить. Если в нем есть ошибка, нам нужно найти все подходящие нам формы исправления. Последовательно мы начинаем двигаться по схеме, перебирая буквы проверяемого слова. Когда буквы закончатся, мы окажемся в одной или нескольких вершинах, они и укажут нам варианты правильных слов.
На изображении представлен автомат для слова food со всевозможными двумя ошибками. Стрелка вверх означает вставку символа в текущую позицию. Стрелка по диагонали со звездочкой — замена, с эпсилон — удаление, а по горизонтали — буква остается без изменений. Пусть у нас есть слово fxood. Ему будет соответствовать путь в автомате 00-10-11-21-31-41 — что равносильно вставке в слово food буквы x после f.
Кроме того, мы провели дополнительную работу по расширению собранных основных словарей, отсеиванию заранее не словарных фраз (названия моделей товаров и разные идентификаторы) в автоматическом режиме, внедрили трaнcлитерацию и поиск по дополнительному словарю.
Что в итоге?
Мы еще работаем над модернизацией алгоритма, но уже на данном этапе разработки мы получили инструмент, которым можно чистить мусор, вроде облаков тегов, и склеивать 301 редиректами ненужные страницы. Такой инструмент будет особенно эффективен для небольшого количества слов с ошибками, но и на больших массивах показывает вполне удовлетворительные результаты. Промежуточный вариант скрипта отправлен клиенту для формирования блока перелинковки. По этому блоку можно будет собирать дополнительную информацию об исправлениях запросов. Полностью результаты работы скрипта на внедрение мы не отправляли, потому что все еще работаем над улучшением качества работы скрипта.
На создание кода и его испытания в общем ушло 40 часов работы математика-аналитика. Вывод: если вам однажды понадобится обработать около двух миллионов запросов — не отчаивайтесь. Такие задачи можно автоматизировать. Понятно, что добиться 100% точности будет очень сложно, но обработать корректно хотя бы 95% процентов информации — реально.
Хочу быстро найти клиентов онлайн
Комментарии:
Происходит все большая автоматизация рекламы от Google. И это хорошо....
31 08 2026 0:21:20
Улучшайте свой уровень английского. Упражнения для В1 — Intermediate («Средний+»). Узнать больше!...
30 08 2026 10:50:59
Повышение эффективности продаж через звонки с помощью call tracking....
29 08 2026 17:13:51
За 10 месяцев сотрудничества увеличили небрендовый на 99%, а общий трафик — в два раза. Рассказываем не только о результатах, но и подходе создания реалистичного прогноза SEO-продвижения сайта. Читать дальше!...
28 08 2026 9:34:50
Как добавить свою рекламу через поисковый сервис с картинками в Google....
27 08 2026 16:56:57
Инструкция для новичков по одновременной работе с кампаниями, а также объявлениями и группами в Яндекс.Директ...
26 08 2026 20:26:20
Как построить самостоятельную комaнду и научиться спокойно делегировать...
25 08 2026 13:31:41
То, как вы читаете на мониторе или в смартфоне, значительно отличается от чтения книги или печатного журнала. Когда вы пишете текст для веба, очень важно знать об этой особенности....
24 08 2026 0:43:23
Рекламируем онлайн-уроки к 1 сентября. Именно сочетание Facebook и Google Ads помогло нам сначала обратиться к родителям (которые, например, листают соцсеть по пути домой) и потом уже напомнить о себе с помощью Google Рекламы...
23 08 2026 12:59:15
Минусовки это не только про эстраду. Какой метод кросс-минусовки ключевых слов лучше?...
22 08 2026 0:21:37
Мы собрали и проанализировали ответы 270 владельцев и маркетологов...
21 08 2026 7:15:12
89% предпринимателей не тестируют свои продающие тексты. О том, что и как нужно тестировать, рассказал в гостевом посте директор Студии эффективных текстов Владимир Руков....
20 08 2026 9:29:40
И зачем топ-менеджерам разбираться в настройках кампаний, повышать свою техническую грамотность? Показываем на примерах и раскладываем по полочкам....
19 08 2026 7:42:31
В коробку [SEO 2.0] вместе с самим поисковым продвижением входят дополнительные ценности Netpeak: унифицированные действия по увеличению продаж, улучшения удобства работы и преимущества бренда Netpeak...
18 08 2026 8:36:28
Примеры креативного авторского стиля копирайтеров, которые старались обыграть УТП продукта, услуги, стремились необычно подать обычное. Узнать больше!...
17 08 2026 23:20:40
Кейсы, фишки и советы, опыт крупных брендов, маркетологов....
16 08 2026 4:37:49
Продвижение крупного интернет-магазина в перегретой нише...
15 08 2026 4:25:12
Помогают ли комментарии повысить эффективность рекламных постов? Единственный способ выяснить наверняка — провести A/B-тестирование в Facebook. Спойлер: тональность комментария также имеет значение в Facebook...
14 08 2026 16:44:40
Устраняем причины, по которым пользователи покидают сайт без покупки....
13 08 2026 12:33:58
«Rework» — одна из самых любимых книг нетпиковцев....
12 08 2026 2:47:41
В 2019 году в цикл зрелости вошли 28 технологий и инструментов...
11 08 2026 3:33:10
Айти эксперт Женя Розинский о том, почему нацию айти развивают продуктовые бизнесы, а не outsourcing сервисы...
10 08 2026 10:31:46
Как распредляются зарплаты по грейдам и специализации: ежегодное исследование Serpstat....
09 08 2026 20:32:59
Определение, исследование и проверка конкурентов в Similarweb — первый шаг перед запуском и масштабированием проекта...
08 08 2026 13:26:26
Как найти тему для поста, который и в онлайн поиске будет хорошо ранжироваться, и по социалкам разойдется, и комментарии в треде обеспечит...
07 08 2026 6:54:53
В основе продвижения любых продуктов фигурирует ЦА и её потребности. Рассказываем, как с ней работать в разрезе Инстаграм и Facebook так, чтобы РК давала максимальный профит...
06 08 2026 13:57:12
Основные этапы раскрутки сайта. Что такое и как работает поисковая оптимизация, ее виды, особенности, преимущества...
05 08 2026 7:52:13
Microsoft, Facebook и другие технологические компании заявляют, что метавселенная — это будущее интернета. Или настоящее? Давайте разберемся...
04 08 2026 18:10:10
Используем маску ввода для оптимизации сбора телефонных номеров в формах на сайте: кейсы агентства Netpeak...
03 08 2026 22:53:14
В мае прошлого года Google анонсировал выход нового Core Web Vitals. Что это и как будет работать рассмотрим в статье...
02 08 2026 12:14:57
Четкая структура полноценного письма с примерами из рассылок крупных компаний: Aviasales, LinguaLeo, Rozetka, Yves Rocher, Pich Shop, Эльдорадо и другие....
01 08 2026 1:33:30
Всё, что нужно знать заказчикам услуг о внутренней кухне PM-специалистов...
31 07 2026 21:50:42
Обзор главных преимуществ, которые дают облачные академии бизнесу....
30 07 2026 17:10:49
Грамотная группировка поисковых запросов позволяет максимально увеличить поисковой трафик....
29 07 2026 16:42:54
Нашим решением было трaнcлировать хотя бы часть опыта спикеров 8P, составив дайджест лучших, на их взгляд, кейсов, о которых они узнали за этот год....
28 07 2026 19:31:59
Почему встречаются низкие показатели переходов на сайты по всем источникам трафика? Нет рекламодателей, которые могут предложить пользователям те или иные товары и услуги....
27 07 2026 6:22:27
Перед обращением за услугами продвижения задайте себе вопрос: готов ли я выделить львиную долю своего времени и сил на серьезное развитие проекта? При отрицательном ответе не стоит и начинать. И другие вопросы о SEO-продвижении...
26 07 2026 10:58:46
3D принтер — заработок миллионеров будущего! Тех, кто сейчас смог купить и начал заниматься ими или использует их в бизнесе, ждет объемный успех через каких-нибудь 3-5 лет....
25 07 2026 5:26:32
Лидеров определили открытым голосованием. В ТОП-списки вошли CPA-сети, которые набрали больше всего голосов суммарно и по отдельным критериям....
24 07 2026 3:13:25
Зачем амбициозным онлайн-проектам индивидуальные инструменты веб-аналитики....
23 07 2026 1:18:52
Пpaктика в режиме «рейтинг онлайн». Новинка Google Рекламы — отчет «Статистика аукционов»....
22 07 2026 2:47:34
Домен — это адрес (имя) сайта в сети интернет, по которому его находят пользователи. Он состоит из букв, символов и цифр, должен быть уникальным, чтобы владельцу ресурса удалось добиться качественного продвижения. Как подобрать лучший? Читайте!...
21 07 2026 18:52:34
Стоит ли подключать автоматические стратегии управления ставками? Мы проверили, как работает «Целевая цена за конверсию» в разных тематиках....
20 07 2026 20:22:23
Если вы до сих пор сомневаетесь — прекратите это и делитесь своим опытом с читателями, потенциальными клиентами, инвесторами и партнерами. Узнать больше!...
19 07 2026 9:35:50
Какие шаги стоит сделать, чтобы обойти ямы профессионального влогинга и как заработать на его вершинах...
18 07 2026 0:48:19
Подборка ненаучных наблюдений и ситуаций, в которых бывал каждый из нас...
17 07 2026 12:33:32
Как обезопасить себя от интернет-пиратов и защитить авторское право онлайн....
16 07 2026 2:58:32
Данные по 24 миллионам кликов в 24 тематиках и 391 городу...
15 07 2026 18:49:19
Как увеличить количество транзакциий, сохранив прибыльность кампании в РСЯ?...
14 07 2026 2:47:16
Заказчик всегда приходит с идеей. В этой идее может быть все продумано до мелочей, а может быть только каркас. В любом случае мысли клиента следует систематизировать так, чтобы с ними было удобно работать....
13 07 2026 10:17:26
Еще:
понять и запомнить -1 :: понять и запомнить -2 :: понять и запомнить -3 :: понять и запомнить -4 :: понять и запомнить -5 :: понять и запомнить -6 :: понять и запомнить -7 ::