Advanced RAG ਤਕਨੀਕਾਂ ਬਿਹਤਰ ਨਹੀਂ ਹਨ। ਉਹ ਕਦੇ-ਕਦੇ ਬਿਹਤਰ ਹੁੰਦੀਆਂ ਹਨ।
Advanced RAG ਤਕਨੀਕਾਂ ਮੁਫ਼ਤ ਅੱਪਗ੍ਰੇਡ ਨਹੀਂ ਹਨ। ਇਹ ਸਮਝੌਤਿਆਂ (trade-offs) ਵਾਲੇ ਸੰਦ ਹਨ।
ਮੈਂ ਉਹਨਾਂ ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ ਇੱਕ RAG ਪਾਈਪਲਾਈਨ ਵਿੱਚ ਪੰਜ ਰਿਟ੍ਰੀਵਲ (retrieval) ਤਕਨੀਕਾਂ ਜੋੜੀਆਂ। ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਨ ਨਤੀਜਾ ਉਹ ਤਕਨੀਕ ਸੀ ਜੋ ਅਸਫਲ ਰਹੀ।
ਮੈਨੂੰ ਉਮੀਦ ਸੀ ਕਿ HyDE ਰਿਟ੍ਰੀਵਲ ਵਿੱਚ ਸੁਧਾਰ ਕਰੇਗਾ। ਇਸ ਦੀ ਬਜਾਏ, ਇਹ ਕੁਝ ਖਾਸ ਕੁਐਰੀਆਂ (queries) 'ਤੇ ਉਲਟ ਅਸਰ ਕਰ ਗਿਆ। Recall 0.80 ਤੋਂ ਡਿੱਗ ਕੇ 0.17 ਰਹਿ ਗਿਆ। ਇਹ ਤਕਨੀਕ ਸਿਰਫ਼ ਮਦਦ ਕਰਨ ਵਿੱਚ ਅਸਫਲ ਹੀ ਨਹੀਂ ਰਹੀ, ਸਗੋਂ ਇਸ ਨੇ ਨਤੀਜਿਆਂ ਵਿੱਚ ਸਰਗਰਮੀ ਨਾਲ ਗਲਤ ਡੇਟਾ ਲਿਆ ਦਿੱਤਾ।
ਹਰ ਉੱਨਤ ਤਕਨੀਕ ਜਿਸਦੀ ਮੈਂ ਜਾਂਚ ਕੀਤੀ, ਇਸ ਤਰ੍ਹਾਂ ਕੰਮ ਕਰਦੀ ਹੈ:
- Hybrid search (BM25 + dense): ਸਹੀ ਸ਼ਬਦਾਂ ਲਈ ਵਧੀਆ ਹੈ। ਇਸਦੀ ਵਰਤੋਂ ਉਦੋਂ ਕਰੋ ਜਦੋਂ ਤੁਹਾਡੀ ਕੁਐਰੀ ਖਾਸ ਪੈਰਾਮੀਟਰਾਂ 'ਤੇ ਨਿਰਭਰ ਕਰਦੀ ਹੋਵੇ।
- HyDE: ਆਮ ਸਵਾਲਾਂ ਲਈ ਵਧੀਆ ਹੈ ਜੋ ਦਸਤਾਵੇਜ਼ ਦੀ ਸ਼ਬਦਾਵਲੀ (vocabulary) ਨਾਲ ਮੇਲ ਨਹੀਂ ਖਾਂਦੇ। ਇਹ ਉਦੋਂ ਅਸਫਲ ਹੋ ਜਾਂਦਾ ਹੈ ਜਦੋਂ ਕੁਐਰੀ ਪਹਿਲਾਂ ਹੀ ਕਾਰਪਸ (corpus) ਨਾਲ ਚੰਗੀ ਤਰ੍ਹਾਂ ਮੇਲ ਖਾਂਦੀ ਹੋਵੇ।
- Reranking: ਉਦੋਂ ਵਧੀਆ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਸਹੀ ਚੰਕ (chunk) ਨਤੀਜਿਆਂ ਵਿੱਚ ਹੋਵੇ ਪਰ ਸੂਚੀ ਵਿੱਚ ਬਹੁਤ ਹੇਠਾਂ ਹੋਵੇ।
- Contextual retrieval: ਛੋਟੇ ਚੰਕਸ ਲਈ ਵਧੀਆ ਹੈ ਜਿਨ੍ਹਾਂ ਵਿੱਚ ਸੰਦਰਭ (context) ਦੀ ਕਮੀ ਹੁੰਦੀ ਹੈ। ਇਹ ਲਾਗਤ ਵਧਾਉਂਦਾ ਹੈ ਕਿਉਂਕਿ ਤੁਹਾਨੂੰ ਹਰ ਚੰਕ ਲਈ ਇੱਕ LLM ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਪੈਂਦੀ ਹੈ।
ਮੈਂ ਇਹ ਪਾਈਪਲਾਈਨ Anthropic ਡਾਕੂਮੈਂਟੇਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਬਣਾਈ। ਮੈਂ pgvector ਅਤੇ HNSW ਇੰਡੈਕਸ ਦੇ ਨਾਲ Postgres ਦੀ ਵਰਤੋਂ ਕੀਤੀ। ਮੈਂ ਇਸਨੂੰ ਇੱਕ ਬੈਕਐਂਡ ਇੰਜੀਨੀਅਰ ਵਾਂਗ ਲਿਆ। ਮੈਂ ਇਹ ਨਹੀਂ ਪੁੱਛਿਆ ਕਿ ਕੀ ਕੋਈ ਤਕਨੀਕ ਸਟੇਟ-ਆਫ-ਦ-ਆਰਟ (state of the art) ਹੈ। ਮੈਂ ਇਹ ਪੁੱਛਿਆ ਕਿ ਕੀ ਇਹ ਆਪਣੀ ਜਟਿਲਤਾ (complexity) ਦੇ ਯੋਗ ਹੈ।
ਤੁਹਾਡੇ ਦੁਆਰਾ ਜੋੜਿਆ ਗਿਆ ਹਰ ਕੰਪੋਨੈਂਟ ਕੁਝ ਅਜਿਹਾ ਹੈ ਜਿਸ ਨੂੰ ਤੁਹਾਨੂੰ ਚਲਾਉਣਾ, ਡੀਬੱਗ (debug) ਕਰਨਾ ਅਤੇ ਉਸਦੀ ਭੁਗਤਾਨ ਕਰਨਾ ਪਵੇਗਾ।
ਗੁੰਝਲਦਾਰ ਸੰਦ ਜੋੜਨ ਤੋਂ ਪਹਿਲਾਂ, ਮੈਂ ਸਾਧਾਰਨ ਡੈਂਸ ਰਿਟ੍ਰੀਵਲ (plain dense retrieval) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਬੇਸਲਾਈਨ ਮਾਪੀ।
ਨਤੀਜਿਆਂ ਨੇ ਦੋ ਵੱਖ-ਵੱਖ ਮੈਟ੍ਰਿਕਸ ਦਿਖਾਏ:
- Faithfulness: 0.96
- Context precision: 0.60
ਇਸ ਡੇਟਾ ਨੇ ਮੇਰਾ ਪੂਰਾ ਪਹੁੰਚ (approach) ਬਦਲ ਦਿੱਤਾ। ਜ਼ਿਆਦਾਤਰ ਤਕਨੀਕਾਂ ਰਿਟ੍ਰੀਵਲ ਨੂੰ ਨਿਸ਼ਾਨਾ ਬਣਾਉਂਦੀਆਂ ਹਨ। ਮੇਰਾ ਰਿਟ੍ਰੀਵਲ ਹੀ ਅਸਫਲ ਹਿੱਸਾ ਸੀ। ਜੇਕਰ faithfulness ਘੱਟ ਹੁੰਦੀ, ਤਾਂ ਮੈਂ ਪ੍ਰੋਂਪਟਸ (prompts) ਨੂੰ ਟਿਊਨ ਕਰਦਾ। ਕਿਉਂਕਿ ਰਿਟ੍ਰੀਵਲ ਘੱਟ ਸੀ, ਇਸ ਲਈ ਮੈਨੂੰ ਸਰਚ (search) ਨੂੰ ਟਿਊਨ ਕਰਨਾ ਪਿਆ।
ਮੈਂ ਮੁਲਾਂਕਣ (evaluation) ਸੰਦਾਂ ਬਾਰੇ ਵੀ ਇੱਕ ਸਬਕ ਸਿੱਖਿਆ। ਮੈਂ Ragas ਦੀ ਵਰਤੋਂ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ, ਪਰ ਇਹ ਬਹੁਤ ਹੌਲੀ ਸੀ। ਇਹ ਅਸਫਲ ਕਾਲਾਂ ਨੂੰ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਸੀ ਅਤੇ ਘੰਟਿਆਂ ਬੱਧੀ ਸਮਾਂ ਲੈਂਦਾ ਸੀ। ਇਸ ਦੀ ਬਜਾਏ ਮੈਂ ਆਪਣਾ ਖੁਦ ਦਾ async harness ਬਣਾਇਆ। ਮੈਂ 11 ਘੰਟਿਆਂ ਦੀ ਬਜਾਏ 221 ਸਕਿੰਟਾਂ ਵਿੱਚ ਉਹੀ ਮੈਟ੍ਰਿਕਸ ਚਲਾਏ।
ਸਿੱਖਿਆ (takeaway) ਸਰਲ ਹੈ:
ਤਕਨੀਕਾਂ ਨੂੰ ਅੰਨ੍ਹੇਵਾਹ ਲਾਗੂ ਨਾ ਕਰੋ। ਸਹੀ ਸਵਾਲ ਲਈ ਸਹੀ ਮੋਡ ਚੁਣਨ ਲਈ ਇੱਕ ਕੁਐਰੀ ਰਾਊਟਰ (query router) ਦੀ ਵਰਤੋਂ ਕਰੋ। ਪਹਿਲਾਂ ਆਪਣੇ ਡੇਟਾ ਨੂੰ ਮਾਪੋ। ਫਿਰ ਉਹ ਸੰਦ ਚੁਣੋ ਜੋ ਤੁਹਾਡੇ ਖਾਸ ਫੇਲ੍ਹ ਹੋਣ ਦੇ ਤਰੀਕੇ (failure mode) ਨੂੰ ਹੱਲ ਕਰਦਾ ਹੋਵੇ।
ਮਾਡਲ ਨਵਾਂ ਹੈ। ਇ
