ನನ್ನ RAG ಅಪ್ಲಿಕೇಶನ್ ಏಕೆ ತಪ್ಪು ಮಾಹಿತಿ (hallucinating) ನೀಡುತ್ತಿತ್ತು ಮತ್ತು ನಾನು ಅದನ್ನು ಹೇಗೆ ಸರಿಪಡಿಸಿದೆ
ಕೆಲವು ತಿಂಗಳ ಹಿಂದೆ, ನಾನು ನನ್ನ RAG ಸಪೋರ್ಟ್ ಬಾಟ್ ಅನ್ನು ಪ್ರಾತ್ಯಕ್ಷಿಕೆ ಮಾಡಿದೆ. ಅದು ನಮ್ಮ ರಿಫಂಡ್ ನೀತಿಯು 30 ದಿನಗಳದು ಎಂದು ಸಹೋದ್ಯೋಗಿಯೊಬ್ಬರಿಗೆ ತಿಳಿಸಿತು. ನಮ್ಮ ನಿಜವಾದ ನೀತಿಯು 14 ದಿನಗಳು. ಬಾಟ್ ಹಿಂಜರಿಯಲಿಲ್ಲ. ತನಗೆ ಖಚಿತವಿಲ್ಲ ಎಂದು ಅದು ಹೇಳಲಿಲ್ಲ. ಅದು ಸಂಪೂರ್ಣ ಆತ್ಮವಿಶ್ವಾಸದಿಂದ ಒಂದು ಉತ್ತರವನ್ನು ಸೃಷ್ಟಿಸಿತು.
RAG ತಪ್ಪು ಮಾಹಿತಿಗಳನ್ನು (hallucinations) ಕಡಿಮೆ ಮಾಡಬೇಕು. ಆದರೆ ನನ್ನ ಸೆಟಪ್ ಅವುಗಳನ್ನು ಕೇವಲ ಒಂದು ಕಡೆಯಿಂದ ಇನ್ನೊಂದು ಕಡೆಗೆ ವರ್ಗಾಯಿಸುತ್ತಿತ್ತು ಅಷ್ಟೆ. ಈ ವ್ಯವಸ್ಥೆಯನ್ನು ಡೀಬಗ್ ಮಾಡುವಾಗ ನಾನು ಐದು ಪಾಠಗಳನ್ನು ಕಲಿತೆ.
ಚಂಕ್ಗಳಿಗಾಗಿ (chunks) ನಿಗದಿತ ಅಕ್ಷರಗಳ ಸಂಖ್ಯೆಯನ್ನು ಬಳಸುವುದು ನಿಲ್ಲಿಸಿ ನಾನು ಸ್ವಲ್ಪ ಓವರ್ಲ್ಯಾಪ್ನೊಂದಿಗೆ 1000 ಅಕ್ಷರಗಳ ಚಂಕ್ಗಳನ್ನು ಬಳಸುತ್ತಿದ್ದೆ. ಇದು ಸಮಸ್ಯೆಗಳನ್ನು ಉಂಟುಮಾಡಿತು. ಒಂದು ಚಂಕ್ ಆಗಾಗ್ಗೆ ಶಿಪ್ಪಿಂಗ್ ನಿಯಮಗಳನ್ನು ರಿಟರ್ನ್ ನಿಯಮಗಳೊಂದಿಗೆ ಬೆರೆಸುತ್ತಿತ್ತು. ಮಾಡೆಲ್ ಈ ವಿಭಿನ್ನ ವಿಭಾಗಗಳನ್ನು ಒಂದೇ ತಪ್ಪು ಉತ್ತರವಾಗಿ ಬೆರೆಸುತ್ತಿತ್ತು. ಪರಿಹಾರ: ನಾನು ಸೆಮ್ಯಾಂಟಿಕ್ ಚಂಕಿಂಗ್ಗೆ (semantic chunking) ಬದಲಾಯಿಸಿದೆ. ನಾನು ಹೆಡಿಂಗ್ಗಳು ಮತ್ತು ಪ್ಯಾರಾಗ್ರಾಫ್ಗಳ ಮೂಲಕ ಡೇಟಾವನ್ನು ವಿಂಗಡಿಸಿದೆ. ಇದು ಸಂಬಂಧಿತ ಮಾಹಿತಿಯನ್ನು ಒಟ್ಟಿಗೆ ಇಡುತ್ತದೆ.
ಸಾಮ್ಯತೆ (Similarity) ಎಂದರೆ ಪ್ರಸ್ತುತತೆ (relevance) ಎಂದಲ್ಲ ನನ್ನ ರಿಟ್ರೈವರ್ (retriever) ಕೋಸೈನ್ ಸಿಮಿಲಾರಿಟಿ (cosine similarity) ಆಧಾರದ ಮೇಲೆ ಮೊದಲ 3 ಚಂಕ್ಗಳನ್ನು ತೆಗೆದುಕೊಂಡಿತು. ಒಂದು ಚಂಕ್ ಉತ್ತರವನ್ನು ಹೊಂದಿಲ್ಲದಿದ್ದರೂ ಪ್ರಶ್ನೆಗೆ ಸಾಮ್ಯತೆಯನ್ನು ಹೊಂದಿರಬಹುದು. ಸಂದರ್ಭದಲ್ಲಿರುವ (context) ಎಲ್ಲವೂ ನಿಜ ಎಂದು ಮಾಡೆಲ್ ಭಾವಿಸುತ್ತದೆ. ಪರಿಹಾರ: ನಾನು ಕ್ರಾಸ್-ಎನ್ಕೋಡರ್ (cross-encoder) ಬಳಸಿ ರೀರಾಂಕಿಂಗ್ ಹಂತವನ್ನು ಸೇರಿಸಿದೆ. ನಾನು ರಿಟ್ರೈವಲ್ ಸ್ಕೋರ್ಗಳನ್ನು (retrieval scores) ಲಾಗ್ ಮಾಡಲು ಪ್ರಾರಂಭಿಸಿದೆ. ಇದು ವ್ಯವಸ್ಥೆಯಲ್ಲಿ ನಿಜವಾದ ಉತ್ತರ ಇಲ್ಲದಿದ್ದಾಗ ತಿಳಿಸುತ್ತದೆ.
ವಿಫಲವಾಗುವುದು ತಪ್ಪಲ್ಲ ಎಂದು ಮಾಡೆಲ್ಗೆ ತಿಳಿಸಿ ನನ್ನ ಮೂಲ ಪ್ರಾಂಪ್ಟ್ (prompt) ಸರಳವಾಗಿತ್ತು: ಪ್ರಶ್ನೆಗೆ ಉತ್ತರಿಸಲು ಸಂದರ್ಭವನ್ನು (context) ಬಳಸಿ. ಸಂದರ್ಭ ಲಭ್ಯವಿಲ್ಲದಿದ್ದಾಗ ಏನು ಮಾಡಬೇಕೆಂಬ ಸೂಚನೆಗಳನ್ನು ಅದು ಮಾಡೆಲ್ಗೆ ನೀಡಿರಲಿಲ್ಲ. ಮಾಡೆಲ್ ಆ ಕೊರತೆಯನ್ನು ಊಹೆಗಳ ಮೂಲಕ ತುಂಬಿಸಿತು. ಪರಿಹಾರ: ನಾನು ಒಂದು ನಿರ್ದಿಷ್ಟ ಸೂಚನೆಯನ್ನು ಸೇರಿಸಿದೆ