Чему вы научитесь
- Писать базовые алгоритмы поиска по шагам
- Измерять качество поиска, понимая, что скрывается за каждой метрикой.
- Собирать векторный поиск на FAISS.
- Совмещать лексический и семантический поиск и объединять две выдачи через Reciprocal Rank Fusion.
- Нарезать документы на чанки смыслу.
- Собрать RAG-пайплайн без фреймворка и на LangChain/LangGraph
О курсе
В далеком 2007 году в Екатеринбурге прошла первая российская летняя школа по информационному поиску (RUSSIR), и автору (тогда студентке 5-го курса) посчастливилось принять в ней участие.
После этого тема моего диплома была предрешена – мне пришлось написать с нуля полноценный поисковик. Потом мне еще дважды довелось писать поисковики с нуля – в аспирантуре и при работе над грантовым проектом по конкурсу «У.М.Н.И.К.» Фонда содействия инновациям.
В конце концов я поняла, что уперлась в потолок. NLP тех лет вращалась вокруг статистических или даже эвристических алгоритмов, которые писал каждый разработчик, кто во что горазд.
На конференции молодых ученых в МГУ один маститый преподаватель, выслушав мой доклад, сказал: «Понимаете, вы это никогда не автоматизируете. Это как любовь, как весна». И в тех реалиях он был прав.
А потом пришла эпоха больших языковых моделей, и внезапно оказалось, что NLP отлично поддается автоматизации.
Пришло время пересмотреть подход к классическому информационному поиску. Этот курс – небольшая попытка комплексного взгляда на весь процесс – от булева поиска до RAG и CRAG. Автор уверен, что лучший способ что-то понять – написать это руками. Впрочем, до фреймворков (LangChain/LangGraph) мы еще доберемся, но только в последнем уроке. В курсе намеренно сделан упор на самописном коде, чтобы читатель запомнил, как все устроено.
Это курс не о том, как собрать RAG за час из готовых кубиков. Это курс о том, почему RAG устроен именно так. Примерно две трети курса - это классический информационный поиск: индексы, ранжирование, морфология, метрики качества, LSA, эмбеддинги, приближённый поиск ближайших соседей. Собственно RAG появляется в уроках 7-9. Так сделано намеренно: без этой базы RAG остается просто красивой аббревиатурой.
Для кого этот курс
Начальные требования
- Python на базовом уровне: функции, списки, словари, циклы, работа с файлами. Опыт в ML и знание фреймворков не нужны - все вводится по ходу изложения.
- Немного школьной математики: логарифм и скалярное произведение. Все остальное объясняется в тексте.
- Библиотеки ставятся по ходу курса через pip: numpy, nltk, pymystem3, rank_bm25, scikit-learn, faiss-cpu, langchain.
- Ключ OpenRouter и небольшой баланс - понадобится в уроках 5, 7 и 8, где считаются эмбеддинги и вызывается языковая модель. Расход на весь курс - около пары долларов (используются самые дешевые модели: text-embedding-3-small и gpt-4o-mini). Подойдет и любой другой OpenAI-совместимый провайдер - в коде меняется только
base_url.
Как проходит обучение
Теория чередуется с тестами так, чтобы подводить читателя к очередному повороту мысли. То, о чем догадался сам, запоминается гораздо лучше.
Каждый алгоритм сначала пишется руками на чистом Python - десять-двадцать строк, которые можно запустить, сломать и починить, - и только потом мы смотрим, как то же самое делает готовая библиотека.
Что вы напишете своими руками:
- токенизацию, матрицу «термин - документ» и инвертированный индекс;
- ранжирование по частоте, IDF, TF-IDF;
- векторную модель, евклидово расстояние, а затем косинусную меру и нормировку на длину документа;
- BM25 - сначала формулу с параметрами
k1иb, потом то же самое наrank_bm25; - стеммер Портера для русского языка, потом используем
SnowballStemmerиз nltk и лемматизацию через mystem; - метрики качества поиска: P@k, R@k, F1, Average Precision, MAP, DCG/IDCG/NDCG. Затем сверите свои реализации со
sklearn.metrics.ndcg_scoreиranx; - LSA через SVD на чистом NumPy, затем эмбеддинги через API;
- векторный поиск: k-means и индекс IVF, HNSW, FAISS;
- гибридный поиск и слияние выдач через Reciprocal Rank Fusion;
- собственный чанкер с перехлестом и семантический чанкинг по смысловому ключу;
- полноценный RAG-пайплайн без единого фреймворка;
- и только после этого - то же самое на LangChain (LCEL) и самокорректирующийся RAG на LangGraph.
Программа курса
В курс входят
- 9 уроков
- 36 тестов