Поиск по Telegram до сих пор как в 2000-х — я попытался это исправить
У Telegram миллиард пользователей. Но искать внутри него до сих пор часто приходится как в интернете 2000-х: по ключевым словам, через каталоги, рубрики и вручную собранные подборки, а также, конечно, по знакомству.
Меня это давно раздражало, поэтому я собрал свой самый масштабный pet project — что-то вроде Google для Telegram.
Я взял индекс Common Crawl, вытащил оттуда миллионы ссылок вида t.me, а потом написал на Rust скрапер, который превращает список юзернеймов в данные о каналах, публичных чатах и ботах. Для каналов я собирал описания и последние сообщения из превью на t.me, для ботов — стартовое сообщение и список команд через юзербота.
Но этого мне показалось мало, поэтому я добавил в индекс даже визуальные сигналы: прогнал аватарки через image-to-text и включил их текстовые описания в документ, по которому потом считались эмбеддинги.
Потом я извлёк все репосты и упоминания юзернеймов и повторил цикл.
Снова.
Снова.
В итоге получилось больше, чем я рассчитывал: 1 млн каналов, 170 тыс. публичных чатов и около 150 тыс. ботов.
Для всей этой базы я посчитал эмбеддинги на виртуалке с vast.ai, поднял гибридный поиск через ParadeDB и сделал веб-интерфейс.
Так появился semagram.io и Telegram-бот @SemagramBot.
Что в этом поиске интересно:
- он ищет и по ключевым словам, и по смыслу;
- умеет кросс-языковой поиск;
- умеет фильтровать результаты по языку через директивы вроде "lang:fr";
- умеет искать похожие каналы, чаты и ботов по запросу вида "@username".
Например:
- запрос "Лентач" находит одноимённый канал;
- запрос "блог lang:fr" находит французские блоги, хотя основная часть запроса вообще на русском;
- запрос "@oldlentach lang:fr" находит французские новостные паблики, похожие по смыслу.
Я, например, с его помощью наконец-то нашёл французских Telegram-блогеров — а я как раз учу французский.
На Reddit проект встретили тепло, но самое активное Telegram-сообщество, как мне кажется, всё-таки русскоязычное. Поэтому пришёл сюда за фидбеком.
Как вам идея? Что бы вы добавили в такой поиск? И главное — кому, кроме меня, это может быть реально нужно?