எனது RAG செயலி ஏன் தொடர்ந்து Hallucinate செய்தது மற்றும் நான் அதை எவ்வாறு சரி செய்தேன்
சில மாதங்களுக்கு முன்பு, எனது RAG ஆதரவு பாட்டை (support bot) ஒரு செயல்முறை விளக்கமாக (demo) காட்டினேன். எங்களது ரீஃபண்ட் கொள்கை (refund policy) 30 நாட்கள் என்று அது ஒரு சக ஊழியரிடம் கூறியது. எங்களது உண்மையான கொள்கை 14 நாட்கள். அந்த பாட் தயங்கவில்லை. தனக்குத் தெரியாது என்று சொல்லவில்லை. முழு நம்பிக்கையுடன் ஒரு பதிலை அது கற்பனை செய்து கூறியது.
RAG என்பது Hallucinations-ஐக் குறைக்க வேண்டும். ஆனால் எனது அமைப்பில் அவை இடம் மாறினவே தவிர குறைந்தன இல்லை. இந்த அமைப்பைச் சரிசெய்யும் (debugging) போது நான் ஐந்து பாடங்களைக் கற்றுக்கொண்டேன்.
துண்டுகளுக்கான (chunks) நிலையான எழுத்து எண்ணிக்கையைப் பயன்படுத்துவதை நிறுத்துங்கள் நான் சிறிய அளவில் ஒன்றோடொன்று மேலெழும்பி (overlap) இருக்கும் வகையில் 1000 எழுத்துத் துண்டுகளைப் பயன்படுத்தினேன். இது சிக்கல்களை ஏற்படுத்தியது. ஒரு துண்டு பெரும்பாலும் ஷிப்பிங் விதிகளைத் திரும்பப் பெறுதல் (return) விதிகளுடன் கலந்துவிட்டது. மாடல் இந்த வெவ்வேறு பகுதிகளை ஒன்றிணைத்து ஒரு தவறான பதிலை அளித்தது. தீர்வு: நான் semantic chunking முறைக்கு மாறினேன். தரவுகளைத் தலைப்புகள் மற்றும் பத்திகளாகப் பிரித்தேன். இது தொடர்புடைய தகவல்களை ஒன்றாக வைத்திருக்கும்.
ஒற்றுமை (Similarity) என்பது பொருத்தம் (relevance) என்று அர்த்தமல்ல எனது retriever, cosine similarity அடிப்படையில் முதல் 3 துண்டுகளை எடுத்தது. ஒரு துண்டு வினாவுடன் ஒற்றுமையாகத் தோன்றலாம், ஆனால் அதில் விடை இருக்க வேண்டிய அவசியமில்லை. சூழலில் (context) உள்ள அனைத்தும் உண்மை என்று மாடல் கருதுகிறது. தீர்வு: ஒரு cross-encoder ஐப் பயன்படுத்தி reranking படிநிலையைச் சேர்த்தேன். மேலும், retrieval scores-களைப் பதிவு செய்யத் தொடங்கினேன். இதன் மூலம் அமைப்பிடம் உண்மையான விடை இல்லை என்பதை அறிய முடிகிறது.
தோல்வியடைவது பரவாயில்லை என்று மாடலிடம் சொல்லுங்கள் எனது ஆரம்பகால prompt எளிமையாக இருந்தது: வினாவிற்குப் பதிலளிக்க சூழலைப் (context) பயன்படுத்துக. சூழல் இல்லாதபோது என்ன செய்ய வேண்டும் என்பதற்கான எந்த அறிவுறுத்தல்களையும் அது மாடலுக்கு வழங்கவில்லை. மாடல் அந்த இடைவெளிகளை யூகங்களைக் கொண்டு நிரப்பியது. தீர்வு: நான் ஒரு குறிப்பிட்ட அறிவுறுத்தலைச் சேர்த்தேன். விடை சூழலில் இல்லை என்றால், உங்களுக்குத் தெரியாது என்று சொல்லுங்கள். Hallucinations உடனடியாகக் குறைந்தது.
ஒரு retrieval threshold-ஐக் கட்டாயமாக்குங்கள் retrieval தோல்வியடையும் போது மாடல் இன்னும் பொது அறிவைப் பயன்படுத்தியது. prompt வேலை செய்யும் என்று நான் நம்பினேன், ஆனால் நம்பிக்கை என்பது ஒரு உத்தி (strategy) அல்ல. தீர்வு: நான் ஒரு கடினமான score threshold-ஐ அமைத்தேன். முதல் retrieval score மிகவும் குறைவாக இருந்தால், அமைப்பு நின்றுவிடும். மாடல் யூகிக்க அனுமதிப்பதற்குப் பதிலாக, அது ஒரு fallback செய்தியைத் தரும்.
வெற்றியை மட்டும் அல்லாமல், தோல்விகளுக்கும் சோதனை செய்யுங்கள் ஆவணங்களில் உள்ள எளிமையான கேள்விகளை மட்டுமே நான் சோதனை செய்தேன். தெளிவற்ற வினைகளையும் (ambiguous queries) விடுபட்ட தகவல்களையும் நான் புறக்கணித்தேன். Hallucinations அந்த இடைவெளிகளில்தான் உருவாகின்றன. தீர்வு: நான் 'trap questions' கொண்ட ஒரு மதிப்பீட்டுத் தொகுப்பை (evaluation set) உருவாக்கினேன். இவை சரியான விடை அமைப்பில் இல்லாத சூழல்களைக் குறிக்கும். நான் மாற்றங்களைச் செய்யும் ஒவ்வொரு முறையும் இந்தச் சோதனைகளைச் செய்கிறேன்.
RAG என்பது Hallucinations-ஐ முற்றிலுமாகத் தடுப்பதில்லை. ஆனால் அவற்றைக்கட்டுப்படுத்தக்கூடியதாக மாற்றுகிறது. எனது பாட்டிற்கு இன்னும் எல்லாவற்றையும் தெரியாது. ஆனால் இப்போது, அதற்குத் தெரியவில்லை என்றால், அதைத் தெளிவாகச் சொல்லிவிடுகிறது. அது அந்தத் கருவியைப் பயன்படுத்தக்கூடியதாக மாற்றுகிறது.
Source: https://dev.to/pallavi_sharma_10c1a6f1da/why-my-rag-app-kept-hallucinating-and-how-i-fixed-it-3i10