Адаптываныя пошукі: ментальная модель, апоўнена памяцю, для пошуку вектараў
Дазвольце даклэ разумець, як эмбедынгі, семантычная падобнасць, апрыксиматычны пошук найбліжэйшага суседа і фільтры метаданых працуюць разам, выкорыстоўваючы людскую памяць як керавальні прынцып.
Можаць прыйсці гадзіны, калі не думаеш ні пра якога вучыльніка з дзецінства. А потым запах пылку ад мелу, запах школьнай столовайчыны чыясць песня, якая гучала па дарозе дадому, момантальна і жываўа вяртаюць тую людзіну. Нічога не шукалі па імені; прыйшоў чыгунак, і спомненне сама сабой выйшла на паверхню.
Гэта тое, што стараецца відтворыць семантычны пошук, системы генеравання з дапамогай адзысквання інфармацыі (RAG) і системы рэкамендацый на AI — хоць і недосконала, але серйозна. Компонент, які гэта можа, — это векторная база дадзеных. У гэтым артыкуле як ментальны модель выкарыстоўваецца прыем «адзысквання па асоціяцыі», каб поясніць, што такое векторы, як вимерваецца сэмабільнасць, як працюе пошук найбліжэйшага суседа і як усе гэта складаецца ў алгорытм адзысквання інфармацыі. Таксама паказваецца, дзе гэта аналагія перестае быць актуальной, бо самэ гэткія моменты ёсць прычынай парадоксав у прыменэнні систем у рэальных умовах.
Зберагачванне па значэнні, а не па назе
У людскай памяці няма абеткавога індэксу. Не існуе такога „ментальнага” папкі пад назой „Ежа”, яка б мела падсабкапку „Італійскі еж”, у якой бы знаходзілася файл пад назой „Піцца”. Самэўсёледжваная іерархія — гэта спосаб, якім традыцыйныя базы дадзэных арганізуюць даны: кожны запис знаходзіцца за вядомым адресам і можа быць знайдзены за дапамогою точнага ключа.
Памяц жа арганізуецца па значэнні і асоцыяціях: па контексте, па адчуваннях, па тым, як адна рэч выступае у зв’язку з іншымі. Ідэя піццы асоюецца з пятнічным вечарам, паездкай у Неаполь, ўтамлюючым абедам, суцэльным сыром, запахам орегано, а можа і з кампусным сябрам, які зіпсав усе парцелі домашньяго тесту. Калі думаеш пра піццу, не ачынаецаеся жадны файл — працоўвае цэлы раён сувязаных спомненняў, прычаму самыя сильна зв’язаныя спомнення выйходзяць першымі.
База дадзэных вектароў выкарыстоўвае самэ гэтае прынцыпа. Элементы зберагаюцца ў завіснасты ад таго, што яны значаць, і ўзяваюцца з базы за тое, насколькі яны супадаюць з запитам, а не за тое, чы роўнасць ключа є ці няма.
Што кодуе вектар
Каб зразумець базу дадзэных, спачатку трэба зразумець, што ў яй ёсць. Вектар тут — гэта проста арранжаваны список цячэй, які выражае значэнне.
Машына не мае жывога уявлення пра тое, што такое піцца. Модель укладання можа выучыць, обрабоўваючы вельмі большыя кантэнты тексту, тое значэнне, якое слова несу. Слова „піцца“ з’яўляецца поблізу слоў „сыр“, „італійскі“, „теста“, „печ“ і „шматак“. Гэтыя асоціяцыі разлічная ад тых, якія є поблізу слова „суші“, але значна перасягаюць з тыми, якія є поблізу слова „плоскі хлеб“ або „кальцоне“.
Модель скондэнсавае тыя шаблёны ў спіс цифр фіксаванай дужыні — зазвычай ад калякіх сотак да калякіх тысяч значэнняў; 384 і 1 536 ёсць типовыя розмеры. Жадна адзінока цифра не несе чытаемага пазначэння, але разам яны точна распакоўваюць элемент у высокадымензійным прасторе. Важная асоблівасць заключаецца ў тым, што вхідныя даны з падобным значэнням ствараюць векторы, якія знаходзяцца падалёку адзін ад другога. «Піцца» знаходзіцца падалёку ад «плоскага хлеба», а дужа далёка ад «звясткі пра квартальныя доходы».
Іншымі словамі, значэнне ператвараецца ў адстань. Усё іншае ў гэтым артыкуле выводзіцца з гэтага едынственнага крока.
Падобнасць як спектр, а не паўнай зусімнасці
Традыцыйны запит ёсць бінарным: рэкорд альбо задовольняе умову, альбо не задовольняе яе. Якщо фільтруваць па слову „сучак“, то будуць атрыбутаваны рэкорды, якія точна маюць слово „сучак“, а ды нічога не будзе для слоў „цуценя“, „голдэн-ретрывер“ чы “вярны чатырохногі сарадник“.
Семантычная сэроднечнасць заменяе гэтую адпаведзь „таў/нет“ на бал, які паказвае, насколькі близкія ўзаімна значэння. Напрыклад, за ілюстратыўной шкалай „цуценя“ можа мець бал 0,94 па адносу да „сучака“, „вовк“ — прыблізна 0,71, а „рахунок-фактура“ — адо 0,08. Як правілу, як метрыку вжываецца косайнавая сэроднечнасць або падобныя відстані, такія як скалярны дзьвін або еўклідава відстань, прычаму правы выбор залежыць ад таго, як трэнаваўся модель эмбеддынгу.
Это адаптаванне падае на эфект пылі з мелу: гэта не точны адпаведнік, а ўсьледжэнне, яке актывае суседзяючыя спомнення, якія зь сваей стороны актываюць іх суседзяў. У базе дадзеных з вектарамі механізмы ўжо числовыя. Запит ператвараецца у вектар, і база дадзеных вяртае зберагнутыя элементы, чыяя вектары знаходзяцца найбліжэй да яго. «Блізкасць» значыць сэмантычнае саадпавенне.
Самэй таго пошук фразы «як выправіць повольны запит у базе дадзеных» можа выявіць дакумент пад назвай «оптымізацыя працэсу запитоў у великых масштабах», нават якіх фразы практычна не маюць спанульных слоў. Їх вектары знаходзяцца недалека адзін ад другога, таму што яны выражаюць аднаковыя намеры.
Заўважэнне пра ціфры
Рэштыкі падобнасці ўзьязначаныя, а не абсалютныя. Рэштык 0,8 ад однага модэлю імбеддынгу нельга паяраваць з рэштыкам 0,8 ад іншага, а нават у межах адного модэлю типовы дыяпазон залежыць ад сферы прыменення. Вядзіце рэштыкі як спосаб размешчэння кандыдатаў па рангу, а якщо вы вжываеце прагу, настроюйце яе на савойных дадзенах, а не выбірайце заканчанае число.
Адносна паўтарэнне: звычны SQL, адаснованы на ключоўых словах, не можа выражаць сэмантычную падобнасць, але гэта не значыць, што базы дадзенаў SQL адключаныя. Расшырэнні, такія як pgvector, пра якіх пагаворыцца нижэй, дадаюць вектарныя столбцы і аператары падобнасці да Postgres, таму такая можлівасць можа існаваць унутры реляцыйной базы дадзенаў.
Пошук найбліжэйшага суседа у масштабе
Як сама база дадзенаў насправды знаходзіць найбліжэйшыя вектары? Асновная операцыя называецца пошукам найбліжэйшага суседа, і яго прыгнечванне да шырокага тэхна чыстае главная прычына існавання вектарных баз дадзенаў.
Уявіце кожны зберагучыся элемент як зору ў галактыце, распаўзануюя яе па значэнні, пры чым супакоўаныя элементы збіраюцца ў аднай рэгіёне. Запит дадае новую зору ў тую галактыцу і запытае, якія пяць існуючых зораў знаходзяцца найбліжэй.
Просты падход вымервае адстань ад запиту да кожнага зберагучага вектара, сортавае рэзультаты і вяртае найболей значныя. Для тыяў тысяч вектараў гэта швайнае і аблікованае. Аднак для мільйонаў чы біліянаў пораўнанне з усім стае вельмі дорогім за лёгкі час.
Таму системы вырабаткі завісяць ад алгорытмаў апрыксиматыванага найбліжэйшага суседа (ANN). Уместо таго, каб адвідаваць кожную зору, яны выкарыстоўваюць індэкс, який скарочывае пошук да перспективных рэгіонаў, прыймаючы невялікую втрату ў тачнасці зарады значныя прыбылі ў швальнасці. Найпашчырэйшы алгорытм сёння — HNSW, які ў складзе паводзіцца як Hierarchical Navigable Small World. Чырпаць базу дадзеных вектароў не трэба знаць яе внутршняе працэсаванне, але трэба знаты, што самэ гэта ўрабляе тое, што пошук сярод ста мільйонаў эмбедынгаў можа завершыцца за каліксекунды.
Слова „апрабоцяйнае“ заслуговаюць на увагу. Індэкс АНН інодзе можа працягнуць не знайсці справжньага найбліжэйшага суседа, а шчыта, па якім ён знаходзіць справжнія лепшыя рэзультаты, які называецца recall, залежыць ад параметраў індэкса, якія ставяць праблему памяці і часу адпаведна да точнасці. Якщо якасьць адзысквання інфармацыі на вялікай шкале выглядае незрозумела неравнамірна, варта пераканаліцца ў настройках індэкса; наша аднарада па настройцы індэксаў HNSW для прыменення ў RAG дакладна раскрывае гэтыя параметры.
Усередзіне хранілыша эмбеддынгаў
У сваім сэрцы база дадзеных вектароў — это хранілыш, оптымізаванае для адной задачы: зберагчэння вектароў і дужа шырокае адзысквання найбліжэйшых суседаў серед іх.
Уявіце бібліятэку, яка ігнаруе Дьюўскую дэсятковую систему та розмішчае кнігі за ўсім, якія вони вызвалі у чытача. Кнігі пра сум стояць праз кнігі пра втрату, якія зноў праз кнігі пра саматнасць, потым — пра ізоляцыю, а ўжо пасля — пра мемуары па самотныя экспедыцыі. Ніхто не прызначаў гэтыя катагорыі вручную; такая аранжавка выйшла таму, што чытачы, якія прывабляюцца адной кнігай, часта жадаюць і іншых.
Pinecone, Weaviate, Chroma та Qdrant — гэта прыклады такіх бібліятэкаў. Вы завантажуеце ў яны эмбедынгі дакументаў, апісанні продуктав, з’явы, перакананыя ў вектары, або шаблоны поведзення корыстувачаў, і яны падтрымліваюць індэкс, так што пошук заставаецца быстрым праз рост колекцыі.
Кожны збераглы запис зазвычай складаецца з трох частак:
- ID, які унікальна ідэнтыфікуе айтэм.
- Вектар, які выражае його значэнне.
- Неабавязковыя метаданы, такія як заглавле, дата, катагорыя чы рэсурсавая адреса, якія можна выкарыстоўваць для фільтрацыі рэзультатаў.
Метаданыя маюць большую цэнна, чым можа здавацца на першы погляд. Рэалістычны запит выглядае так: знайсці пяць дакументаў, якія наіболей супадаюць з запитам, але толькі тыя, якія з’явіліся за апошнія 30 дзён і якія знаходзяцца толькі ў базе ведаў інжынерскай команды. Гэта є векторны пошук у поўнай сувязі з фільтрам метаданых, і большасць прыменных систем паводзяцца самэ так. Таксама важнае значэнне мае спосаб застосоўкі фільтра: філтрацыя пасля пошуку супадамостей можа залічыць менш рэзультатаў, чым вы прасілі, таму пераканайцеся, чы ваша база дадзеных філтруе пасля самага пошуку.
Весь процес адзысквання інфармацыі
Незалежна ад таго, чы розташавана гэта функцыя ў системе RAG, у фічарцы семантычнага пошуку чы ў будзь-ям прыменні, якое выкарыстоўвае збераганую веду, адзысквання інфармацыі выконваецца за аднымі і тымі ж чатырма крокамі.
- Умякчыць контэнт. Кожны дакумент, стаття, апісанне продукту чы ўсё інша інфармацыя, якія трэба можна было шукати, праходзіць через модель умякчэння, і отрыманы вектар зберагаецца разам з первісным контэнтам. Дзялёныя дакументы зазвычай спачатку дзеляцца на часткі, адтак як адны вектар для цэлага інструкцыянару злучае занадта многа ідэй.
- Умякчыць запит за дапамою той самай моделі. Гэта не ўзначальна. Разныя моделі умякчэння ствараюць вектары ў незв’язанных прасторах, таму паўтарны аналіз запита з аднай моделі з дакументамі з іншай дае бессэнсавыя значэння расстоянняў. Змена моделі означае павторны умякчэння всей колекцыі.
- Пошук. Вектар запита падае ў базу даных, алгорытм пошуку найбліжэйшых суседаў знаходзіць найбліжэйшыя зберажаныя вектары, і вяртаюцца найболей релевантныя рэзультаты, як правіло, з показнікамі сэмантычнае схожасці.
З точкі зору корыстніка, рэлевантны адказ праказваецца за калькі секундаў. Пры гэму значэння ператвараліся на цифры, гэтыя цифры паўставляліся ў адносе да мільйонав захоўваных элементаў, вярнуліся найбліжэйшыя падабенства, а адказ ствараўся на базе справжніх контэнтаў.
Чаму векторны пошук зараз ўсюды
Няма дзеўна, вектарныя базы дадзеных былі нішавым інструментам, які выкарыстоўвалі толькі пад час стварэння семантычных пошукавых систем або спецыялізаваных рэкамендатараў. Яны ўжо сталі стандартной часткай багатых AI-зялённяў. Для тэхнологіі RAG патрэбна адзінка для зберагчання та запытвання эмбеддінгаў дакументаў. Агенты запытваюць базы знанняяў па значэнні. Масштабныя рэкамендатары функцыонуюць на адной падставе вектарнай сэмабільнасці. Мультимодальны пошук, такі як пошук аўтарысаў з текстовага опису або тавароў па заванесенай фотаграфіи, таксама адбываецца за дапамогою вектараў.
Якщо вы ствараеце продакты на адной падставе большых мовных модэляў, існуе вялікая шанса, што вы вялікай меры залежыце ад вектарнага пошуку або скора залежыце. Адраднае ў тым, што асновная ідея вже знайома: як толькі мы жывем, памяць завжды знаходзіла найбліжэйшыя асоціяцыі да таго, што ўжо дасягло нашых чуткаў. Вектарная база дадзеных робіць тое ж сама з цыфрамі, за мілісекунды, з мільйонамі елементаў.
Дзе ламае аналагія з памэтю
Порэшчанне з мозгам ўжыткова для інтуіцыі, але ў практыцы важная ролю играе калькі разлікаў:
- Памэц постаўна адрабоўваецца; модель укладання застаеяць незменной. Якщо зменіцца слоўнік вашай галіны, вектары сабе не апдэйтуюцца.
- Памэц без працы спаявае контекст; вектар фіксуе толькі тое, што ў яго паўтрапіла. Некальканосны або з бягамі текст дае паслабыя «суседзі».
- Падобнасць не значыць релевантнасць. Два абзацы можу быць схожыя па значэнні, але толькі адны ў рэальнасці адпавядае на запытанне, таму багатыя системы дадаюць пошук за ключоўымі словамі аб крок пераранжавання.
Практычныя эксперыменты
Вы можете експерыментаваць без стварэння жадной інфраструктуры:
- ChromaDB работае локальна ў Python без неабяжных аднойчын, ключа API чы ўстановкі, і для яго установкі та наладжвання патрабуецца лишэнь калькі ліній коду. Ён падходзіць для навучэння та малых проектаў.
- Qdrant адказвае безкоштовным хмарным рівнем та простым кліентам на Python, што є выгодным выборам, калі хочаце чагось на зразок продакшн-рэшэння без неабяжнай адпаведальнасці за керуванне серверамі. Перад тым, як на ўсё гэта паспеліцеся, пераканайцеся ў дэтальных лімітах кожнага рівня.
- pgvector — гэта расширэнне для Postgres. Якщо вы вяліка частка часу вжываеце Postgres, яно дадае можлівасць вектарнага пошуку без неабяжнай створэння аднойчынай базы дадзеных, чым спрощаецца вся структура.
Незалежна ад выбору, працэс застосоўвання застаецца аднаковым: выбіраеце модель для эмбеддінгу, ператвараеце свой контэнт у векторы, зберагаеце іх, ператвараеце новыя запиты у векторы та адмахваеце пошук. Канцэпты застаюцца тымі ж; зменяецца лишэнь бібліятэка кліента.
Адна і тая ж мадэль з абодвух бакоў ацэнкі
Косінусная блізкасць мае сэнс толькі калі запыт і фрагмент закадаваны адной мадэллю.
def cosine(a: list[float], b: list[float]) -> float:
dot = sum(x * y for x, y in zip(a, b))
na = sum(x * x for x in a) ** 0.5
nb = sum(y * y for y in b) ** 0.5
if na == 0 or nb == 0:
return 0.0
return dot / (na * nb)
# query and passage must come from the same embedding model
score = cosine(embed(query), embed(passage))
Фільтр метаданых стаіць да пошуку суседзяў і вырашае, хто трапляе ў набор кандыдатаў.
hits = collection.query(
query_embeddings=[embed(query)],
n_results=8,
where={"tenant_id": tenant_id},
)
Галоўныя выводы
- Эмбеддынг ператварае значэнне ў пазіцыю, таму падобныя элементы апынуцца ў блізкай адстані адзін ад другога.
- Рэйтынгі падобнасці класіфікуюць кандыдатаў; настаўляйте любы порог на адпаведных вашых дадзенах.
- Індэксы ANN, такія як HNSW, праграмаюць невеликі спад у рэвалюцыі за вялікія прыросты швальнасці при большых масштабах.
- Фільтры метаданых ператвараюць чыстую падобнасць у адпаведныя адказы, якія салідарны з правіламі часу, выхаднага джерага і доступу.
- Запыткі і дакументы должны выкарыстоўваць аднойчы той самы модель эмбеддынга, а якасць выкарыстоўвання залежыць таксама ад способу разбівання на часткі і якасці дадзэных, як і ад самай базы дадзеных.