ಸುಧಾರಿತ RAG ತಂತ್ರಗಳು ಯಾವಾಗಲೂ ಉತ್ತಮವಾಗಿರುವುದಿಲ್ಲ. ಅವು ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ ಮಾತ್ರ ಉತ್ತಮವಾಗಿರುತ್ತವೆ.
ಸುಧಾರಿತ RAG ತಂತ್ರಗಳು ಉಚಿತ ಅಪ್ಗ್ರೇಡ್ಗಳಲ್ಲ. ಅವು ವಿನಿಮಯದ ಮೌಲ್ಯಗಳನ್ನು (trade-offs) ಹೊಂದಿರುವ ಸಾಧನಗಳು.
ಅವುಗಳನ್ನು ಪರೀಕ್ಷಿಸಲು ನಾನು ಒಂದು RAG ಪೈಪ್ಲೈನ್ಗೆ ಐದು ರಿಟ್ರಿವಲ್ (retrieval) ತಂತ್ರಗಳನ್ನು ಸೇರಿಸಿದೆ. ಅತ್ಯಂತ ಪ್ರಮುಖವಾದ ಫಲಿತಾಂಶವು ವಿಫಲವಾದ ತಂತ್ರದ ಬಗ್ಗೆಯಾಗಿತ್ತು.
HyDE ರಿಟ್ರಿವಲ್ ಅನ್ನು ಸುಧಾರಿಸುತ್ತದೆ ಎಂದು ನಾನು ನಿರೀಕ್ಷಿಸಿದ್ದೆ. ಆದರೆ, ಕೆಲವು ಪ್ರಶ್ನೆಗಳಿಗೆ (queries) ಅದು ವಿರುದ್ಧವಾಗಿ ಕೆಲಸ ಮಾಡಿತು. Recall 0.80 ರಿಂದ 0.17 ಕ್ಕೆ ಕುಸಿಯಿತು. ಆ ತಂತ್ರವು ಸಹಾಯ ಮಾಡಲು ವಿಫಲವಾಗುವುದು ಮಾತ್ರವಲ್ಲದೆ, ಫಲಿತಾಂಶಗಳಲ್ಲಿ ತಪ್ಪು ಡೇಟಾವನ್ನು ಸಕ್ರಿಯವಾಗಿ ತಂದುಹಾಕಿತು.
ನಾನು ಪರೀಕ್ಷಿಸಿದ ಪ್ರತಿಯೊಂದು ಸುಧಾರಿತ ತಂತ್ರವು ಈ ರೀತಿ ಕೆಲಸ ಮಾಡುತ್ತದೆ:
- Hybrid search (BM25 + dense): ನಿಖರವಾದ ಪದಗಳಿಗೆ (exact terms) ಇದು ಅತ್ಯುತ್ತಮವಾಗಿದೆ. ನಿಮ್ಮ ಪ್ರಶ್ನೆಯು ನಿರ್ದಿಷ್ಟ ಪ್ಯಾರಾಮೀಟರ್ಗಳ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದ್ದಾಗ ಇದನ್ನು ಬಳಸಿ.
- HyDE: ದಾಖಲೆಯ ಶಬ್ದಕೋಶಕ್ಕೆ (vocabulary) ಹೊಂದಿಕೆಯಾಗದ ಸಾಮಾನ್ಯ ಪ್ರಶ್ನೆಗಳಿಗೆ ಇದು ಉತ್ತಮವಾಗಿದೆ. ಪ್ರಶ್ನೆಯು ಈಗಾಗಲೇ ಕಾರ್ಪಸ್ನೊಂದಿಗೆ (corpus) ಚೆನ್ನಾಗಿ ಹೊಂದಿಕೆಯಾಗುತ್ತಿದ್ದರೆ ಇದು ವಿಫಲವಾಗುತ್ತದೆ.
- Reranking: ಸರಿಯಾದ ಚಂಕ್ (chunk) ಫಲಿತಾಂಶಗಳಲ್ಲಿದ್ದರೂ, ಪಟ್ಟಿಯಲ್ಲಿ ತುಂಬಾ ಕೆಳಭಾಗದಲ್ಲಿದ್ದಾಗ ಇದು ಉತ್ತಮವಾಗಿದೆ.
- Contextual retrieval: ಸಂದರ್ಭದ ಕೊರತೆಯಿರುವ ಚಿಕ್ಕ ಚಂಕ್ಗಳಿಗೆ ಇದು ಉತ್ತಮವಾಗಿದೆ. ಪ್ರತಿ ಚಂಕ್ನಿಗೂ ನೀವು LLM ಅನ್ನು ಬಳಸಬೇಕಾಗಿರುವುದರಿಂದ ಇದು ವೆಚ್ಚವನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ.
ನಾನು ಈ ಪೈಪ್ಲೈನ್ ಅನ್ನು Anthropic ಡಾಕ್ಯುಮೆಂಟೇಶನ್ ಬಳಸಿ ನಿರ್ಮಿಸಿದೆ. ನಾನು Postgres ಜೊತೆಗೆ pgvector ಮತ್ತು HNSW ಇಂಡೆಕ್ಸ್ ಅನ್ನು ಬಳಸಿದೆ. ನಾನು ಇದನ್ನು ಒಬ್ಬ ಬ್ಯಾಕೆಂಡ್ ಇಂಜಿನಿಯರ್ನಂತೆ ಪರಿಗಣಿಸಿದೆ. ಒಂದು ತಂತ್ರವು ಅತ್ಯಾಧುನಿಕ (state of the art) ಆಗಿದೆಯೇ ಎಂದು ನಾನು ಕೇಳಲಿಲ್ಲ. ಬದಲಾಗಿ, ಅದು ತನ್ನ ಸಂಕೀರ್ಣತೆಗೆ ತಕ್ಕ ಮೌಲ್ಯವನ್ನು ನೀಡುತ್ತದೆಯೇ ಎಂದು ಕೇಳಿದೆ.
ನೀವು ಸೇರಿಸುವ ಪ್ರತಿಯೊಂದು ಘಟಕವನ್ನು (component) ನೀವು ನಿರ್ವಹಿಸಬೇಕು, ಡಿಬಗ್ (debug) ಮಾಡಬೇಕು ಮತ್ತು ಅದಕ್ಕಾಗಿ ಪಾವತಿಸಬೇಕು.
ಸಂಕೀರ್ಣ ಸಾಧನಗಳನ್ನು ಸೇರಿಸುವ ಮೊದಲು, ನಾನು ಸಾಮಾನ್ಯ ಡೆನ್ಸ್ ರಿಟ್ರಿವಲ್ (plain dense retrieval) ಬಳಸಿ ಬೇಸ್ಲೈನ್ ಅನ್ನು ಅಳೆಯಿದೆ.
ಫಲಿತಾಂಶಗಳು ಎರಡು ವಿಭಿನ್ನ ಮೆಟ್ರಿಕ್ಗಳನ್ನು ತೋರಿಸಿದವು:
- Faithfulness: 0.96
- Context precision: 0.60
ಈ ಡೇಟಾ ನನ್ನ ಸಂಪೂರ್ಣ ವಿಧಾನವನ್ನೇ ಬದಲಿಸಿತು. ಹೆಚ್ಚಿನ ತಂತ್ರಗಳು ರಿಟ್ರಿವಲ್ ಅನ್ನು ಗುರಿಯಾಗಿಸಿಕೊಂಡಿವೆ. ನನ್ನಲ್ಲಿ ರಿಟ್ರಿವಲ್ ವಿಫಲವಾಗುತ್ತಿತ್ತು. ಒಂದು ವೇಳೆ faithfulness ಕಡಿಮೆಯಿದ್ದರೆ, ನಾನು ಪ್ರಾಂಪ್ಟ್ಗಳನ್ನು (prompts) ಟ್ಯೂನ್ ಮಾಡುತ್ತಿದ್ದೆ. ಆದರೆ ರಿಟ್ರಿವಲ್ ಕಡಿಮೆಯಿದ್ದರಿಂದ, ನಾನು ಸರ್ಚ್ ಅನ್ನು ಟ್ಯೂನ್ ಮಾಡಬೇಕಾಯಿತು.
ನಾನು ಇವ್ಯಾಲ್ಯೂಯೇಶನ್ (evaluation) ಸಾಧನಗಳ ಬಗ್ಗೆಯೂ ಒಂದು ಪಾಠ ಕಲಿತೆ. ನಾನು Ragas ಬಳಸಲು ಪ್ರಯತ್ನಿಸಿದೆ, ಆದರೆ ಅದು ತುಂಬಾ ನಿಧಾನವಾಗಿತ್ತು. ಅದು ವಿಫಲವಾದ ಕರೆಗಳನ್ನು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸುತ್ತಾ ಗಂಟೆಗಟ್ಟಲೆ ತೆಗೆದುಕೊಳ್ಳುತ್ತಿತ್ತು. ಬದಲಾಗಿ ನಾನು ನನ್ನದೇ ಆದ async harness ಅನ್ನು ನಿರ್ಮಿಸಿದೆ. ನಾನು 11 ಗಂಟೆಗಳ ಬದಲಿಗೆ ಕೇವಲ 221 ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಅದೇ ಮೆಟ್ರಿಕ್ಗಳನ್ನು ರನ್ ಮಾಡಿದೆ.
ಇದರ ಸಾರಾಂಶ ಸರಳವಾಗಿದೆ:
ತಂತ್ರಗಳನ್ನು ಕುರುಡಾಗಿ ಅನ್ವಯಿಸಬೇಡಿ. ಸರಿಯಾದ ಪ್ರಶ್ನೆಗೆ ಸರಿಯಾದ ಮೋಡ್ ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಕ್ವೆರಿ ರೂಟರ್ (query router) ಬಳಸಿ. ಮೊದಲು ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಅಳೆಯಿರಿ. ನಂತರ ನಿಮ್ಮ ನಿರ್ದಿಷ್ಟ ವಿಫಲತೆಯ ವಿಧಾನವನ್ನು (failure mode) ಪರಿಹರಿಸುವ ಸಾಧನವನ್ನು ಆರಿಸಿ.
ಮಾದರಿ (model) ಹೊಸದಾಗಿರಬಹುದು. ಆದರೆ ಇಂಜಿನಿಯರಿಂಗ್ ಶಿಸ್ತು ಹೊಸದಲ್ಲ.
ಮೂಲ: https://dev.to/yogesh23012001/advanced-rag-techniques-arent-better-theyre-better-sometimes-4m2o
