Галоўная / Артыкулы

Якасць RAG на этапе індэксацыі: тыпы фрагментаў, ачыстка і пошукавыя меткі

Якасць RAG закладваецца пры індэксацыі: тэкставыя, таблічныя і выявачныя фрагменты, ачыстка ад шуму парсера і пошукавыя меткі ад LLM, якія амаль удвая скарацілі няўдалыя пошукі.

Выдавец: REACTAPP.TOP12 хв чытання2701 слоў

Крыніцы: The Part of RAG Where Quality Is Actually Won

Дзе дэма ператвараецца ў сістэму для працы ў працэсе

Парсер RAG выдае арранжаваны спіс вузлоў, і кожны вузел знае, з каго ён частка. Усе, што выканана з таго моменту пакуль мадэль не прачытае запіт, являецца работай у час падготавкі індэкса, і самэ гэта ўскладненне і ўражае разліку межы дэмы і сістэмы, якую можна запускаць у працэсе. Гэта працэс складаецца з трохоў задач. Вузлы ператвараюцца ў чакі, якіх існуе тры відэ, кожны з якіх мае свой спосаб стварэння. З чакоў выдаляецца матэрыял, які парсер адкулькі можа выявіў, але які мадэль не павінна бачыць. Кожны чак отрымае короткі генераваны атрыбут ад мовнай модэлі. У внутршніх тэстах на документах банкаеўскага тыпу гэтыя атрыбуты прыблізна падвоілі колькасць невялікіх неудач у выкарыстоўванні інфармацыі, чыяму стала галоўная перадача ціннасі ў усім цыкле апрацоўкі.

Эта методыка таксама ўсё менш прыгожая. Мало хто пішае пра адзьёмленне шуму, і самэ гэта ўсё чым адбываецца, што столькі рэшынкаў існуе. Цікавыя даны ніжэй прайшлі з маленькага внутраняга адзынака, а не з строгага тэста, і іх трэба спрыяць як такія.

Тры відменнікі фрагментавання, тры інструменты

Простая схема выкарыстоўвае аднаго фрагментавальніка: раздзеляе тэкст і праходзіць да наступнага крока. Рэальныя дакументы маюць прынеймнейша тры відменнікі контэнту, якія паводзяцца абсалютна разна. Абаротка прозы, табелі з цэнамі і скрыншот кожны патрабуе свайго адналежнага адпрацоўвання, а спроба працаваць з усімі імі праз аднаго фрагментавальніка ўсё чым адбываецца, што з’яўляюцца непаштоўныя табелі і непрацюючыя крокі.

Фрагменты тэксту парадкаваны па структуры

Раздзелэнне па колькасці сімвалоў не ўзімаецца ў выкарыстоўванне. У замен кожная лінія спачатку запісваецца як загалоўнік, нумераваны крок або звычайная рэчэ, а правілы з’едынення залежаць ад гэтых тыпаў. Гэта не дазволяе нумераванаму кроку быць прыўязаным да несвязанага параграфа. Занадта дзейны тэкст пераканчваецца на канцы рэчэй, а раздзелэнне пасерэдзіні рэчэ ёсць апошнім выкарыстоўваным спосабам. Суседзяючы фрагменты няшто перакрываюцься, таму процедура, якая пераходзіць межу, застаецца зрозумелай з будзь-каго боку.

Тэблы застаюцца цэлымі

Тэблы ствараюцца окрэма, таму што ўсё ў значэнні тэблы крыўдзіцца ў яе структуры. Програма знаходзіць радок загалоўніка, павтарае яго ў кожнай частцы, калі тэблу трэба раздзеліць, і прыводзіць радкі ў парадак. Яна таксама адхоўляе тэблы, якія не маюць рэальнага контэнту, частаэй — тэблы з зместам, якія парсеры выдаюць у вачыму фармаце з загалоўнікамі і номерамі сторанак.

У пакуянні гэтай сістэмы ранейшая версія мела дыякт па гэтым месцы. Спісы зместу выклікаліся за дапамою простага тэста, і багато рэядоў заканчваўся малым чыслам. Тэблі з тарыфамі таксама падпадалі пад гэтыя абставіны, таму рэальны план тарыфаў мог ўзьісці з індэкса без жадных паведамленняў. Новы тэст ўзмацнены: на справжній сторонцы зместу номеры сторанак толькі зростаюць, але сумы тарыфаў, такія як $35, $30 і $7, паднікаюць і спадаюць. Тэблі лячыцца індэксам толькі тады, калі заканчоўныя цыфры ніколі не спадаюць. Цяпер планы тарыфаў застаюцца, старонкі зместу таксама, і адна-едынственная умова пазбавіла нас бага.

Зображэнні выбіраюцца по аднаму

Кожна картынка можа коштаць грошы, таму кожная з іх пробуе тры варыянты па рэчы і зупініцца на першым, яным удаецца працаваць.

  1. У рэжыме безкоштовнага адгэтування выкарыстоўваецца тэкст, які ўжо быў выкаранаў парсер. Калі дакумент містыць прыемны пісьмо аб анотацыю, якая не ўжо ўтварае месца для заполнення, напрыклад "image,", то выкарыстоўваецца саме гэты тэкст, і не запускаецца жадны мадэль візуальнага розпазнавання. У багатох дакументах ад трохці да паловы ўсіх зображэнняў выкарыстоўваецца гэты падход, што ўлучыць у чыстую еконамію.
  2. Аплікацыя з платным доступам вызывае мадэль для аналізу візуальных дадзенняў. Гэта прымае значэнне, калі няма доступнага тэксту, а здольнасць зображэння большая, чым у маленькага раздзелача. Чыста і конкрэтна сформульаваны запіт прымушвае мадэль спачатку класіфікаваць зображэнне. Калі здольнасць — логаік або орнамент, мадэль адпавядае адной словам «DECORATIVE», а рэштка здольнасці відкідаецца. У іншым случае мадэль запалняе два поля. У полі «SCREEN» паказваецца адна лінія з паспраўкай прызначэння экрана, напрыклад, экран для введэння інформацыі пра выходныя зв’язкі для дзяловых акаунтаў, напісаная так, каб яна знаходзілася поблізу запытанняў корыстніка ў вектарнай прасторы. У полі «CONTENT» па парадку чытання перыявляюцца всі пазначкі полей, кнопкі і відны коды, чым даёмася можлівасць шукачам ввесты тыя самыя строкі, якія яны моглі бы ввесты. Такім чынам, скрыншот можна знайсці па прызначэнні, а таксама па напісаным на яму тэксту.
  3. Альтэрнатыўны шлях выкарыстоўвае загалоўку. Калі і гэта не спрацюе, але роздзіл вядомы, зберагаецца месца для заполнення, якое паведамляе, што за зображэнне і дзе яно знаходзіцца, тады яго можна будзе доступнаць праз свой роздзіл пад час запіту.

У перакананні па размеру ёсць невялікі недагэдзік. Мініяцюрныя зображэнні праходзяць за межы пераканання на адпаведнасць розмерам, але оба размеры павінны быць малымі, таму дужа тонкая і дужа шырокая лінія-раздзелачка таксама праходзіць і ўсё рава надаецца модэлю. Гэта трохі змарнавае грошы на дэкор, але не паўшчытае точнасць, і гэта ў спіску задач.

У дыяграме паказаны тры шляхі да зображэнняя, якія пробуюцца ў парадку. Модэль для аналізу зображэння запускаецца адна раз пры індэксаванні, а кожны наступны запіт ёсць безкоштовным.

Упорадкуванне таго, што парсер зробіў правільна

Адакрэснае перакладанне якраз і ўчыняе паспрацоўванне з парсерамі клопачлівым. Яны выкарыстоўваюць усю тэксту пагады: штамп «Конфідэнцыйна», павтароўваецца на 200 пагадах, номеры пагадаў, інформацыю пра автарскія права, рэчэнні, перэрваныя на паўсіні праз перыяд пагадаў. Кожны з гэтых элементаў стае окрэмым фрагментам, і ўсе яны ўтвараюць зайвы шум. Шум таксама спакшвае ранжыраванне, адтолькі як і запіт корыстніка можа знайсці банер так сама лёгка, як і практычны матэрыял.

Таму, калі фрагменты вялікія, яны праходзяць праз процэс чысткі, у якім кожны крок нацэлёваны на певны тып зайвага, які рэальна зустрочыцца ў рэальных дакументах. У следуючай парады:

  1. Фільтрацыя стандартных элементаў адключае простыя номеры пагадаў, штампы версій і лінкі на кшталт «Свяжыцеся з намі» або «Прачытайце больш» пад самым пачаткам. Набор правіл змініцца залежна ад тыпу файла, адтолькі як PDF-файлы, дакументы Word і прэзентацыі кожны маюць свой сябе прыналежны тып зайвага.
  2. Адзьякульвація павтараючыхся элементаў. Тэкст, які выглядае абодно на багацько сторанак, ўважаецца зайвым. Фраза „Конфідэнцыйна, толькі для внутрэннага вжытку“ на падзесяці сторанак таксаваная і адзьякульвуецца, тады калі фраза „Адзірніце сторанку 3“, якая павтарыцца два разы на адной сторанцы, застаецца, адтуды што яна не распрастраńваецца на іншыя сторанкі.
  3. Ліквідацыя некорэктных перэрываў. Фрагмент, які пачынаецца серэд пазыку або з незавершанага пункту, быў раздзелены не там. Калі ён можа з’яўіцца ў тым жа раздэле пасля паканальнага фрагмента, яны з’яеднаюцца. Калі не можа, ён пазначаецца як продажчык, тады яго абазаванне несе гэты кантэкст.
  4. З’яеднанне адзінаковых фрагментаў. Фрагмент дужою мерай 40 сімвалаў, які застаецца на межы раздэла, прабывае пракупіцца суседнім фрагментам, але толькі тады, калі яны разам маюць абодно той самы раздзел і загалоўку. Нічога не з’яеднаецца між раздэламі, а короткі адзінаковы фрагмент застаецца такім, які ён ёсць.
  5. Функцыя адзліквідавання дублікатаў спяўнае ў адну частку рэчэнне, якае павтарылася пад аднім заглавлём. Калі яно з’являецца пад двума заглавлёмі, захоўваюцца обе копіі, адтолькі ўжо з паходжчым шляхам раздзела яны несу разную інфармацыю. З’явы цэлкам абыякавыя, адтолькі два экраны з аднаковым выглядам застаюцца двума аддзельнымі скрыншотамі.

Ніякі з правілаў не ўскладнены. Кожна з іх была створана пасля спаглядання таго, як рэальны дакумент перамагае простэйшую версію, і разам яны пояснююць, чаму запіт прабівае да процедуры, а не да пункту пра аварысны права.

Атрыбут выкарыстоўвання

Наступны ў парадку ўзел мае найбольшы эфект, але большасць сістэм яго праігнораваюць. Возьмім простую частку, падобную да гэтай:

Увядзіце суму і нажміце F4.

У яго ёсць шлях да секцыі Wire Transfer > Initiation > Amount Entry, што ужо дапамагае. Аднак перш чым уключыць тэкст, мадэль мовы таксама пішае короткія атрыбуты для пошуку, якія складаюцца з 18–22 слоў і зберагаюцца разам з чакам. Для гэтага чака атрыбут выглядае прыблізна так:

Этап процедуры: увайсце суму пераказу, а потым нажміце F4, каб падтвердзіць і запусціць пераказ.

Разглядзіме эфект. Без атрыбута паведамленне застаецца ў пространстве інтэграцыі разам з усімі іншымі крокамі, які прасябляюць увесты значэнне і нажаць клавішу. З атрыбутам яно апынваецца поблізу інструкцый пра пераказы грошаў і парадактаванняў, якія ўжоўвае рэальны корыстнік. Перапісаны запіт на кшталт «Як парадактаваць суму па пераказе грошаў» тады знаходзіць гэты фрагмент. У внутранім адлікаванні атрыбуты зменшылі майжэ палову колькасці неправільных выкарыстоўванняў. Гэта была маленькая проба на аднам корпусе, таму спрыймайце гэта як сільную падказку, а не як універсальную константу.

Гэта тэхніка выйшла з методу Contextual Retrieval компаніі Anthropic, які паказаў, што размішчэнне абставінага рэчэння, прызначанага для конкрэтнага фрагмента, прымусова перад кожным фрагментам першым запісам значна зменшае колькасць неправільных выкарыстоўванняў. У даным случае ёй была налаштавана работа з контэнтам, дзе важны точныі ідэнтыфікаторы. Коды транзакцый і клавішы функцый павінны копіювацца без змян і ніколі не перакладвацца, а кожная пазначка пачынаецца з слова, якое вказвае на ролю, напрыклад "Этап процедуры" або "Табліца апавядомлення", тады фрагменты групуюцца з правымі тыпамі запытанняў.

Што бачыць той, хто стварае пазначкі

Якосць пазначкі залежыць толькі ад абставін, якія даюцца модэлю, які яе стварае. Сам фрагмент сама по сабе недастатні, адколі самэ гэтае слова абмовіліся ў значэнні, калі яго вырвалі з стораніцы. Таму кожны запыт на стварэнне пазначкі містыць кілька элементаў:

  • сам тэкст фрагмента
  • шлях і загалоўкі раздзела
  • загаловкі знакоў столбцоў, калі фрагмент — гэта таблыца
  • поперадній і наступны фрагменты, каб паказаць, што іх абграяе
  • короткая апіс тэксту всіго дакумента, для загальнага уявлення

Апіс дакумента прадаёцца праз адзінлікі запыт, які выконваецца перад пачатком пазначэння элементаў. У яму беруцца прыклады фрагментоў з пачатку, серэдзіны і канца, а таксама адна таблыца і адна картынка; пасля чаго вяртаюцца два-тры рэчы, у якіх называецца тып дакумента, яго аўдытарыя і асоціяваныя продукты і коды. Кожны запыт на пазначэння элементаў пасля чаго включае гэты апіс. Фраза "задаць суму" павінна пазначацца інакш у інструкцыі па пераказе грошаў, чым у інформацыі пра крэдыт, і саме за дапамогою гэтага апісу модэль вучыцца, які дакумент яна чытае.

Суседзеяныя элементы заслуговяюць на адказвальнейшыя выгледы, калі ўжо «прыямыя суседзеяныя» не значыць тыя, якія знаходзяцца фізычна паляглі ўжо. Элемент, які знаходзіцца праз адзін элемент, можа належаць да абсалютна іншай процедуры. Таму суседзеяныя элементы выбіраюцца за прынцыпам рэлевантнасці, у трох рангах, беручы першы, які падходзіць:

  1. найбліжэйшы элемент у той жа структурнай дорозе
  2. інакшыя варыянты – найбліжэйшы элемент у той жа верхней структуры
  3. інакшыя варыянты – найбліжэйшы элемент пад тым жа заголовкам

Кандыдаты скануюцца з ўсіх бакоў ад тэкушчага элемента, а все, што знаходзіцца за межамі правільнай структуры, праігнораванае. Такім чынам мадэль бачыць наступны элемент, які дасправды належыць да гэтага. Кожны суседзеяны элемент скорачваецца да каля кількох сот карактароў, што ўстатківае для зрозумеласці кантэксту без неабходнасці перадавання цэлых элементаў.

У прыкладзе F4 модэль бачыць, што пакет даных у яе раздзеле быў прызначаны для выбору бенефіцяра, а наступны — для параджування пераказу. Гэта дазволяе ёй стварыць чыстае апісанне па параметру сумы пераказу, а не нечыткае падсумаванне. Якісна падборка суседніх пакетаў дапамагае заставіць апісанні быць тачнымі.

На рысунке паказана, як модэль апісання чытае суседнія пакеты з таго ж раздзела, а пасля пішчыць адну конкрэтную фразу, якая зберагаецца па боку пакета і вікорыстоўваецца ў обох шляхах пошуку.

Чаму гэта ўзроумна

Тры аспекты робяць гэты падход практычным і не дужа дорогім.

  • Одноразовыя вітраты. Апісанне ствараецца пад час індэксавання і зберагаецца, таму запыты ніколі за ўсё гэта не плацяць.
  • Нізкія вітраты на екземпляр. Невялікая, шырока модэль апісання працюе з групамі пакетаў по 25 екземпляраў, калькі груп працуюць адночасна, і вітраты станавяць менш чым цэнт за пакет.
  • Грацыяя неудача. Аб’екты, у якіх выйшылі прыбліжэнні па атрыбутах, проста залішаюцца без атрыбутаў у індэксе, пакуль працэс продаўжаецца. Шымкі такіх аб’ектаў зберагаюць свой тэкст і шлях да раздзела, проста не атрыбутуючыся, таму перыванне паградзіць якасць, але ніколі не зупініць процэс індэксавання.
  • Атрыбут знаходзіцца у сваёй сабе поле, окрэмна ад тэлу шымка. Гэта раздзеленне мае значэнне пазней, пад час запыту, калі атрыбут отрымае дадатковую вагу пад час пошуку за ключавымі словамі. Галоўная мысль зараз такая, што найдорожэйшыя вычысленні выкананыя ўсё раней, чым хтось здзейсніць пошук, і самэ гэта дазволяе працаваць запытам з перафразаваннем.

    Дэтэрмінізм і версіяваны запрос

    Стварэнне атрыбутаў ёсць дэтэрміністычным: тэмпература равная нулю і фіксаваные параметры значэць, што параднай індэксацыі дакумента будуць ствараны тыя ж атрыбуты. Гэта і ёсць падставай для тверджэння, што косцы плакуецца толькі адна раз. Парадная індэксацыя ніколі не пераранжоўвае вектары, яна проста стварае іх занова.

    Дэтэрмінізм таксама залежыць ад версіявання запросу. Сэд дае ідэнтычны выход толькі для ідэнтычнага вхіднага дадзенага, а тэкст інструкцыі ўскладнюе гэты вхід. Пры рэедыцыі запросу між выданнямі кожны наступны перыяд індэксавання дае разныя атрыбуты, таму індэкс таямніча дзеліцца на два паколенні, і нічога гэта не фіксуе. Таму запрос зберагаецца з тагам версіі, чытаецца за дапамою гэтага тага пад час індэксавання і можа змяніцца толькі праз стэжымы, намераваны апдэйт. Возможнасць відтворэння рэзультатаў між выданнямі трэба стварыць, таму што сам сэд гэтага не забезпечыць.

    Укладкі і зберагаччы

    Пасля чысткі, размешчэння і пазначэння атрыбутаў, пасляпэльны крок пад час стварэння індэкса — гэта стварэнне вектара. Адна мадэль укладкі падтрымлівае ўсі тыпы фрагментаў: text-embedding-3-large, якая скарацана да 1536 вымераў, таму тэкст, табліцы і скрыншоты можаць быць пораўнаныя з запітам у аднам прасторэ.

    У элеменце embedder утвараецца строка фіксаванага парадку: структурны прыдатак, атрыбут, а пасля — тэкст. Прыдатак выкарыстоўвае інфармацыю, якая вялікай мерай вядома пра даны фрагмент. Да яго належы тып дакумента, які можна з’ясавіць з шляху раздзела (напрыклад, графік платы або процедура пераказу грошаў), а таксама загалоўкі і шляхі раздзелаў; для картаку — назва стороніцы і ўзрастанне. Атрыбутаванне фрагмента, які падобаецца на процедуру, як процедура прыводзіць яго да запытанняў, якія пачынаюцца з фразы «як зробіць калякія дзеянні».

    У гэтым этапе ў тэкст таксама дадаецца шлях раздзела, дзе ў старэй версіі была бяда. Раней прычапа была запісвана ў фрагмент пад час чысткі, і будзь-яя пазнейшая правка могла дадаць яе ўтрохты, тым самым таямна паспяшыўшы вектар. Ныякі код адмаўляе ўсю зберажаную прычапу, а потым стварае новую пад час уключэння. Яна знаходзіцца ў аднам месцы і дадаецца толькі адназначна, прычымо да таго, калі мадэль яе чытае, што пазбавіла ад цэлага класу таямных бядаў з двойнымі прычапамі.

    Готавы вектар запісваецца ў хранільнік разам з тэлам фрагмента, атрыбутам, структурнымі метаданнымі і столбцам цэлага тэксту, з якога чытаецца пошук за ключовымі словамі. Пасля чаго дакумент становіцца актыўным. Калі які-небудзь крок практычнага трактавання выклікае бяду, дакумент пазначаецца як адхілёны, а прычына захоўвана для дыягнастыкі, тады як паканальная актыўная версія застаецца доступной для пошуку ўвесь час. Непачаткова індэксаваны дакумент ніколі не будзе відным.

    Як выглядае завершаны рад

    Ёсць прыклад тагу „Enter amount and press F4“ у яго первасны форме ў магазіне. Кожна з яго поль была заполнена на пакульнім кроцы.

    text              : "Enter amount and press F4."
                         (built + cleaned + section-prefixed)
    retrieval_context : "Procedure step entering the amount
                         and pressing F4 during wire transfer
                         initiation."          (the label)
    chunk_type        : TEXT
    section_path      : "Wire Transfer > Initiation >
                         Amount Entry"         (Part 2)
    preceding_heading : "Amount Entry"
    table_headers     : null                  (TABLE only)
    page_start / end  : 12 / 12
    image_object_key  : null                  (IMAGE only)
    embedding_model   : text-embedding-3-large
    embedding_dim     : 1536
    embedding         : [ ...1536 floats... ] (body+label)
    text_search_vector: label weighted high, body lower
    

    У частцы табліцы заголовкі столбцоў заполняюць месца, дзе ў частцы тэксту ёсць значэння null. Частка з адпраўкай зображэння зберагае ключ blob, тып MIME і пазіцыю на сторанцы; даны CONTENT знаходзяцца ў text, а рэквізіт SCREEN — у retrieval_context. Усе тры варыянты маюць аднаковыя правілы фарматавання роўнаў. Адзысканне інформацыі здыйснюецца за дапамогою двух столбцоў: embedding для вектарнага пошуку і text_search_vector для пошуку за ключавымі словамі; кожны з іх вылічваецца на адной з основаў — тэкста або атрыбута. Іншыя столбцы вказываюць на месца розташавання часткі, дазволяюць яе адобразіць або обмежыць доступ толькі для паважанага корыстніка.

    Гэта ўсё, што выходзіць у момент стварэння індэкса: такія роўны, по аднаму на кожную частку, практычна падготавленыя, пазначаныя і перэтвораныя у вектары, якія чакаюць першага запіту.

    Спаднёе чытанне

  • Размах чакаў і перакрыцце ў RAG: шырыні крока, ліміты токенаў і межы — Як чакаваць дзялённе дзялёгай кнігі для RAG: выбір размаху і ступеня перакрыцця, разумеўшы шырыню крока, дазволены ліміт токенаў для імбедджавання, зберагчы метаданы і адзірванне перакрыцця ў рэальным дзялённі. —