Печалби:
- Внедряване на хибридно търсене, което съчетава селекция от топ-k и семантично търсене и търсене по ключови думи
- Повишаване на точността на първото търсене с повторно класиране
- Правене на трудните въпроси по-лесни за търсене с техники като трансформация на заявки и HyDE
Нарязахте добре документите и ги поставихте във векторната база данни. Сега истинската работа: извличане на правилните части, когато потребителят зададе въпрос. Това се нарича извличане и е гръбнакът на качеството на RAG. Запомнете фразата "Качество на извличане = RAG качество"; Това устройство е точно изкуството за подобряване на това качество. Ще обхванем практически техники от топ-k избор до хибридно търсене, от повторно класиране до трансформация на заявка.
Top-k: Колко парчета ще донесем?
Най-основната настройка: колко парчета (k) да се върнат от търсенето. Ако донесете по-малко (k=1) има голям риск да пропуснете правилното парче; Ако добавите твърде много (k=20), това ще добави шум към модела и цената на токена ще се увеличи.
Правете разлика между две понятия. Спомнете си: скоростта, с която правилното парче е сред извлечените. Прецизност: скоростта, с която това, което се извлича, е релевантно. Увеличаването на k увеличава запомнянето, но намалява прецизността. Целта е да се балансират двете.
топ-к
Въздействие
подходяща ситуация
1-3
Висока точност, риск от пропуск
Прости въпроси с един отговор
4-8
Баланс; повечето сценарии
Общ корпоративен RAG
10-20
По-високо припомняне, шумът се увеличава
С повторно класиране (по-долу)
Съвет: Често срещан и мощен модел: извличане на широк (k=20), след това стесняване с прекласиране (топ 4). По този начин няма да пропуснете нищо и давате чист контекст на модела.
Хибридно търсене: Силата на две търсения
Семантичното (векторно) търсене улавя значението, но пропуска неща: пълен код на продукта ("XR-4471"), рядко съкращение, правилно име, номер на версията. За тези задачи с точно съвпадение старото търсене по ключови думи – особено класическият алгоритъм, наречен BM25 – е много добро.
Хибридното търсене съчетава двете: както семантичното търсене, така и търсенето по ключови думи работят, комбинирайки резултатите. Така при въпрос като „Гаранционен срок на
Обединяването обикновено се извършва с RRF (Reciprocal Rank Fusion): записът, който е по-висок в двата списъка, излиза напред.
# Хибридно извличане (концептуално)sem = vector_search(въпрос, k=20) # meaningkey = bm25_search(въпрос, k=20) # fullwordresult = rrf_merge(sem, ключ)[:8] # сливане на двете, топ 8
Прекласиране: Второ и по-интелигентно преминаване
Първото обаждане може да бъде бързо, но грубо. Прекласирането оценява кандидатите, върнати от първото търсене, един по един с по-мощен модел (обикновено кръстосано кодиране — модел, който чете въпроса и пасажа заедно и оценява уместността) и премества най-подходящите на върха.
Логиката е следната: първото търсене задава голям брой кандидати за извикване (20 кандидата), прекласиращият избира най-добрите 4 за прецизност. Този двуетапен подход е много по-точен от едноетапното търсене. Коства известно забавяне и допълнителна обработка; Печалбата е значително повишаване на качеството.
# Двуетапно извличане (концептуални) кандидати = hybrid_search(въпрос, k=20) # широк, бърз резултат = reranker.score(въпрос, кандидати) # резултат за уместност за всеки кандидат контекст = rated.rank()[:4] # топ 4
Трансформиране на заявката
Понякога проблемът не е в търсенето, а в самия въпрос. Ако потребителят попита „какво ще кажете за отдалечените работници?“ “, това не може да се търси само (не е ясно какво е за отдалечени работници). Ето техниките за трансформация на заявката:
- Пренапишете: Използвайте хронологията на разговорите, за да направите въпроса самостоятелен: „Какво имат дистанционните работници, които имат право на годишен отпуск?“
- Множествена заявка: Генерирайте 3 различни израза на един и същ въпрос, търсете с всички тях, комбинирайте резултатите. Различните думи намират различни парчета.
- HyDE (вграждане на хипотетични документи): Първо отпечатайте „възможен отговор“ на модела, след това вградете и потърсете този въображаем отговор. Въображаемият отговор понякога се намира по-добре, защото е по-близък на думи до истинския документ.
# Multi-query (conceptual)variants = model.uret("Изразете този въпрос по 3 различни начина: " + question)tum_sonuc = []for v in variants: all_sonuc += vector_intermediate(v, k=6)context = singular_and_order(tum_result)[:6]
Слабо извличане / Силно извличане
Слаб (един етап, само семантика, константа k=3):
резултат = vector_search(question, k=3)# Проблем: кодът на продукта е пропуснат, не може да се въведе правилна част 3 в трудни въпроси.
Мощен (хибриден + широк + прекласиране + множествена заявка, ако е необходимо):
кандидати = hybrid_search(rewrite(въпрос, минало), k=20)context = reranker.score(въпрос, кандидати).first(4)# И точното съвпадение, и значението се улавят; Става за най-добрите 4 модела.
Три мини калъфа
Случай 1 — Кодът на продукта е избягал. Чисто семантично търсене на екип за поддръжка не можа да намери "RTX-9080" дословно във въпроса "RTX-9080 грешка в драйвера"; Той носеше други продукти с подобни имена. Когато беше добавено хибридно търсене, се получи точно съвпадение на кода и процентът на връщане на правилни статии се увеличи от 58% на 92%.
Случай 2 — Разлика в прекласирането. Помощник-юрист работеше с k=5, но правилният елемент е 7-10 през повечето време. Той оставаше в редиците. Когато беше въведено k=20 + повторно класиране, процентът на правилната статия в топ 3 се увеличи от 61% на 94%; Латентността се увеличи само с 300 ms — приемлив компромис.
Случай 3 — Допълнителен въпрос без контекст. В асистент по човешки ресурси потребителят пита „какво ще кажете за хората на непълен работен ден?“ Когато попитах, системата донесе неподходящи части. Чрез пренаписване на заявката (извличане на контекста „годишен отпуск“ от миналото и добавяне на „Служителите на непълно работно време имат право на годишен отпуск“), процентът на правилните отговори се увеличава от 40% на 86%.
Често срещани грешки
- Разчитане единствено на семантично търсене: Кодът на продукта, съкращението, собственото име са пропуснати; Добавете хибрид.
- Поддържане на k твърде малко: Правилното парче не може да влезе в списъка; направете го широк и го стеснете с повторно класиране.
- Никога не мислете за повторно класиране: Първото търсене е грубо; Второто интелигентно преминаване значително подобрява качеството.
- Търсене на последващи въпроси, както е: Въпрос без контекст търси безсмислено; пренаписвам.
- Сляпо увеличаване на k (без повторно класиране): Моделът е изпълнен с шум, отговорът е изкривен и цената се увеличава.
Внимание: Всяка техника добавя разходи и забавяне. Множествената заявка означава 3-кратно търсене, прекласирането означава допълнително извикване на модел. Започнете с прост хибрид + първо разумен k; Измерете и добавете тежки техники, където наистина е необходимо. Добавяне без измерване.
В обобщение
- Top-k е балансът между припомняне и прецизност; Като цяло 4-8 е добро начало.
- Хибридното търсене комбинира семантично търсене с търсене по ключови думи (BM25); Възстановява точни съвпадения.
- Прекласирането преоценява кандидатите от широкото първоначално търсене със стабилен модел и избира най-добрите.
- Трансформацията на заявка (пренаписване, множествена заявка, HyDE) прави трудните и контекстно-свободни въпроси достъпни за търсене.
- Силен модел: широко извличане → сливане с хибрид → тесен с повторно класиране; но добавете всяка техника, като я измерите.
Задача за приложение
Подгответе 6 трудни въпроса с данни от предишни модули: поне 2, изискващи точни съвпадения (код на продукта, съкращение, дата), 2 семантични (една и съща тема с различни думи), 2 последващи въпроса без контекст. (1) Първо мислете за всеки въпрос като за чисто семантично търсене и маркирайте ръчно кои части ще излязат. (2) Повторна оценка на същите въпроси с добавено хибридно и прекласиране. (3) Пренапишете последващи въпроси без контекст. Отбележете в таблична форма коя техника има значение при кой тип въпроси.
контролен списък
- [ ] Знам, че top-k е баланс с прецизност на припомняне и разумен начален диапазон.
- [ ] Мога да обясня защо хибридното търсене възстановява точни съвпадения.
- [ ] Мога да приложа двустепенната логика на прекласиране (широко → интелигентно тясно).
- [ ] Признавам необходимостта от пренаписване на последващи въпроси без контекст.
- [ ] Потвърждавам, че добавих тежки техники чрез измерване, а не чрез измерване.