ਮੇਰੀ RAG ਐਪ ਨੇ ਗਲਤ ਜਾਣਕਾਰੀ (hallucinate) ਕਿਉਂ ਦਿੱਤੀ ਅਤੇ ਮੈਂ ਇਸਨੂੰ ਕਿਵੇਂ ਠੀਕ ਕੀਤਾ
ਮੈਂ ਇੱਕ ਵਾਰ ਆਪਣੇ ਇੱਕ ਸਹਿਕਰਮੀ ਨੂੰ ਆਪਣਾ RAG ਸਪੋਰਟ ਬੋਟ ਦਿਖਾਇਆ।
ਬੋਟ ਨੇ ਉਸਨੂੰ ਦੱਸਿਆ ਕਿ ਸਾਡੀ ਰਿਫੰਡ ਪਾਲਿਸੀ 30 ਦਿਨਾਂ ਦੀ ਹੈ।
ਸਾਡੀ ਅਸਲ ਪਾਲਿਸੀ 14 ਦਿਨਾਂ ਦੀ ਹੈ।
ਬੋਟ ਨੇ ਇਹ ਨਹੀਂ ਕਿਹਾ ਕਿ ਉਹ ਅਨਿਸ਼ਚਿਤ ਹੈ। ਇਸਨੇ ਪੂਰੇ ਭਰੋਸੇ ਨਾਲ ਇੱਕ ਜਵਾਬ ਬਣਾ ਦਿੱਤਾ।
RAG ਨੂੰ ਹਲੂਸੀਨੇਸ਼ਨ (hallucinations) ਨੂੰ ਰੋਕਣਾ ਚਾਹੀਦਾ ਹੈ। ਮੇਰੇ ਸੈੱਟਅੱਪ ਨੇ ਸਿਰਫ਼ ਉਹਨਾਂ ਨੂੰ ਇੱਕ ਥਾਂ ਤੋਂ ਦੂਜੀ ਥਾਂ ਬਦਲ ਦਿੱਤਾ ਸੀ।
ਮੈਂ ਪੰਜ ਕਦਮਾਂ ਦੀ ਪਾਲਣਾ ਕਰਕੇ ਇਸਨੂੰ ਠੀਕ ਕੀਤਾ।
- ਆਪਣੀ ਚੰਕਿੰਗ (chunking) ਰਣਨੀਤੀ ਨੂੰ ਠੀਕ ਕਰੋ
ਮੈਂ ਪਹਿਲਾਂ ਦਸਤਾਵੇਜ਼ਾਂ ਨੂੰ ਅੱਖਰਾਂ ਦੀ ਗਿਣਤੀ ਦੇ ਆਧਾਰ 'ਤੇ ਵੰਡਦਾ ਸੀ। ਇਹ ਇੱਕ ਗਲਤੀ ਸੀ।
ਇੱਕ ਚੰਕ (chunk) ਵਿੱਚ ਅਕਸਰ ਸ਼ਿਪਿੰਗ ਅਤੇ ਰਿਟਰਨ ਵਰਗੇ ਵੱਖ-ਵੱਖ ਵਿਸ਼ੇ ਮਿਲ ਜਾਂਦੇ ਸਨ। ਮਾਡਲ ਇਹਨਾਂ ਨੂੰ ਮਿਲਾ ਕੇ ਗਲਤ ਜਵਾਬ ਦੇ ਦਿੰਦਾ ਸੀ।
ਹੱਲ: ਮੈਂ ਸੈਮੈਂਟਿਕ ਚੰਕਿੰਗ (semantic chunking) ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਸ਼ੁਰੂ ਕਰ ਦਿੱਤੀ। ਹੁਣ ਮੈਂ ਟੈਕਸਟ ਨੂੰ ਹੈਡਿੰਗਾਂ ਅਤੇ ਪੈਰ੍ਹਿਆਂ ਦੇ ਅਧਾਰ 'ਤੇ ਵੰਡਦਾ ਹਾਂ।
- ਸਿਰਫ਼ ਸਮਾਨਤਾ ਸਕੋਰ (similarity scores) 'ਤੇ ਭਰੋਸਾ ਕਰਨਾ ਬੰਦ ਕਰੋ
ਮੇਰਾ ਰੀਟਰੀਵਰ (retriever) ਕੋਸਾਈਨ ਸਮਾਨਤਾ (cosine similarity) ਦੇ ਅਧਾਰ 'ਤੇ ਚੋਟੀ ਦੇ ਤਿੰਨ ਚੰਕਸ ਕੱਢਦਾ ਸੀ।
ਸਮਾਨ ਹੋਣਾ ਅਤੇ ਪ੍ਰਸੰਗਿਕ (relevant) ਹੋਣਾ ਇੱਕੋ ਗੱਲ ਨਹੀਂ ਹੈ। ਇੱਕ ਚੰਕ ਸਵਾਲ ਦੇ ਸਮਾਨ ਲੱਗ ਸਕਦਾ ਹੈ ਪਰ ਉਸ ਵਿੱਚ ਕੋਈ ਜਵਾਬ ਨਹੀਂ ਹੋ ਸਕਦਾ।
ਹੱਲ: ਮੈਂ ਇੱਕ cross-encoder ਨਾਲ reranking ਦਾ ਕਦਮ ਜੋੜਿਆ। ਇਸ ਨਾਲ ਮੈਨੂੰ ਇਹ ਦੇਖਣ ਵਿੱਚ ਮਦਦ ਮਿਲੀ ਕਿ ਕਦੋਂ ਸਿਸਟਮ ਕੋਲ ਕੋਈ ਅਸਲ ਡੇਟਾ ਨਹੀਂ ਸੀ।
- ਮਾਡਲ ਨੂੰ ਗਲਤ ਹੋਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ
ਮੇਰੇ ਪੁਰਾਣੇ ਪ੍ਰੋਂਪਟ (prompt) ਵਿੱਚ ਸਿਰਫ਼ ਇੰਨਾ ਲਿਖਿਆ ਸੀ: ਸਵਾਲ ਦਾ ਜਵਾਬ ਦੇਣ ਲਈ ਸੰਦਰਭ (context) ਦੀ ਵਰਤੋਂ ਕਰੋ।
ਜੇਕਰ ਸੰਦਰਭ ਵਿੱਚ ਜਵਾਬ ਨਹੀਂ ਹੁੰਦਾ ਸੀ, ਤਾਂ ਮਾਡਲ ਅੰਦਾਜ਼ੇ ਲਗਾ ਕੇ ਖਾਲੀ ਥਾਵਾਂ ਭਰ ਦਿੰਦਾ ਸੀ।
ਹੱਲ: ਮੈਂ ਇੱਕ ਸਿੱਧਾ ਨਿਰਦੇਸ਼ ਜੋੜਿਆ। ਜੇਕਰ ਜਵਾਬ ਸੰਦਰਭ ਵਿੱਚ ਨਹੀਂ ਹੈ, ਤਾਂ ਕਹੋ ਕਿ ਤੁਸੀਂ ਨਹੀਂ ਜਾਣਦੇ। ਸਿਰਫ਼ ਇਸੇ ਕਦਮ ਨੇ ਜ਼ਿਆਦਾਤਰ ਹਲੂਸੀਨੇਸ਼ਨਾਂ ਨੂੰ ਰੋਕ ਦਿੱਤਾ।
- ਰੀਟਰੀਵਲ ਥ੍ਰੈਸ਼ਹੋਲਡ (retrieval threshold) ਸੈੱਟ ਕਰੋ
ਕਦੇ-ਕਦੇ ਜਦੋਂ ਰੀਟਰੀਵਲ ਫੇਲ ਹੋ ਜਾਂਦਾ ਸੀ, ਤਾਂ ਮਾਡਲ ਆਮ ਗਿਆਨ (general knowledge) ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਸੀ। ਮੈਨੂੰ ਉਮੀਦ ਸੀ ਕਿ ਪ੍ਰੋਂਪਟ ਕੰਮ ਕਰੇਗਾ, ਪਰ ਉਮੀਦ ਕੋਈ ਰਣਨੀਤੀ ਨਹੀਂ ਹੈ।
ਹੱਲ: ਮੈਂ ਇੱਕ ਸਕੋਰ ਕੱਟ-ਆਫ (score cutoff) ਜੋੜਿਆ। ਜੇਕਰ ਰੀਟਰੀਵਲ ਸਕੋਰ ਬਹੁਤ ਘੱਟ ਹੈ, ਤਾਂ ਸਿਸਟਮ ਇੱਕ ਫਾਲਬੈਕ (fallback) ਜਵਾਬ ਦਿੰਦਾ ਹੈ। ਜੇਕਰ ਕੋਈ ਸੰਦਰਭ ਨਹੀਂ ਹੈ, ਤਾਂ ਕੋਈ ਜਵਾਬ ਨਹੀਂ।
- ਸਫਲਤਾ ਲਈ ਨਹੀਂ, ਅਸਫਲਤਾ ਲਈ ਟੈਸਟ ਕਰੋ
ਮੈਂ ਸਿਰਫ਼ ਸੌਖੇ ਸਵਾਲਾਂ ਦਾ ਟੈਸਟ ਕਰਦਾ ਸੀ। ਮੈਂ ਅਸਪਸ਼ਟ ਪ੍ਰਸ਼ਨਾਂ ਅਤੇ ਗੁੰਮ ਹੋਈ ਜਾਣਕਾਰੀ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰ ਦਿੱਤਾ ਸੀ।
ਹੱਲ: ਮੈਂ 'ਟਰੈਪ' (trap) ਸਵਾਲਾਂ ਦਾ ਇੱਕ ਮੁਲਾਂਕਣ ਸੈੱਟ (evaluation set) ਤਿਆਰ ਕੀਤਾ। ਇਹ ਉਹ ਮਾਮਲੇ ਹਨ ਜਿੱਥੇ ਜਵਾਬ ਗੁੰਮ ਹੈ। ਇਹਨਾਂ ਟੈਸਟਾਂ ਨੂੰ ਨਿਯਮਤ ਰੂਪ ਵਿੱਚ ਚਲਾਉਣ ਨਾਲ ਤੁਹਾਨੂੰ ਪਤਾ ਲੱਗ ਜਾਂਦਾ ਹੈ ਕਿ ਤੁਹਾਡਾ ਸਿਸਟਮ ਕਿੱਥੇ ਫੇਲ ਹੋ ਰਿਹਾ ਹੈ।
R