семантический поиск.

Есть ли в эмбеддингах «направление негации»? Проверил на 8 моделях

Поиск по смыслу плохо различает «открыто» и «не открыто»: векторы почти совпадают, потому что тема одна и та же. В словах это знают все, а вот насколько это системно и можно ли починить без дообучения, мне хотелось проверить на данных.Идея простая. В word2vec есть знаменитое king − man + woman ≈ queen: «пол» оказывается почти линейным направлением. Есть ли такое «направление негации» в финальных эмбеддингах моделей, то есть в тех векторах, по которым реально ищут? И если есть, можно ли одной такой осью лечить слепоту к отрицанию?Как я проверял

продолжить чтение

Опубликована книга «Поиск: от слова к доказательству»

Как история поиска, доказательность источников и технология MIRA дополняют «Глаз стрекозы»Задача, которая оказалась значительно сложнее поиска

продолжить чтение

Найти похожие заметки в Obsidian оказалось проще, чем безопасно их изменить

В тестовом хранилище Obsidian лежат две заметки с одним названием — Cache lifetime. Одна находится в Study/Caching, другая в Study/Systems. Плагин замечает сходство, но что делать с этой парой? Одинаковый термин ещё не означает одинаковое содержание: в одном файле может быть определение, в другом — пример или важное ограничение.К этой задаче я пришёл после небольшого эксперимента, о котором писал 14 октября

продолжить чтение

EmbeddingGemma 2: как перейти с 768 на 512 координат и сэкономить память на RTX 5090

Привет, Хабр!Пять миллионов 768-мерных эмбеддингов в FP32 занимают 15,36 ГБ. На RTX 5090 с её 32 ГБ VRAM это почти половина, причём только под координаты. Поисковому индексу нужна ещё служебная память, а если на той же карте работает модель, место потребуется и ей.У EmbeddingGemma 2 есть возможность сократить этот объём. Последний линейный слой модели преобразует 512 чисел в 768. В точной арифметике его выходы лежат в 512-мерном подпространстве: для их хранения можно выбрать другой базис и оставить 512 координат, сохранив косинусное сходство.

продолжить чтение

Вторая память и второй мозг — не одно и то же. Как я собрал 200 тысяч файлов своей жизни и подключил к ним агентов

Сейчас модно называть вторым мозгом папку с заметками в Obsidian. Я разбирал гитхабы Андрея Карпатого и других, кто про это пишет, и чаще всего «второй мозг» там - это куча файликов, перелинкованных друг с другом, плюс подключённый к ним Claude Code.Я думаю иначе.Есть вторая память, и есть второй мозг. Это разные вещи, и разница между ними - это как раз то, ради которой всё это стоит строить.Вторая памятьВторая память - это всё, что мимо вас в жизни проходило:переписки с коллегами, друзьями, жёнами, детьми во всех мессенджерах: Telegram, Slack, Discord, WhatsApp и тд - вся история, насколько глубоко её вообще можно выкачать;

продолжить чтение

Локальный семантический поиск по заметкам как MCP-сервер: нарезка под лимит модели и кэш

У меня есть папка с конспектами созвонов и расшифровками встреч, и искать в ней по слову неудобно: я помню, что обсуждали найм, а в файле написано «собеседование» и «кандидат», и обычный поиск по тексту такой файл не находит. Отправлять заметки во внешний сервис ради эмбеддингов мне не хотелось, поэтому я собрал маленький MCP-сервер, который ищет по смыслу прямо на моей машине, и подключил его к Claude Code. Всё работает без платных API, а заметки не покидают компьютер.

продолжить чтение

Я добавил Rerank в Obsidian. Что показали тесты на 64 и 500 заметках

В прошлых статьях я рассказывал, как постепенно добавлял семантический поиск в Obsidian. Сначала появился локальный векторный индекс, потом Similar Notes, поиск потенциальных дублей и RAG. В какой-то момент всё это начало работать достаточно хорошо, и я уже собирался оставить поисковую часть в покое.Но потом добрался до Rerank.Идея простая. Сначала обычный семантический поиск находит заметки, близкие по смыслу к запросу. Затем вторая модель получает найденные фрагменты, сравнивает их с вопросом и пытается расставить документы по релевантности. Звучит полезно, особенно когда в хранилище много заметок на похожие темы.

продолжить чтение

RAG по 11 000 файлов: почему семантический поиск не находит по артикулу

Привет! Меня зовут Дмитрий, я работаю в компании Cortex IT и автоматизирую бизнес-процессы наших клиентов. Среди прочего мы строим RAG-ассистентов по внутренней документации.На одном из проектов было много нестандартной технической документации на оборудование, и с настройками по умолчанию поиск отдавал не те чанки. Пришлось разбираться, почему так происходит.

продолжить чтение

Семь занятий по локальному RAG на Python от файла до ответа с источниками

Сделал бесплатный курс для тех кто хочет научиться создавать локальные ИИ приложения на Python. За семь занятий разберём помощника, который ищет по вашим документам, отвечает на вопросы и показывает исходные фрагменты для проверки.Чат с документами выглядит просто. Положили файлы в папку, задали вопрос, получили несколько складных предложений. Но стоит ответу разойтись с текстом — и хочется увидеть всю кухню: что нашёл поиск, что отправили модели и откуда она взяла последнюю фразу.В local‑docs‑ai

продолжить чтение

ИИ спотыкается не об ум, а об контекст: как генератор майндмап превратился в RAG по продукту

продолжить чтение