
RAG yanıtları nasıl bulur?
Erişimle güçlendirilmiş üretim, canlı şekillerle: belgeler nasıl aranabilir parçalara dönüşür, bir soru en yakın parçaları nasıl bulur ve yanıt kaynaklarına nasıl bağlı kalır.
Bir yıldız, el kitabı pasajlarından oluşan bir haritada bir soruyu temsil eder; çizgiler onu en yakın üç pasaja bağlar.
Kettlewick’te çalıştığınızı düşünün; bahçe sulama kontrol cihazları üreten küçük bir şirket. Üç hafta önce işe başlayan bir meslektaşınız, şirketin sohbet asistanına basit bir soru yazıyor:
Erişimle güçlendirilmiş üretim, kısaca RAG (retrieval-augmented generation), bu soruna getirilen olağan çözümdür. Model yanıtlamadan önce araya bir arama adımı girer: bu adım, yanıtı içermesi en olası birkaç pasajı bulur ve soruyla birlikte modelin önüne koyar. Model de yanıtını bu pasajlara dayandırır ve onlara işaret eder. İşin ilginç yanı, bilgisayarın soruyla aynı kelimeleri kullanmayan pasajların da o soruyla ilgili olduğunu nasıl anladığıdır. En üstteki şekil bu aramanın minyatürü: yıldız bir soru (ilk başta izin sorusunun üzerinde duruyor), çizgiler ise onu anlamca en yakın üç pasaja bağlıyor. Yıldızı sürükleyin ve çizgilerin nasıl yer değiştirdiğine bakın.
Bu yazının sonunda şunları bileceksiniz:
- tüm belgeleri modele yapıştırmanın neden işe yaramadığını ve parçaların (chunk) ne işe yaradığını;
- bir metnin anlam haritasında nasıl bir konuma dönüştüğünü ve bir aramanın bir soruya en yakın parçaları nasıl bulduğunu;
- kaç parça getirileceğini, daha fazlasını getirmenin bedelini ve ekiplerin bir aramanın işe yarayıp yaramadığını nasıl ölçtüğünü.
Neden her şeyi modele yapıştırmıyoruz?
#Bir model girdisini uzun bir metin olarak okur ve bir seferde alabileceği miktarın bir sınırı vardır. Bu sınır modelden modele değişir ve sürekli değişiyor; bu yüzden bu yazıdaki şekiller kelimeyle sayar ve gerçek bir modelin sayılarını değil, uydurma bütçeleri kullanır.
Deneyelim. Aşağıdaki her kare, Kettlewick’in ortak sürücüsünden yaklaşık 250 kelimeyi temsil ediyor; klasördeki sırayla: toplantı notları, destek talepleri, wiki sayfaları, çalışan el kitabı ve birkaç rapor. Halkalı kare, yanıtı içeren izin politikasıdır. Bu yazıdaki Kettlewick ve tüm belgeler kurgusal örnek verilerdir; öğretmek için uydurulmuştur. Modelin bir seferde okuyabileceği kelime sayısını değiştirmek için sürgüyü sürükleyin ve halkanın yeşile döndüğü bütçeyi bulun:
Bu şekil JavaScript gerektirir. 8.000 kelimelik bütçede yalnızca ilk birkaç toplantı notunun sığdığını, yanıtı içeren izin politikasının ise bütçe yaklaşık 51.000 kelimeye ulaşana kadar dışarıda kaldığını ve o noktada modelin okuduğu her şeyin %0,2 kadarı olduğunu gösterir. Yalnızca ilgili parçaları göndermek yaklaşık 70 kelime tutar.
60.000 kelimelik bütçede izin politikasının tamamı sığıyor. Modelin okuduğu metnin kabaca ne kadarı izin politikası?
- Yaklaşık 40 kelimede 1.
- Yaklaşık 500 kelimede 1.
- Yaklaşık 5.000 kelimede 1.
Yanıtı göster
İzin politikası 124 kelime; 60.000 kelimenin içinde 124 kelime yaklaşık %0,2 eder: kabaca 500 kelimede 1. Bütçe şeklindeki küçük halka budur ve RAG’ın bütün sürücü yerine ilgili parçaları göndermesinin nedeni de budur.
A değil: 40’ta 1, %2,5 eder; yani 1.500 kelimelik bir belge. 44 belge var ve politika en kısalarından biri, o boyutun çok altında.
C değil: 5.000’de 1, politikayı yalnızca 12 kelimelik yapardı. Oysa 124 kelime.
Bu yüzden RAG her şeyi göndermek yerine yalnızca küçük bir bölümünü gönderir: bu belirli soruyla ilgili görünen kısımları. Bunun için önce kısımlara ihtiyacımız var.
Belgeleri parçalara bölmek
#Bütün bir belge genellikle tek bir bütün olarak kullanılamayacak kadar büyük ve kalabalıktır: hastalık izniyle ilgili bir soru, izin politikasının yalnızca bir bölümüne ihtiyaç duyar. Bu yüzden her şeyden önce her belge daha küçük birimlere bölünür; bu birimlere
Parçalara bölmenin en basit yolu saymaktır: ilk 30 kelimeyi alın, ardından sonraki 30 kelimeyi alın ve böyle sürdürün. Kesim, sayı nerede biterse orada olur; bir cümlenin ortasında bile. Buradaki boyutlar, token yerine kelime sayısıyla verilmiştir; token, gerçek sistemlerin saydığı kelimeler ve kelime parçalarıdır.
Bakalım. İşte izin politikası, parçalara bölünmüş ve renklendirilmiş hâlde. Altı çizili cümle, yıllık izinle ilgili bir soruyu yanıtlayan cümle: “Herkes takvim yılı başına 25 gün yıllık izin hakkına sahiptir.” Metnin üstündeki satır, bu cümlenin tek bir parçada bütün mü yoksa kesilmiş mi olduğunu söylüyor. Kesikli kutu ve metnin altındaki kutu, arama o parçayı seçerse modele tam olarak ne verileceğini gösterir: ne öncesinde ne de sonrasında başka bir şey yok. Parça boyutunu oynatmadan önce tahmin edin: cümle bütün kalacak mı?
Bu şekil JavaScript gerektirir. İzin politikasının 30 kelimelik parçalara bölünmüş hâlini gösterir; bu boyutta yanıt cümlesi ilk parçada bütün kalır. 26 kelimede cümle iki parça arasında kesilir; paragraf sonlarından bölmek ise cümleyi her boyutta bütün tutar.
Cümle bazı boyutlarda bütün kalır, bazılarında kesilir; bunu tamamen sınırın nereye denk geldiği belirler. 26 kelimede ilk parça “izin” ile bitiyor, sonraki “hakkına” ile başlıyor; ilkini seçen bir arama modele yarıda kalan bir cümle verir. “Paragraf sonlarından” düğmesine basın: cümle her boyutta bütündür; çoğu ekip de bu yüzden böyle böler. Birçok sistem komşu parçaların birkaç kelimeyi paylaşmasına da izin verir; buna
Makul bir tahmin; boyutu 6’ya düşürün ve “orantılı” kelimesine tıklayın. Tek başına bu parça yalnızca bir şeyin “orantılı” hesaplandığını söylüyor; neyin hesaplandığını söylemiyor: “yıllık izin” kelimeleri daha önceki bir parçada kaldı. Minik parçalar bağlamını kaybeder. Kocaman parçalarda ise tersi olur: tek işe yarar cümleyi başka birçok cümlenin arasına gömerler ve bütçeden pay alırlar. Çoğu ekip ikisinin arasında bir yerde karar kılar ve parçaları cümlenin ortasından değil, başlıklar ve paragraflar gibi doğal kırılma noktalarından kesmeyi tercih eder.
Parçalarınız 26 kelime ve yanıt cümlesi ikisinin arasında kesiliyor. Hangi değişiklik, cümleyi her parça boyutunda bütün tutar?
- Kelime saymak yerine paragraf sonlarından bölmek.
- Parçaları büyütmek; böylece daha az yerde kesik olur.
- Komşu parçaların birkaç kelimeyi ortak kullanması.
Yanıtı göster
Paragraf sonu hiçbir zaman bir cümlenin ortasına denk gelmez; bu yüzden cümle hangi boyut olursa olsun bütün kalır: şekilde “Paragraf sonlarından” düğmesine basıp boyutu kaydırarak görün. Çoğu ekip bu nedenle doğal kırılma noktalarından keser.
B değil: daha büyük parçalar cümleyi bazı boyutlarda bütün tutar, bazılarında keser (27 kelime keser, 28 kelime korur) ve cümleyi daha fazla metnin içine gömer.
C değil: örtüşme bazı kesikleri yamar, bazılarını yamamaz. 26 kelimede paylaşılan 8 kelimeden itibaren işe yarıyor, ama başka boyutlarda cümle yine kesiliyor. Şekilde deneyin.
Yazının geri kalanında bu yolu izliyoruz. Kettlewick’in beş el kitabı belgesi, yani
Konum olarak anlam
#23 parçamız ve bir sorumuz var. Bir bilgisayar hangi parçaların soruyla ilgili olduğuna nasıl karar verir? Kelimeleri eşleştirmek bir yoldur; ona birazdan döneceğiz. RAG’ı iyi çalıştıran fikir ise farklı: her metni anlamını yakalayan bir sayı listesine çevirin; böylece benzer anlamlı metinler benzer sayılar alsın.
Bunu yapan programa gömme modeli, ürettiği sayı listesine de gömme (embedding) denir. Gömmeyi bir konum olarak düşünebilirsiniz: aynı şeyden söz eden metinler birbirine yakın düşer. Gerçek gömmelerde her metin için yüzlerce, hatta binlerce sayı vardır ve kimse bunları çizemez; bu yüzden aşağıdaki harita bir basitleştirmedir. 23 parça, bir gömme modelinin onları kabaca nasıl gruplayacağına uygun biçimde düz bir sayfaya elle yerleştirildi.
İşte 23 parçanın haritası. Bir noktanın üzerine gelerek neyi içerdiğini okuyun (klavyede Tab tuşuyla noktalara geçip ok tuşlarını kullanın). Haritanın üstünde, el kitabında geçmeyen bir cümle yazan bir kart var. Kartı haritaya sürükleyerek ya da bir yere dokunarak cümlenin nereye ait olduğunu tahmin edin ve gerçekte nereye düştüğünü görün.
Bu şekil JavaScript gerektirir. 23 el kitabı parçasının haritasını ve “Rahatsızsam evde kalabilir miyim?” gibi beş uydurma cümleyi gösterir; her cümle, onunla tek bir kelime bile paylaşmayan ama aynı konudaki bir parçanın yanına düşer.
Bu cümlelerden hiçbiri, yanına düştüğü iki parçayla aynı kelimeyi paylaşmıyor: “rahatsızsam” hastalık izni parçasının, “taksi ücretimi” ise taksilerden söz eden parçanın yanına düştü. Konumu yazılış değil, anlam belirliyor. Beşincisi iki belgenin arasına düştü; çünkü pazar günü binada kimin olacağı sorusu hem ofis saatleriyle hem de ziyaretçilerle ilgili. Sonraki şeklin mümkün olmasını sağlayan da bu: bir soru da haritaya yerleştirilebilir.
Gömme modeli. Benzer şekillerde kullanılan pasajlar benzer sayılar alsın diye çok miktarda metin üzerinde eğitilmiş bir sinir ağıdır; “tatiller izne yakın dursun” gibi kuralları kimse yazmaz. Gruplama eğitimden kendiliğinden çıkar ve bu yüzden kusursuz değildir.
Soru sormak
#Asıl hamle şu: soru da aynı modelden bir gömme alır, böylece aynı haritaya düşer. İlgili parçaları bulmak bir geometri problemine dönüşür: hangi noktalar soruya en yakın?
Aşağıdaki yıldız
Bu şekil JavaScript gerektirir. “Yeni başlayanlar ne kadar tatil yapabilir?” sorusunun izin politikası parçalarının arasına düştüğünü gösterir; en yakın üç parça yıllık izin, izin devri ve resmî tatillerle ilgilidir.
“Yeni başlayanlar ne kadar tatil yapabilir?” sorusu için en yakın parça yıllık izin parçası; üstelik soruda ne “yıllık” ne de “izin” geçiyor: arama yazılışı değil, anlamı karşılaştırır. Getirilecek parça sayısına genellikle top-k denir. İzin sorusu için bir parça yeter. E-214 için ise yanıt yalnızca dördüncü en yakın parça; bu yüzden k = 3 iken model doğru parça öbeğini alır ama yanıtı yine de kaçırır; k’yi 4 yapın, yanıt gelir.
k’yi büyütmenin bir bedeli var: modelin okuyacağı metin artar ve eklenen her parça, yanıtı içermeyen bir parça daha demektir. Top-k’nın bütün hikâyesi bu denge; bunu en sonda düzgünce ölçeceğiz.
Çünkü eklenen her parçanın bir maliyeti var. İstemde yer kaplıyor ve modelin yanıt yerine onu izlemesine yol açabilecek metin ekliyor; üstelik uzun girdiler üzerine yapılan araştırmalar, modellerin girdinin ortasındaki bilgiyi başındakinden ya da sonundakinden daha güvenilmez biçimde kullandığını buldu. İyi seçilmiş birkaç parça, bir yığından daha iyidir. Bazı ekipler gerçekten yirmi parça getirir; ama yalnızca aralarından en iyi birkaçını seçmek için; bunu en sonda göreceğiz.
O zaman en yakın parçalar pek yakın değildir ve yanıtı hiç içermeyebilir. Arama, hepsi kötü eşleşme olsa bile her zaman en iyi k sonucu döndürür. Yıldızı boş bir köşeye sürükleyin: çizgiler kesikli olur ve şekil, en yakın parçanın bile uzakta olduğunu söyler. Ya da köpek sorusunu seçin: en yakın parçalar, ziyaretçiler ve ofis saatleriyle ilgili olanlar, kesikli dairenin içinde durur; yine de şekil, el kitabındaki hiçbir parçanın bu soruyu yanıtlamadığını söyler. Yakın olmak yanıtlamak demek değildir. Modelin bu durumda ne yapması gerektiğine birazdan döneceğiz.
“E-214 ne anlama geliyor?” sorusu için yanıtı içeren parça dördüncü en yakın parça. k = 3 iken model ne görür?
- E-214 parçasını, çünkü en yakın parçaların hepsi aynı SSS’den geliyor.
- Hiçbir şey, çünkü yanıt ilk üçte değilse arama başarısız olur.
- Üç SSS parçası görür; hiçbiri E-214’ü açıklayan parça değil.
Yanıtı göster
k = 3 iken arama en yakın üç parçayı döndürür: “Durum ışığı kırmızıysa”, “Hata kodları” ve “Rill nedir?”. Üçü de Rill SSS’den gelir ve hiçbiri, dördüncü sırada olan E-214’ü açıklamaz. Soru haritasında k’yi 4 yapın, yanıt onlara katılır.
A değil: k, belgeleri değil en yakın parçaları sayar; aynı SSS’de olmak bir parçanın içeri girmesini sağlamaz.
B değil: arama her zaman ilk k sonucu döndürür; yanıtın dördüncü olduğunu bilmesinin bir yolu yok.
“Yakınlık” nasıl ölçülür
#Haritada yakınlık bir cetvelle ölçülüyor; ama birçok sistem bunun yerine iki gömme arasındaki açıyı ölçer, bu da okların ne kadar uzun olduğunu yok sayar; her gömme aynı uzunluğa getirildiğinde iki sıralama tamamen aynı çıkar. Sonraki hiçbir şey buna bağlı değil; açının nasıl çalıştığını görmek istiyorsanız yan yolu açın.
İsteğe bağlı yan yol: yakınlığı açıyla ölçmek
Her gömmeyi ortak bir başlangıç noktasından çıkan bir ok olarak düşünün. Kosinüs benzerliği okların uzunluğunu yok sayar ve yalnızca ne ölçüde aynı yöne baktıklarına bakar. Aşağıdaki şekilde
Bu şekil JavaScript gerektirir. 39 derece arayla duran iki oku ve 0,78’lik bir kosinüs benzerliğini gösterir.
Oklar aynı yöne baktığında skor 1, dik açıda 0, zıt yönlere baktıklarında −1 olur. Şimdi yalnızca B okunun uzunluğunu değiştirin: skor kıpırdamaz; çünkü yalnızca yön sayılır. İşlem kısa. İki okun karşılıklı sayılarını çarpıp sonuçları toplayın, sonra iki uzunluğun çarpımına bölün. Gerçek gömmeler aynı toplamı iki sayı yerine yüzlerce ya da binlerce sayı üzerinde yapar.
Kelimeler ve anlam
#Anlam araması, kelime eşleştirmeden kesinlikle daha iyi görünüyor. Oysa değil. Daha eski yaklaşım olan anahtar kelime araması, bir parçayı sorunun kelimelerinden kaç tanesini içerdiğine göre puanlar. Gerçek anahtar kelime motorları nadir ve yaygın kelimeler konusunda daha akıllıdır, ama fikir aynıdır. Anahtar kelime araması anlam aramasından farklı bir biçimde başarısız olur ve bu iki başarısızlık birbirini iyi tamamlar.
Şekil aynı soruyu üç yolla çalıştırır. Her satır bir parçadır ve halka, yanıtı gerçekten içeren parçayı işaretler. Tıklamadan önce hangi aramanın izin parçasını bulacağını tahmin edin. Sonra
Bu şekil JavaScript gerektirir. Anahtar kelime aramasının tatil sorusunda yıllık izin parçasını kaçırdığını, anlam aramasının E-214 kodlu parçayı kaçırdığını ve ikisini birleştirmenin her iki yanıtı da bulduğunu gösterir.
“Yeni başlayanlar ne kadar tatil yapabilir?” sorusunda anahtar kelime araması yıllık izin parçasını tamamen kaçırıyor. Parça “yıllık izin” diyor, soru ise “tatil”; hiç ortak kelimeleri yok, bu yüzden skoru 0 ve hiçbir ayar onu getiremez. Bunun yerine “İlk haftanız” parçasını başa koyuyor, çünkü o parça “yeni” ve “başlayanlar” kelimelerini içeriyor. Anlam araması ise izin parçalarını kolayca buluyor.
Türkçenin sondan eklemeli yapısı işi biraz daha zorlaştırıyor. Bu arama “tatil” sözcüğünü yalnızca tam o biçimiyle arar: “Bu politika hakkında” parçasındaki “resmî tatil haklarını” ifadesi bu yüzden ikinci sırada, oysa tatilleri gerçekten anlatan “Resmî tatiller” parçası tek bir “-ler” ekinden dolayı eşleşmiyor. Gerçek arama motorları Türkçede genellikle kelimeleri kök biçimine çevirerek bu sorunu azaltır; buradaki oyuncak arama bunu yapmaz.
Şimdi “E-214 ne anlama geliyor?” sorusuna geçin ve örüntü tersine döner. Anlam araması bunu bir cihaz sorunu hakkında bir soru olarak görüyor ve uyarı ışıkları ve hata kodlarıyla ilgili parçaları getiriyor. Tam kod, gömmede az ağırlık taşıyan nadir bir dizgi olduğundan E-214’ün kendisini anlatan parça dördüncü sıraya, çizginin hemen altına düşüyor. Anahtar kelime araması onu hemen buluyor, çünkü “E-214” parçanın metninde aynen geçiyor. Soru “anlama geliyor” derken parça “anlamına gelir” dediği için bu kelimeler eşleşmiyor, ama “E-214” tek başına yetiyor.
İkisini birleştirmek, yani hibrit arama, her iki yanıtı da yakalıyor. Burada birleşik skor, kelime sayıları 0 ile 1 ölçeğine getirildikten sonra ikisinin ortalamasıdır. Kusursuz değil: tatil sorusunda “İlk haftanız” yine başta, bu kez iki şanslı kelime sayesinde.
Anahtar kelime araması aşağıdaki sorulardan hangisini en iyi karşılar?
- “Lokantada günlük harcama sınırım kaç?”
- “E-1 hata kodları ne anlama geliyor?”
- “Yeni gelenlerle burada kim ilgilenir?”
Yanıtı göster
Nadir, tam bir kod içeren soru. “E-1” hem soruda hem “Hata kodları” parçasında geçtiği için anahtar kelime araması o parçayı başa koyar. El kitabını başka sözcüklerle soran bir soru, yanıtlayan parçayla hiç ortak kelime paylaşmaz; hibrit arama bu yüzden anahtar kelimelere anlamı da ekler.
A değil: Yemek parçası “yemek” ve “günde” diyor, soru “lokanta” ve “günlük harcama”. Fikir aynı, ortak kelime yok; bu yüzden anahtar kelime skoru 0.
C değil: yanıtı “rehber arkadaşınız” sözcüğünü içeren parçalar veriyor, ama bunlarla “ilgilenir” arasında ortak kelime yok. Anahtar kelime araması, “yeni” sözcüğü yüzünden “İlk haftanız” parçasını başa koyar.
Hepsini bir araya getirmek
#Artık tüm bileşenler elimizde. Aşağıdaki şekilde her kutu bir adımdır: soru, en yakın üç parça, bunları kaynak olarak numaralandıran istem ve bunlara atıf yapan yanıt. İstem ile yanıtlar, bu yazı için elle yazılmış senaryolu örneklerdir; gerçek bir modelin çıktısı değildir.
Bir soru seçin, hattı (pipeline) adım adım izleyin (ya da “Adımları sırayla göster”e basın) ve istemin ilk satırına bakın: bu bir yönerge ve kesikli çizgili bir kutu olarak çizilmiş. 4. adımda onu kapatın ve ne değiştiğini görün.
Bu şekil JavaScript gerektirir. Soruyu, en yakın üç izin politikası parçasını, bunları kaynak olarak numaralandıran bir istemi ve 1. ve 3. kaynağa atıf yapan senaryolu bir yanıtı gösterir. El kitabının yanıtlamadığı, işe köpek getirme sorusu için ise kaynakların evcil hayvanları kapsamadığını söyleyen senaryolu bir yanıtı ve yönerge kapatıldığında uydurma bir yanıtın nasıl göründüğünü gösterir.
El kitabının yanıtladığı bir soruda yönergenin hiçbir farkı olmuyor. Her iddia, istemde yer alan ve kontrol edebileceğiniz bir kaynağa işaret ediyor: 25 gün ve 1 Temmuz örneği 1. kaynaktan, resmî tatiller 3. kaynaktan. İzin devriyle ilgili 2. kaynak getirildi ama gerekmedi. Kaynağının vurgulandığını görmek için şekildeki bir atfın üzerine gelin ya da ona odaklanın.
El kitabının yanıtlamadığı bir soruda ise yönerge farkın tamamıdır. En yakın parçalar ziyaretçiler ve ofis saatleriyle ilgili; arama elinden geleni yaptı. İstemde yönerge varken model kaynakların sessiz olduğunu söyler; yönerge yokken akıcı bir tahmini durduracak hiçbir şey yoktur ve bu tahminin hiçbir atıf taşımadığına dikkat edin. Bu tahmin yalnızca bu örnek için uydurulmuştur; gerçek bir modelin çıktısı değildir.
Arama yalnızca zayıf eşleşmeler getiriyor. Yanıtın “kaynaklar bunu kapsamıyor” demesini mi, yoksa bir şey uydurmasını mı belirleyen nedir?
- Bulunan parçaların uzaklık sayılarının ne kadar küçük olduğu.
- Yanıtın kaynaklara atıf yapmasını sağlayan [1], [2], [3] numaraları.
- Kaynaklara bağlı kalıp eksikleri söylemeyi isteyen istem satırı.
Yanıtı göster
İstem satırı belirler. Hat şeklinde köpek sorusunu seçip yönergeyi kapatın: aynı zayıf kaynaklar bu kez hiçbir atıf taşımayan akıcı bir yanıtla gelir. Yönergeyi açın; yanıt kaynakların köpeklerden söz etmediğini söyler. (Akıcı yanıt örnek için uydurulmuştur; hiçbir gerçek model çalıştırılmadı.)
A değil: uzaklıklar aramada kullanılır ve modele hiç ulaşmaz; bu yüzden modelin ne söyleyeceğini değiştiremezler.
B değil: numaralar atıf yapmayı mümkün kılar, bir yanıtı dürüst yapmaz. Bir model, kaynağın hiç söylemediği bir iddiaya da [1] ekleyebilir.
Bir yanıt “[1]” ile bitiyor. Bu atıf neyi kontrol etmenizi sağlar ve neyi vaat etmez?
Yanıtı göster
Bir iddianın hangi kaynaktan geldiğini söyler; böylece o kaynağı kendiniz okuyabilirsiniz: hat örneğinde 1. kaynak gerçekten 25 gün diyor. Yanıtı kendiliğinden doğru yapmaz. Bir model kaynağı yine yanlış okuyabilir; bu yüzden iyi bir arayüz, atıf yapılan metni yanıtın hemen yanında gösterir.
Nerede yanlış gider ve ne işe yarar
#RAG, zor işin büyük kısmını modelden aramaya kaydırır. Yanlış yanıtlar genellikle birkaç tanıdık sorundan kaynaklanır.
- Güncelliğini yitirmiş belgeler. Kimse kaldırmadığı için arama geçen yılın seyahat kurallarını buluyor. RAG yalnızca dizine aldığınız kadar günceldir; bu yüzden dosyalar değiştiğinde yeniden dizine alın ve eski sürümleri kullanımdan çıkarın.
- Kötü parçalara bölme. Bir parça neyle ilgili olduğu bilgisini kaybedebilir ya da yanıtı ikiye bölebilir. Başlıklardan ve paragraflardan kesmek, her parçaya belge başlığını eklemek ve ölçülü bir örtüşme yardımcı olur.
- Kaçırılan yanıtlar. Yanıt var ama ilk k içine hiç giremiyor; k = 3 iken E-214 parçasının başına gelen gibi. Model hiç görmediği şeyi kullanamaz.
Ölçerek. Yaygın bir alışkanlık, gerçek soruları, onları yanıtlayan parçalarla birlikte toplamak ve bu parçaların ilk k içinde ne sıklıkla göründüğünü kontrol etmektir. İşte o alışkanlığın minyatürü: her biri kendisini yanıtlayan parçayla eşleştirilmiş on iki uydurma test sorusu. Hepsi k = 3 ile önceden çalıştırıldı. k’yi kaydırın; aramanın hangilerini bulduğuna ve her ek parçanın neye mal olduğuna bakın.
Bu şekil JavaScript gerektirir. On iki kurgusal test sorusundan, k = 3 iken anahtar kelime araması 9’unda, anlam araması 10’unda, ikisi birlikte 11’inde yanıt parçasını buluyor; k = 5 iken anlam araması ve ikisi birlikte 12’sinin hepsinde buluyor.
k = 3 iken iki arama birlikte 12 sorunun 11’ini buluyor. k’yi 5 yapın: anlam araması ve ikisi birlikte on ikisini de bulur, ama artık model her soru için beş parça okuyor ve bunlardan yalnızca biri yanıtı içeriyor.
Anahtar kelime araması k’yi ne kadar artırırsanız artırın 9’da kalıyor: soruyla hiç ortak kelimesi olmayan bir parça sıfır skor alır ve hiçbir k sıfırı yükseltemez. Türkçede bu en çok eklere takılıyor: “taksiyle” diyen soru “taksiye” diyen parçayı, “çalındı” diyen soru “çalınırsa” diyen parçayı bulamıyor.
k = 3 iken üçünün de kaçırdığı tek soru E-101 koduyla ilgili olanı: el kitabı bu koddan yalnızca “E-1” diye söz ediyor; anlam araması onu beşinci sırada buluyor. Bir ekip k’yi böyle seçer ve fazladan okumaya değip değmediğine böyle karar verir.
Bir ekibin araması, 12 test sorusunun 11’inde yanıt parçasını ilk 3’te buluyor. Bu sayı size neyi söylemez?
- Son yanıtların doğru olup olmadığını.
- Aramanın bir şey bulup bulmadığını.
- Her soru için kaç parça getirildiğini.
Yanıtı göster
Sayı yalnızca doğru parçanın ilk 3’e girdiğini söyler. Modelin o parçayı doğru okuyup iyi bir yanıt vermesi ayrı bir ölçümdür; bu bölümdeki şekil yalnızca getirmeyi ölçer.
B değil: 12 sorunun 11’i çoktur; arama yanıt parçalarını açıkça buluyor.
C değil: bu sayı k = 3 ile elde edildi; soru başına üç parça getirildiği baştan belli.
Ölçme yerindeyken sık başvurulan birkaç teknik var:
- Hibrit arama, daha önce gördüğümüz gibi; böylece tam adlar ve kodlar kaybolmaz.
- Yeniden sıralama (reranking): önce geniş tutarak ilk 20 kadar parçayı getirin, sonra daha yavaş ve daha özenli bir modelin onları yeniden sıralamasına ve en iyi birkaçını seçmesine izin verin. “İlk haftanız” gibi şanslı eşleşmelere karşı olağan çare budur.
- Üst veri (metadata) filtreleri: parçaları belge türü, ekip ya da tarih gibi bilgilerle etiketleyin ve aramadan önce filtreleyin; böylece güncel politikayla ilgili bir soru yalnızca güncel politikalarda aranır.
Daha fazla okuma
#RAG adı, sinir ağı tabanlı bir getirme modelinin bir metin üreticisiyle eşleştirildiği, Patrick Lewis ve arkadaşlarının “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks” (2020) makalesinden gelir. Anahtar kelime yerine gömmelerle aramanın soru yanıtlamada iyi çalıştığı “Dense Passage Retrieval for Open-Domain Question Answering” (Karpukhin ve arkadaşları, 2020) makalesinde gösterildi. Uzun girdilerin ortasındaki bilgiyle ilgili bulgu “Lost in the Middle: How Language Models Use Long Contexts” (Liu ve arkadaşları, 2023) makalesinden, karşılıklı sıra birleştirme ise Cormack, Clarke ve Büttcher’in “Reciprocal Rank Fusion outperforms Condorcet and individual Rank Learning Methods” (SIGIR 2009) çalışmasından geliyor.
Bu yazı çok şeyi dışarıda bırakıyor: gömme modellerinin nasıl eğitildiğini, milyonlarca parça arasında aramayı hızlı tutan yaklaşık en yakın komşu arama dizinlerini ve yalnızca getirmenin değil, yanıtların kalitesinin nasıl değerlendirileceğini. Harita, skorlar ve senaryolu yanıtlar öğretmek için basitleştirilmiştir. Bu, İngilizce özgün yazının Türkçe uyarlamasıdır: örnek belgeler ve sorular Türkçe için yeniden yazıldı, bu yüzden bazı sayılar özgün yazıdan farklı. Buradaki anahtar kelime araması kök bulma yapmaz; Türkçe için tasarlanmış gerçek arama motorları genellikle yapar ve bu yüzden ekler karşısında buradaki kadar kırılgan değildir.
Sonuç
#RAG, bir arama adımı ve ardından gelen bir okuma adımıdır. Belgelerinizi kendi başlarına anlamlı kalan parçalara bölün, parçaları bir anlam haritasına yerleştirin, soruya en yakın parçaları getirin (tam adları ve kodları yakalamak için yanında anahtar kelimeleri de kullanın), kaç parça okumayı göze alabileceğinize karar verin ve modelden yalnızca getirilenlere dayanarak yanıt vermesini, atıf yapmasını ve kaynaklar yetersizse bunu söylemesini isteyin. Kalitenin büyük kısmı aramadan gelir; yanıtlar yanlış çıktığında ilk bakılacak yer de orasıdır.
Aynı tarif yerel bir modelle de işler: Hati ile belgeleriniz kontrol ettiğiniz donanımda kalabilir ve getirilen parçalar dahil istem kendi makinenizdeki model tarafından işlenir; bağladığınız araçlar ya da entegrasyonlar ise yine verileri başka yerlere gönderebilir.