Memorilla заменяет документы в контексте LLM 16 векторами памяти
Обучаемый модуль собирает из всей базы документов 16 векторов под вопрос и подаёт их замороженной Qwen3-8B.
Исследователи из Стэнфорда, Пенсильванского университета, MIT и Торонтского университета описали Memorilla — память для языковой модели, которая вместо фрагментов документов подаёт ей 16 векторов, собранных под конкретный вопрос из всей коллекции. Первая версия статьи вышла на arXiv 15 октября, третья — 3 ноября. По замерам авторов, с замороженной Qwen3-8B метод лидирует на 5 бенчмарках из 8 среди вариантов RAG, Mem0, MemoRAG, сжатия промпта и полного контекста, а на проверке фактов FactKG даёт 84,33% точности против 80,43% у полного контекста при сокращении документной части входа в 108 раз.
Для тех, кто строит ассистентов с долгой историей переписки или вопросы-ответы по большой базе документов, это заявка на третий путь между RAG и «засунуть всё в контекст»: документы кодируются один раз, а модуль на 194 млн параметров учится доставать из всех эмбеддингов то, что нужно вопросу. Но у подхода жёсткие условия: опубликованные модули обучены под одну пару моделей Qwen и в том числе на данных тех же тестовых задач, а для работы нужен доступ к входным эмбеддингам модели, поэтому через обычный текстовый API его не подключить. Все результаты — из публикации авторов, независимого воспроизведения пока нет.
Ключевые выводы
- Memorilla лидирует по основной метрике на 5 бенчмарках из 8: PersonaMem-v2, TriviaQA, FactKG, LaMP-4 и LaMP-7.
- На FactKG точность 84,33% против 80,43% у полного контекста: модель получает 16 векторов вместо в среднем 1727 токенов документов.
- На PubMedQA Memorilla заметно хуже (59% против 69% у LLMLingua-2 и 67% у полного контекста), на NarrativeQA по ROUGE и на PersonalizationV4 впереди MemoRAG.
- Модуль дообучали в том числе на обучающих частях всех восьми тестовых бенчмарков, а для двух из них — ещё и отдельно.
- Код и обученные модули выложены под Apache-2.0, но нужен доступ к входным эмбеддингам LLM: через обычный текстовый API метод не использовать.
Как Memorilla сжимает контекст для модели?
Коротко: документы превращаются в эмбеддинги один раз, а под каждый вопрос обучаемый модуль собирает из них 16 «мягких токенов» и ставит их прямо во вход модели. Работа разбита на три шага:
- Кодирование и хранение. Замороженная Qwen3-Embedding-4B переводит каждый фрагмент документа (сообщение пользователя, главу книги) в эмбеддинг. Их сохраняют и при изменениях перекодируют только новые и изменённые документы. Это тот же индекс, что строит обычный векторный поиск, поэтому отдельной стоимости на запись, по словам авторов, нет.
- Выборка под вопрос. Модуль памяти получает эмбеддинг вопроса и читает все сохранённые эмбеддинги коллекции через несколько блоков кросс-внимания по схеме Perceiver. На выходе всегда фиксированное число векторов K, сколько бы документов ни было в базе; в основных экспериментах K = 16.
- Подача в модель. Эти 16 векторов ставятся перед эмбеддингами вопроса во входную последовательность замороженной Qwen3-8B. Это непрерывные векторы в пространстве входных эмбеддингов модели, а не токены из её словаря, поэтому текстом их не передать.
Обучаемая часть одна — модуль памяти: 194 123 776 параметров в основной конфигурации с 8B-моделью. Сама LLM и энкодер не меняются. Учили в три этапа: сначала на 1,98 млн примеров пересказа фрагментов английской «Википедии», чтобы модуль научился сохранять содержание, затем на 1,34 млн примеров из десяти наборов на понимание текста, вопросы-ответы и суммаризацию и в конце — на смеси обучающих частей всех восьми бенчмарков, по которым потом сравнивали методы.
Чем это отличается от соседей: RAG и агентные памяти вроде Mem0 и MemoRAG в итоге кладут в контекст выбранный текст. Методы латентного сжатия вроде ICAE и AutoCompressors тоже делают «мягкие токены», но без учёта вопроса, так что одни и те же векторы обслуживают все вопросы. xRAG учитывает вопрос, но сжимает только один найденный документ. Memorilla читает всю коллекцию и формирует память под конкретный вопрос.
В каких задачах Memorilla обходит RAG и полный контекст?
В пяти из восьми: на трёх тестах персонализации (PersonaMem-v2, LaMP-4, LaMP-7), одном тесте вопросов-ответов (TriviaQA) и проверке фактов (FactKG). Все методы в сравнении авторы запускали на одних и тех же замороженных Qwen3-Embedding-4B и Qwen3-8B, Mem0 и MemoRAG для построения своей памяти дополнительно использовали Qwen3-4B-Instruct-2507. RAG-1, RAG-5 и RAG-50 берут 1, 5 или 50 ближайших фрагментов по косинусной близости, «полный контекст» читает всю коллекцию в окне 32 768 токенов, а при превышении включается растяжение контекста YaRN.
Основные метрики Memorilla и сравниваемых методов на восьми бенчмарках
8 сервисов · 6 столбцов
Листайте столбцы →Смахните влевоВсе 6 столбцов
Данные: Fallahpour и др., arXiv 2610.21375v3, таблица 11; модель-ответчик — замороженная Qwen3-8B
Самый показательный случай — FactKG, проверка утверждений по графу знаний. Там Memorilla набирает 84,33% против 80,43% у полного контекста, 80,38% у MemoRAG и 78,98% у xRAG. Полный контекст в этой задаче видит все документы и помещается в окно 32 тыс. токенов, так что отставание нельзя списать на потерянные данные. Авторы показывают, что преимущество Memorilla над RAG-50 растёт с числом сущностей в утверждении: с 4,23 процентного пункта при одной сущности до 7,59 при четырёх и больше. Когда утверждение складывается из четырёх фактов, RAG-50 падает с 78,73% до 51,75%, а Memorilla держится в диапазоне 80–89%.
В персонализации разница ещё заметнее: на PersonaMem-v2 Memorilla даёт 44,60% при 25,64% у модели вообще без документов, тогда как все остальные методы, кроме xRAG, остаются примерно в пределах трёх пунктов от этого уровня, включая полный контекст, которому достаётся в 1974 раза больше токенов документов. На TriviaQA выигрыш у MemoRAG небольшой: 57,00 против 56,60 по точному совпадению. В среднем по восьми тестам Memorilla набирает 49,68 балла против 41,92 у xRAG, 40,75 у LLMLingua-2 и 38,02 у Mem0.
Отдельный опыт поставили на текстовой игре TextWorld с агентом на Qwen3-4B-Instruct-2507: после каждого хода он добавлялся в память. Здесь память дополняла текстовую историю, которая во всех вариантах сравнения оставалась в контексте в одинаковом бюджете, и вместо 16 использовалось 8 векторов. С модулем, обученным через обучение с подкреплением (GRPO), средняя доля решённых игр выросла с 18,6% у агента со всей историей в контексте до 24,2%, а доля игр, решённых хотя бы с одной из трёх попыток, — с 25,0% до 37,5%. Необученная память, наоборот, оказалась хуже полной истории.
Где Memorilla проигрывает и почему?
Хуже всего метод справляется там, где нужны точные мелкие детали. На PubMedQA, где на вопрос приходится в среднем четыре фрагмента одной аннотации общим объёмом 324 токена, Memorilla набирает 59% против 69% у LLMLingua-2 и 67% у RAG-5, RAG-50, полного контекста и MemoRAG. Причину именно этого провала авторы отдельно не разбирают; общим ограничением метода они называют возможную потерю мелких фактических деталей. Слабые варианты при этом ниже: RAG-1 даёт 34%, xRAG — 36%, Mem0 — 24%.
На NarrativeQA (вопросы по длинным книгам и сценариям) MemoRAG лучше по ROUGE-1 и ROUGE-L — 21,80 и 20,51 против 19,68 и 19,31, получая при этом в 50 раз больше токенов документов. По F1 впереди Memorilla, 16,56 против 15,03 у MemoRAG, а по BLEU-1 лидирует xRAG. На PersonalizationV4 MemoRAG тоже выше: 67,88% против 66,65% по точности и 45,95% против 41,97% на сложной части. Разбор по типам вопросов объясняет картину: на вопросах «почему» и «как» Memorilla обходит RAG-50 на 4,91 и 7,02 пункта ROUGE-L, а на «кто» и «который», где нужно точное имя, RAG-50 выигрывает 3,45 и 2,93 пункта. Авторы предполагают, что сжатие сохраняет общую структуру текста, но теряет точные формулировки, и оговариваются, что типы вопросов различаются ещё и длиной ответов и частотой сущностей.
При этом методы решают разные вопросы: на FactKG 15,9% вопросов правильно отвечает только Memorilla и 10,0% — только RAG-50. Авторы считают гибрид латентной памяти и текстового поиска главным направлением дальнейшей работы.
Чем ограничены эксперименты?
Перечень оговорок длинный, и его стоит держать в голове, прежде чем сравнивать с вашим RAG:
- Модуль памяти обучали в том числе на обучающих частях всех восьми бенчмарков, а для PersonaMem-v2 и PersonalizationV4 дополнительно дообучали отдельно. Сравниваемые RAG, Mem0 и MemoRAG под эти задачи не обучались. Это не утечка тестовых ответов, но сравнение обученного под домен модуля с универсальными методами.
- Энкодер и модель-ответчик — из одного семейства Qwen. Как метод переносится на другие пары моделей, авторы не проверяли и называют это открытым вопросом.
- Задачи — персонализация, вопросы по длинным документам и проверка фактов. Код и программирование не тестировали; авторы прямо пишут, что на такие домены результат может не переноситься.
- Авторы признают, что метод может терять мелкие фактические детали, вероятно потому, что энкодер не обучали для сжатия памяти.
- PersonalizationV4 — собственный синтетический набор авторов: персоны, вопросы и диалоги сгенерировали модели GPT-5, GPT-5.1 и GPT-5-mini.
- «Полный контекст» не идеальный потолок: для длинных наборов включался YaRN, а на NarrativeQA для 10,8% вопросов ранние фрагменты не поместились даже в расширенное окно.
- Все цифры получены авторами; независимого воспроизведения нет.
Можно ли подключить Memorilla к своему ассистенту?
Да, если вы сами запускаете модель на своём GPU: через обычный текстовый API — неважно, закрытой модели или открытой — 16 векторов во вход не передать. Код выложен в репозитории snap-stanford/memorilla под лицензией Apache-2.0, а обученные модули — на Hugging Face: чекпойнты всех трёх этапов обучения и отдельные модули для PersonalizationV4 и PersonaMem-v2. Все они обучены в паре Qwen3-8B и Qwen3-Embedding-4B; перенос на модели других семейств авторы не проверяли и называют открытым вопросом.
По README нужен Linux с CUDA, Python 3.11 и одна видеокарта на 80 ГБ; первый запуск скачивает около 25 ГБ моделей. Запуск готового модуля выглядит так (пример из репозитория):
Готовые модули подходят, чтобы проверить метод на своих документах. Если ваши данные далеки от бенчмарков статьи, по нашей оценке, без дообучения не обойтись: в репозитории есть рецепты всех трёх этапов, авторы запускали их на H100.
По скорости выигрыш проявляется на больших коллекциях. На одной H100 при 512 документах по 250 токенов, размере батча 1 и генерации до 32 токенов ответ Memorilla занял 739 мс против 19,9 с у полного контекста (тот вышел за окно 32 тыс. токенов и работал через YaRN), а сам модуль памяти отрабатывает примерно за 2 мс. Замер сделан в Hugging Face Transformers без paged KV-кэша, и авторы предупреждают, что время полного контекста зависит от стека инференса, так что на другом стеке разрыв может быть иным. Хранилище для 200 документов занимает около 1 МБ — в 7266 раз меньше KV-кэша полного контекста той же коллекции. На одном документе разницы почти нет: 740 мс против 749 мс, время съедает генерация ответа.
Если вы только выбираете подход, начните с классического поиска: как устроен RAG, мы разбирали в отдельном материале, а альтернативный путь без эмбеддингов показала Mintlify с виртуальной файловой системой. Как память агентов Claude устроена у Anthropic — через заметки, вики и офлайн-«сны», — мы разбирали отдельно, а как проверить, что память вашего агента действительно помогает, — в нашей методике.
Следующий понятный тест для Memorilla — независимый прогон выложенного кода и проверка на модели другого семейства. Пока таких результатов нет, цифры статьи стоит читать как верхнюю оценку для задач, похожих на обучающие.
Источники: arXiv 2610.21375: Memorilla: Latent Semantic Memory for LLMs, Полный текст v3 (HTML), GitHub: snap-stanford/memorilla
Изображение на обложке: Tproger по данным arXiv 2610.21375