2 бампы версіі ляжалі ў мяне ў нататках месяцамі, па радку на кожны: bge-base-en на bge-base-en-v1.5 і e5-base на e5-base-v2. Нататка bge абяцае, што пошук стаў лепшы. e5 выкладвае v2 наогул без нататкі, проста з лікам вышэй у табліцы ацэнак. Абодва выглядаюць як апгрэйд, які бяруць не думаючы, як бяруць чарговы патч бібліятэкі.
Адзінае пытанне, якое я сабе задаў, было пра тое, колькі гадзін пойдзе на паўторнае кадаванне калекцыі. Гэта тая частка, за якую прыходзіць рахунак. Што бамп робіць з адказамі, я не мераў ні разу. Я зыходзіў з таго, што версія ўнутры аднаго сямейства гэта невялікі крок, а старыя вектары і новыя ляжаць прыблізна там жа. У выніку я прагнаў 4 пары, 2 сямействы ў 2 памерах. Гэта заняло 5 гадзін працэсара супраць 1.5 на адну пару.
Стэнд
SciFact з BEIR: 5183 дакументы і 300 тэставых запытаў з 339 радкамі разметкі. Дакладны косінус па нармаваных вектарах, ніякага прыблізнага індэкса, так што ні адзін лік ніжэй не прыходзіць ад перабудовы графа. Python 3.12.3, torch 2.14.0 на працэсары, sentence-transformers 6.0.1, numpy 2.5.3, 4 ядры, GPU няма. Адно кадаванне калекцыі займае ад 15 хвілін на малых мадэлях да 85 хвілін на базавай. На машыне была і іншая праца, так што гэтыя хвіліны варта чытаць як парадак велічыні. Уваход абрэзаны на 512 токенах, e5 атрымлівае свае прэфіксы query: і passage: , bge атрымлівае інструкцыю да запыту са сваёй карткі.
Перш чым нечаму верыць, я зверыў стэнд з апублікаванымі ацэнкамі MTEB на тым жа датасеце. 4 мадэлі з 8 трапляюць у апублікаваны лік да 4 знака: e5-base на 0.7308, e5-base-v2 на 0.7194, bge-small-en-v1.5 на 0.7127, e5-small на 0.6560. Яшчэ 3 разыходзяцца ў чацвёртым знаку. Асобна стаіць bge-base-en-v1.5: у мяне выходзіць 0.7404, роўна тое, што называе картка мадэлі BAAI, а рэпазітар вынікаў MTEB называе 0.7435.
Выдача пераставілася, ацэнка не
bge-base-en-v1.5 захоўвае 7.81 са старой першай дзясяткі і 85.3% першых месцаў. nDCG@10 ідзе з 0.7323 да 0.7404, recall@10 з 0.8712 да 0.8742. У 240 запытаў з 300 nDCG дакладна той жа, што быў, у 37 лепшы, у 23 горшы. Значыць на 2.19 месца з 10 стаў іншы дакумент, а ацэнка якасці варухнулася ў трэцім знаку.
e5-small-v2 гэта гучны выпадак. Ён захоўвае 4.43 з 10 і 59% першых месцаў. У аднаго запыту ранейшы пераможца апыняецца на месцы 1423. nDCG пры гэтым усё роўна расце, з 0.6560 да 0.6875. e5-base-v2 мяняе 4.24 месца з 10 і набірае менш за версію, якую замяняе: 0.7194 супраць 0.7308. Роўна тое ж кажа MTEB.
Перастаноўка садзіцца туды, дзе ранейшы парадак трымаўся на манетцы. У bge-base-en у запытаў, якія захавалі свайго пераможцу, адрыў ад другога месца быў 0.0221 у сярэднім, а ў тых, хто пераможцу страціў, 0.0033. Гэты зазор ідзе ў адзін бок ва ўсіх 4 парах. Чаго перавароты каштуюць, пытанне асобнае, а кропак у мяне ўсяго 4: у 3 з іх запыты, якія страцілі пераможцу, усё роўна выйшлі ў плюс, тыя 44 запыты bge пайшлі з 0.3959 да 0.4135. Базавая пара e5 гэта выключэнне: 80 запытаў страцілі пераможцу і ўпалі з 0.5020 да 0.4451.
2 спосабы зламацца
Бамп bge захоўвае геаметрыю. Той жа дакумент у дзвюх версіях стаіць сам да сябе на косінусе 0.892. Новы запыт па старым індэксе дае nDCG 0.7261 супраць 0.7323 натыўных, значыць састарэлы індэкс усё яшчэ адказвае. З’ехала шкала. Адсячэнне cos > 0.8 гэта якраз той лік, які асядае ў канфігу. Праз яго праходзіць 97.5% ацэнак першай дзясяткі да бампа супраць 1.8% пасля. 2 выпадковыя дакументы калекцыі стаялі на 0.82 у старой версіі і стаяць на 0.58 у новай. bge-small-en робіць тое ж самае яшчэ мацней, з 99.9% да 8.3%.
Пра гэтую частку было аб’яўлена, а я не прачытаў. У нататцы да выпуску v1.5 сказана, што мадэлі змякчаюць праблему размеркавання падобнасці. Гэта роўна той самы лік. Я прачытаў у тым жа сказе словы пра тое, што пошук стаў лепшы, на гэтым і спыніўся.
e5 small ламаецца наадварот. Доля, якая праходзіць праз гэтае адсячэнне, амаль не рухаецца: 98.5% супраць 98.6%. А той жа дакумент у дзвюх яго версіях стаіць на косінусе -0.007. Пошук па старым індэксе з новым запытам дае 0.0021 там, дзе старая мадэль па сваім індэксе дае 0.6560. Я даволі доўга шукаў памылку знака ва ўласным кодзе, перш чым прыняў гэты лік. Базавая пара e5 стаіць пасярэдзіне: той жа дакумент на 0.6061, доля вышэй адсячэння з 82.1% да 75.6%.
Адзін лік тут заслугоўвае папярэджання, бо менавіта на яго звычайна глядзіць дашборд. На бампе e5 small сярэдняя падобнасць першага траплення роўная, 0.8682 да і 0.8724 пасля. Па ёй нельга даведацца, што прастора з’ехала пад табой. У сапраўды зламаным стане яна не маўчыць: сярэдняе першае трапленне 0.0573, вышэй 0.8 аказваецца 0% першай дзясяткі.
Стан пасярэдзіне
Стан, па якім ніхто не публікуе лікаў, гэта сама міграцыя. Гадзінамі ці днямі палова калекцыі нясе новыя вектары, а палова яшчэ старыя. Я сабраў такі індэкс напрамую: кожны другі дакумент закадаваны нанова, астатнія не кранутыя, запыты ад новай мадэлі. Сапраўдны бэкфіл ідзе мноствам, якое расце, таму тут форма задачы, а не яе расклад.
У bge-base-en-v1.5 палавінны індэкс набірае 0.6408, ніжэй за абодва чыстыя канцы. Пераэмбеджаная палова забірае 83.7% усіх месцаў першай дзясяткі супраць 48.9% на гатовым індэксе. Запыты, чый размечаны дакумент паспелі пераэмбеджыць, набіраюць 0.8011, значыць больш, чым на гатовым індэксе. Запыты, чый дакумент яшчэ чакаў, набіраюць 0.4868. На поўным індэксе тыя ж 2 групы набіраюць 0.7335 і 0.7471. Значыць падзел робіць змешаны індэкс. У 9 запытаў з 300 разметка ляжыць у абедзвюх паловах, таму яны не трапілі ні ў адну групу.
Абедзве пары e5 даводзяць гэта да канца. 100% месцаў ідзе пераэмбеджанай палове. Запыты, чый дакумент яшчэ чакае, набіраюць 0.0000, значыць 0 рэлевантных дакументаў на 1480 месцаў, якія дастаюцца гэтым 148 запытам. Чаму выйграе пераэмбеджаная палова, я магу растлумачыць толькі для аднаго сямейства. У e5-base дзве паловы стаяць на розных шкалах: сярэдні косінус 0.7289 да новага боку супраць 0.4391 да старога, а ў e5-small разрыў яшчэ большы, 0.7774 супраць -0.0146. У bge-base-en сярэднія ідуць у адваротны бок, 0.4623 супраць 0.4861, значыць месцы там забірае не сярэдняе. Што менавіта, я не ведаю.
Паварот замест перабудовы
Пра гэта ёсць артыкул, Drift-Adapter (arXiv:2509.23471). Ён падганяе невялікае адлюстраванне з новай прасторы ў старую і заяўляе 95-99% ад recall поўнай перабудовы. На гэтых даных артаганальнае адлюстраванне Пракруста, падагнанае на 4000 пар дакументаў, дае nDCG 0.7317 для базавай пары bge супраць 0.7323 натыўных, 0.7177 супраць 0.7308 для базавай e5 і 0.5606 супраць 0.6560 для малой e5. Апошняе гэта 85% шляху назад паміж дзвюма прасторамі, у якіх сярэдні косінус на тым жа дакуменце роўны 0.
Я чытаў гэта як правал, пакуль не заўважыў, што адказваю на іншае пытанне. Артыкул лічыць Recall@10 супраць поўнай перабудовы. На гэтай метрыцы даныя даюць 100.2% для базавай bge, 99.2% для базавай e5, 97.8% для малой bge і 86.1% для малой e5. 3 пары з маіх 4 трапляюць у заяўленую паласу. Горш іх выглядаць прымушала мая ўласная рамка.
Мае 4000 пар гэта і не тая невялікая выбарка, пра якую кажа артыкул. Гэта 4000 з 5183 дакументаў таго самага індэкса, па якім потым ідзе пошук. І 214 з 283 размечаных дакументаў ляжаць сярод іх. Таму я падагнаў тое ж адлюстраванне з bge-small-en на яе ж саму, дзе правільны адказ гэта адзінкавая матрыца. На 200 парах яно губляе 0.036, 0.6635 супраць 0.6995, а на 4000 не губляе нічога. Гэта забівае адгаворку, якой мне хацелася: на тым памеры выбаркі, што я ўзяў, зазор вышэй гэта дрэйф, а не цана таннай падгонкі.
Чаго я не правяраў
Прыблізнага індэкса не было, так што ліку пра тое, што дадае зверху граф HNSW, у мяне няма. Адна калекцыя, адна галіна, толькі англійская. Скачка паміж вендарамі, пра які напісана большая частка разбораў, няма нідзе. Мадэлі bge v1.5 я прагнаў з інструкцыяй да запыту, хаця іх картка называе яе неабавязковай.
Што змянілася ў мяне: версія кадавальніка цяпер ляжыць у тым жа файле, што і любы парог адсячэння, а часткова закадаваны індэкс у выдачу не ідзе. Пераключаць абедзве паловы разам і так было планам па іншых прычынах. Лік для альтэрнатывы цяпер ёсць: 0.6408 супраць 0.7404.