Вилсон Линь, инженер‑программист, решивший построить собственный поисковик уровня Google или «Яндекса» буквально с нуля, делится подробностями в своём блоге.
Идея родилась из недовольства тем, во что превращаются современные поисковые системы. По мнению Линя, качество поиска стремительно падает: растёт объём SEO‑спама, а действительно полезного и содержательного контента всё меньше. Его не отпускал вопрос: почему поисковики не могут стабильно выдавать материалы высшего качества?
Ещё одна больная точка — производительность: большинство поисковых систем спотыкаются на сложных поисковых запросах, выдавая результаты, которые лишь отчасти соответствуют задуманному. Линь же хотел сделать поисковик, который смог бы отвечать даже на самые запутанные вопросы.
И ему это удалось: созданная им система уверенно обрабатывает и длинные, и многоступенчатые запросы, не теряя точности.
Поисковик — это сплав множества областей знаний: информатики, лингвистики, онтологии, обработки естественного языка, машинного обучения, распределённых систем и инженерии производительности. Линь признаётся: «Мне было интересно, сколько знаний я смогу охватить за короткий срок. Да и сама мысль о том, что у меня будет собственный поисковик, казалась забавной».
Ключевые особенности его проекта впечатляют.
Он сгенерировал в общей сложности 3 миллиарда SBERT—эмбеддингов, задействовав кластер из 200 GPU.
В пиковые моменты сотни краулеров «переваривали» до 50 000 страниц в секунду, а поисковый индекс вырос до 280 миллионов записей.
Время отклика от запроса до выдачи — ~500 мс.
RocksDB (система баз данных) и HNSW (метод приближенного поиска на основе графов) распределены по 200 ядрам процессора, 4 ТБ оперативной памяти и 82 ТБ SSD‑накопителей.
И да — попробовать живую демо‑версию можно здесь (на момент поиск не выдавал результатов).
Чтобы проверить, насколько модели векторных представлений документов — нейросетевых эмбеддингов — вроде SBERT подходят для поиска, Линь собрал минимальный тестовый полигон: взял несколько веб‑страниц, разрезал их на фрагменты и стал проверять, способны ли они точно отвечать на сложные, косвенные вопросы на естественном языке.
Например, если ввести запрос вроде: «Хочу использовать S3 вместо Postgres, но база данных должна позволять помечать файлы человеческими комментариями в отдельной колонке», — обычный поисковик выдернет из него ключевые слова и предложит результаты про Postgres, S3 и файлы. А вот поиск на основе нейросетевых эмбеддингов вернёт уже смысловой ответ, например: «При сохранении объектов можно также задавать собственные метаданные».
Суть в том, что поисковая система должна понимать намерение пользователя, а не просто цепляться за ключевые слова. Если дать возможность формулировать запрос как цельное предложение, без разбиения на ключи и фразы, такой поиск будет гораздо устойчивее к SEO‑спаму и накруткам. Линь подчёркивает: сложные запросы, где переплетены несколько идей и нюансов, становятся выполнимыми — система может разгадать даже запутанные смысловые связи.
Кроме того, он обращает внимание на важный этап при работе с эмбеддингами — chunking, то есть разбиение текста на куски. Большинство моделей не могут обработать всю страницу целиком и теряют точность по мере увеличения длины запроса.
Распространённый способ — рубить предложения на части по несколько слов или символов. Но это чревато нарушением структуры и грамматики, а значит, и искажением смысла. Линь же использовал предобученный Sentencizer — инструмент, который делит текст на естественные и логичные фрагменты. Он обучен на огромном корпусе текстов и, благодаря глубокому пониманию синтаксиса и грамматики, корректно обрабатывает нюансы вроде сокращений, десятичных дробей, URL и разговорных конструкций в запросах.
Предложение всегда связано с предыдущими фразами, абзацами и обсуждаемыми концептами; если оторвать фрагмент от контекста, местоимения вроде «он» или «это» теряют смысл. Поэтому Линь использует нормализованное семантическое дерево документа.
И всё же это не решает проблему локального контекста — например, цепочек предложений и анафор. Чтобы учесть их, он обучил и внедрил DistilBERT — классификационную модель, которая анализирует предложение вместе с предыдущим и определяет, зависит ли оно от других фраз для сохранения смысла.
В итоге страницы выдачи его поисковика почти не содержат SEO‑мусора и выдают корректные результаты даже для очень сложных запросов — например, могут осмыслить целый абзац с идеями и понять его суть.
Скрытый текст
Помимо работы с эмбеддингами и точной нарезки запросов, Линь разработал собственный краулер для построения индексов, ведь без них полноценный поисковик невозможен. А так как пользоваться API готового ИИ было экономически невыгодно, он собрал собственный GPU‑сервер. За этим стояли месяцы проб и ошибок, но результат оказался стоящим.
Делегируйте рутинные задачи вместе с BotHub. Сервис доступен без VPN, принимаются российские карты. По ссылке вы можете получить 100 000 бесплатных капсов и приступить к работе с нейросетями прямо сейчас.
Источник: habr.com