મારી RAG એપ સતત Hallucinate કેમ કરતી હતી અને મેં તેને કેવી રીતે સુધારી

થોડા મહિના પહેલા, મેં મારા RAG સપોર્ટ બોટનું ડેમો આપ્યું હતું. તેણે એક સહકર્મીને કહ્યું કે અમારી રિફંડ પોલિસી 30 દિવસની છે. અમારી વાસ્તવિક પોલિસી 14 દિવસની છે. બોટે અચકાયા વગર, તે અનિશ્ચિત છે તેમ કહ્યા વગર, પૂરા આત્મવિશ્વાસ સાથે એક જવાબ બનાવી દીધો.

RAG એ Hallucinations ઘટાડવા જોઈએ. મારા સેટઅપમાં તો તે માત્ર એક જગ્યાએથી બીજી જગ્યાએ જ ખસી રહ્યા હતા. આ સિસ્ટમનું ડિબગિંગ કરતી વખતે મેં પાંચ પાઠ શીખ્યા.

  1. ચંક્સ (chunks) માટે નિશ્ચિત કેરેક્ટર કાઉન્ટનો ઉપયોગ કરવાનું બંધ કરો હું થોડા ઓવરલેપ સાથે 1000 કેરેક્ટરના ચંક્સનો ઉપયોગ કરતો હતો. આના કારણે સમસ્યાઓ ઊભી થઈ. એક ચંકમાં ઘણીવાર શિપિંગના નિયમો અને રિટર્નના નિયમો મિક્સ થઈ જતા હતા. મોડેલે આ અલગ-અલગ વિભાગોને ભેગા કરીને એક ખોટો જવાબ આપી દીધો. સુધારો: મેં સેમેન્ટિક ચંકિંગ (semantic chunking) અપનાવ્યું. મેં હેડિંગ્સ અને પેરેગ્રાફ દ્વારા ડેટાને વિભાજિત કર્યો. આનાથી સંબંધિત માહિતી એકસાથે રહે છે.

  2. સમાનતા (Similarity) એટલે સુસંગતતા (relevance) નથી મારો રીટ્રાઇવર (retriever) કોસાઇન સિમિલિટી (cosine similarity) ના આધારે ટોચના 3 ચંક્સ લાવતો હતો. એક ચંક પ્રશ્ન જેવો સમાન દેખાઈ શકે છે, પરંતુ તેમાં જવાબ હોવો જરૂરી નથી. મોડેલ એવું માની લે છે કે કોન્ટેક્સ્ટમાં રહેલી બધી જ માહિતી સાચી છે. સુધારો: મેં cross-encoder નો ઉપયોગ કરીને રી-રેન્કિંગ (reranking) સ્ટેપ ઉમેર્યું. મેં રીટ્રાઇવલ સ્કોર્સ લોગ કરવાનું પણ શરૂ કર્યું. આનાથી ખબર પડે છે કે ક્યારે સિસ્ટમ પાસે સાચો જવાબ નથી.

  3. મોડેલને કહો કે નિષ્ફળ જવું ઠીક છે મારો મૂળ પ્રોમ્પ્ટ સાદો હતો: પ્રશ્નનો જવાબ આપવા માટે કોન્ટેક્સ્ટનો ઉપયોગ કરો. જ્યારે કોન્ટેક્સ્ટ ન હોય ત્યારે શું કરવું તે માટે તેણે મોડેલને કોઈ સૂચના આપી નહોતી. મોડેલે ખાલી જગ્યાઓ અંદાજો દ્વારા ભરી દીધી. સુધારો: મેં એક ચોક્કસ સૂચના ઉમેરી. જો જવાબ કોન્ટેક્સ્ટમાં ન હોય, તો કહો કે તમે જાણતા નથી. Hallucinations તરત જ ઘટી ગયા.

  4. રીટ્રાઇવલ થ્રેશોલ્ડ (retrieval threshold) લાગુ કરો જ્યારે રીટ્રાઇવલ નિષ્ફળ જાય ત્યારે મોડેલ હજુ પણ સામાન્ય જ્ઞાનનો ઉપયોગ કરતું હતું. મને આશા હતી કે પ્રોમ્પ્ટ કામ કરશે, પરંતુ માત્ર આશા રાખવી એ કોઈ વ્યૂહરચના નથી. સુધારો: મેં એક કડક સ્કોર થ્રેશોલ્ડ સેટ કર્યો. જો ટોચનો રીટ્રાઇવલ સ્કોર ખૂબ ઓછો હોય, તો સિસ્ટમ અટકી જાય છે. તે મોડેલને અંદાજ લગાવવા દેવાને બદલે એક ફોલબેક મેસેજ (fallback message) આપે છે.

  5. માત્ર સફળતા માટે જ નહીં, પણ નિષ્ફળતા માટે પણ ટેસ્ટ કરો મેં ફક્ત એવા સરળ પ્રશ્નોનું ટેસ્ટિંગ કર્યું જે મને ખબર હતી કે ડોક્યુમેન્ટ્સમાં આવરી લેવામાં આવ્યા છે. મેં અસ્પષ્ટ ક્વેરીઝ અને ખૂટતી માહિતીની અવગણના કરી. Hallucinations એ જ ખાલી જગ્યાઓમાં રહેલા હોય છે. સુધારો: મેં 'ટ્રેપ પ્રશ્નો' (trap questions) નો એક ઇવેલ્યુએશન સેટ બનાવ્યો. આ એવા કિસ્સાઓ છે જ્યાં સાચો જવાબ સિસ્ટમમાં નથી. જ્યારે પણ હું કોઈ ફેરફાર કરું છું ત્યારે આ ટેસ્ટ ચલાવું છું.

RAG Hallucinations ને સંપૂર્ણપણે અટકાવતું નથી. તે તેને નિયંત્રિત કરવા યોગ્ય બનાવે છે. મારો બોટ હજુ પણ બધું જ જાણતો નથી. પરંતુ હવે, જ્યારે તે અનિશ્ચિત હોય છે, ત્યારે તે સ્પષ્ટપણે કહે છે. આનાથી આ ટૂલ ઉપયોગી બને છે.

સ્ત્રોત: https://dev.to/pallavi_sharma_10c1a6f1da/why-my-rag-app-kept-hallucinating-and-how-i-fixed-it-3i10