0
<< предыдущая заметка 
24 декабря 2025
Qdrant и lleo.me

Сайт lleo.me стал настолько летописью моей жизни и работы, что сам я постоянно ищу на нем разную забытую информацию. В каком году я впервые ездил в Минск? Нужно ли обжаривать лук с морковкой для моего рецепта рассольника? Где фотка Васи Обломова в Чертаново? Помню, когда-то мне советовали в комментах библиотеки синтеза речи, какие? И каждый раз я лезу искать.

А история системы поиска на lleo.me классическая. Сперва это был тупой поиск подстроки по всей базе заметок и комментариев. С годами база разрослась, ожидание результатов могло занимать целую минуту, иногда вешая сайт. И если ты ставил ключевое слово не в том падеже, поиск ничего не находил. Год назад я привинтил для экспериментов рядом с MySQL базу Postgres и включил там опции полнотекстового поиска. Стало быстро, но хреново. Поэтому лично для себя в админке я оставил опцию прежнего поиска подстроки. И на время прервал эксперименты. Но эпоха нейросетей подарила нам технологии смыслового поиска — когда нейросеть понимает смысл заметки и индексирует какими-то своими цифрами в форме вектора в своем 1000-мерном пространстве. А потом такой же смысловой вектор делается для каждого поискового запроса и база ищет близкие результаты. Проще говоря, на запрос «рассказ, где учитель вырастил слоненка» система должна выдать первым результатом поэму «Про тигренка», хотя совпадений слов нет вообще. Самый модный сегодня для этой цели инструмент — база Qdrant, и я собираюсь ею воспользоваться сперва по рабочим задачам, а затем для своего сайта и конечно для Биноника. Вспомнить стих Иртеньева, Быкова или Седова, не помня точных фраз, — та ещё задача.

Поэтому хочу посоветоваться с вами — кто в теме и имеет опыт.

1) Какие модели советуете именно для русского языка?

2) Какие есть нюансы подготовки букв? Надо ли заменять кавычки на единообразные, удалять знаки препинания или спецсимволы, приводить к нижнему регистру?

3) Какие нюансы представления разных элементов заметки? Нужно ли как-то отдельно размечать заголовок, тело, тэги, дату? Как это лучше делать? В виде промпта «заголовок: ..., эпиграф: ... текст: ...»? А виде JSON? Никак не размечать, валить в кучу? Или там есть специальные опции в API?

4) Что делать с лонгридами, которые не лезут в окно? Следует ли повесть разбивать на куски, и какой длины? Хранить эти куски отдельными векторами, адресуя каждый к своей части текста, типа смысл главы/абзаца? Следует ли отдельно делать для каждой главы смысловую выжимку с целью в конце создать один общий смысловой вектор всей повести?

5) Какие ещё есть нюансы и рекомендации?

Речь именно про тексты на русском языке и опыт создания автономной системы поиска. Понятно, что Гугль и прочие внешние индексаторы открытого контента удобны пользователю, но не решают моих личных и учебно-рабочих задач и не помогают изучить новые технологии.

<< предыдущая заметка  
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок

Комментарии к этой заметке скрываются - они будут видны только вам и мне.

Оставить комментарий