TATECHATLAS
◎ हिन्दी
कृत्रिम बुद्धिमत्ता

एआई सटीकता और रिकॉल का छोटे डेटासेट पर मूल्यांकन

जानें कि एआई मॉडल की सटीकता और रिकॉल का प्रभावी ढंग से मूल्यांकन कैसे करें, खासकर जब छोटे प्रश्न डेटासेट के साथ काम कर रहे हों। यह गाइड scikit-learn का उपयोग करके अवधारणाओं, गणना विधियों और व्यावहारिक विचारों को शामिल करती है।

इस पृष्ठ पर

एआई मॉडल के लिए प्रश्नों के छोटे डेटासेट पर सटीकता और रिकॉल का मूल्यांकन करने के लिए, आपको अपने ग्राउंड ट्रुथ (सही उत्तर) और मॉडल की भविष्यवाणियों को परिभाषित करने की आवश्यकता है। फिर, इन मेट्रिक्स की गणना के लिए scikit-learn जैसी लाइब्रेरी का उपयोग करें। सटीकता मॉडल द्वारा की गई सभी सकारात्मक भविष्यवाणियों में से सही ढंग से पहचानी गई सकारात्मक भविष्यवाणियों के अनुपात को मापती है, यह उत्तर देती है कि 'एआई द्वारा प्रासंगिक के रूप में अनुमानित सभी वस्तुओं में से कितनी वास्तव में प्रासंगिक थीं?'। रिकॉल सभी वास्तविक सकारात्मक उदाहरणों में से सही ढंग से पहचानी गई सकारात्मक भविष्यवाणियों के अनुपात को मापता है, यह उत्तर देता है कि 'वास्तव में प्रासंगिक सभी वस्तुओं में से कितनी एआई ने पाई?'। छोटे डेटासेट के लिए, ग्राउंड ट्रुथ की सावधानीपूर्वक मैन्युअल एनोटेशन महत्वपूर्ण है, और परिणामों की सटीक व्याख्या के लिए scikit-learn में विभिन्न औसत विधियों के निहितार्थों को समझना महत्वपूर्ण है।

सटीकता और रिकॉल को समझना

सटीकता (Precision) और रिकॉल (Recall) वर्गीकरण मॉडल के प्रदर्शन का मूल्यांकन करने के लिए मौलिक मेट्रिक्स हैं, विशेष रूप से सूचना पुनर्प्राप्ति और एआई प्रश्न-उत्तर प्रणालियों में। सटीकता सकारात्मक भविष्यवाणियों की सटीकता को मापती है, जो सही सकारात्मक (True Positives) और कुल अनुमानित सकारात्मक (True Positives + False Positives) के अनुपात पर ध्यान केंद्रित करती है। यह इस प्रश्न का उत्तर देती है: "एआई द्वारा प्रासंगिक के रूप में अनुमानित सभी वस्तुओं में से कितनी वास्तव में प्रासंगिक थीं?" उच्च सटीकता का मतलब है कि मॉडल अप्रासंगिक वस्तुओं को प्रासंगिक के रूप में लेबल करने में अच्छा है। दूसरी ओर, रिकॉल प्रासंगिक वस्तुओं को खोजने की मॉडल की क्षमता को मापता है। इसकी गणना सही सकारात्मक (True Positives) और कुल वास्तविक सकारात्मक उदाहरणों (True Positives + False Negatives) के अनुपात के रूप में की जाती है। रिकॉल उत्तर देता है: "वास्तव में प्रासंगिक सभी वस्तुओं में से कितनी एआई ने पाई?" उच्च रिकॉल इंगित करता है कि मॉडल अधिकांश प्रासंगिक वस्तुओं की पहचान करने में प्रभावी है।

सटीकता और रिकॉल की गणना

सटीकता और रिकॉल की गणना करने के लिए, आपको पहले ग्राउंड ट्रुथ लेबल (सही उत्तर) का एक सेट और आपके एआई मॉडल द्वारा दिए गए प्रश्नों के एक सेट के लिए की गई भविष्यवाणियों की आवश्यकता होती है। बाइनरी वर्गीकरण कार्य (जैसे, प्रासंगिक/अप्रासंगिक) के लिए, सटीकता की गणना TP / (TP + FP) के रूप में की जाती है, और रिकॉल TP / (TP + FN) है, जहाँ TP सही सकारात्मक है, FP गलत सकारात्मक है, और FN गलत नकारात्मक है। scikit-learn जैसी लाइब्रेरी सुविधाजनक फ़ंक्शन, precision_score और recall_score प्रदान करती हैं, इन मेट्रिक्स की सीधे गणना करने के लिए। ये फ़ंक्शन इनपुट के रूप में वास्तविक लेबल (y_true) और अनुमानित लेबल (y_pred) लेते हैं। छोटे डेटासेट के लिए, आपके y_true की सटीकता सुनिश्चित करना सर्वोपरि है, क्योंकि कोई भी त्रुटि सीधे गणना किए गए मेट्रिक्स को प्रभावित करेगी।

from sklearn.metrics import precision_score, recall_score

# उदाहरण ग्राउंड ट्रुथ और भविष्यवाणियां
y_true = [0, 1, 2, 0, 1, 2]  # वास्तविक प्रासंगिकता (जैसे, 0: अप्रासंगिक, 1: प्रासंगिक, 2: अत्यधिक प्रासंगिक)
y_pred = [0, 2, 1, 0, 0, 1]  # एआई की अनुमानित प्रासंगिकता

# बाइनरी वर्गीकरण के लिए, आप 'सकारात्मक' वर्ग को परिभाषित कर सकते हैं, उदा., वर्ग 1
# वर्ग 1 के लिए सटीकता
precision = precision_score(y_true, y_pred, pos_label=1, average='binary')
# वर्ग 1 के लिए रिकॉल
recall = recall_score(y_true, y_pred, pos_label=1, average='binary')

print(f"सटीकता (वर्ग 1): {precision:.2f}")
print(f"रिकॉल (वर्ग 1): {recall:.2f}")

मल्टीक्लास और मल्टीलेबल परिदृश्यों को संभालना

एआई प्रश्न उत्तर से निपटते समय, समस्या सख्ती से बाइनरी नहीं हो सकती है। आपके पास एक प्रश्न के लिए प्रासंगिकता के कई स्तर या कई सही उत्तर हो सकते हैं। scikit-learn के precision_score और recall_score फ़ंक्शन मल्टीक्लास और मल्टीलेबल लक्ष्यों को संभाल सकते हैं। average पैरामीटर यहाँ महत्वपूर्ण है। विकल्पों में 'micro' (वैश्विक गणना), 'macro' (प्रति वर्ग भार रहित औसत), 'weighted' (समर्थन द्वारा भारित औसत), 'samples' (प्रति उदाहरण औसत, मल्टीलेबल के लिए), या None (प्रत्येक वर्ग के लिए स्कोर लौटाता है) शामिल हैं। छोटे डेटासेट के लिए, average=None का उपयोग करना अक्सर ज्ञानवर्धक होता है क्योंकि यह प्रत्येक विशिष्ट वर्ग या लेबल के लिए प्रदर्शन दिखाता है, जिससे यह समझने में मदद मिलती है कि एआई कहाँ उत्कृष्ट है या संघर्ष कर रहा है।

from sklearn.metrics import precision_score, recall_score
import numpy as np

y_true_multi = [0, 1, 2, 0, 1, 2]
y_pred_multi = [0, 2, 1, 0, 0, 1]

# प्रत्येक वर्ग के लिए सटीकता और रिकॉल की गणना करें
precision_scores = precision_score(y_true_multi, y_pred_multi, average=None)
recall_scores = recall_score(y_true_multi, y_pred_multi, average=None)

print(f"प्रति वर्ग सटीकता: {precision_scores}")
print(f"प्रति वर्ग रिकॉल: {recall_scores}")

# भारित औसत के लिए उदाहरण
weighted_precision = precision_score(y_true_multi, y_pred_multi, average='weighted')
weighted_recall = recall_score(y_true_multi, y_pred_multi, average='weighted')

print(f"भारित सटीकता: {weighted_precision:.2f}")
print(f"भारित रिकॉल: {weighted_recall:.2f}")

शून्य विभाजन की भूमिका

उन परिदृश्यों में जहाँ सटीकता या रिकॉल गणना में भाजक शून्य होता है (जैसे, कोई सकारात्मक भविष्यवाणी नहीं की गई थी, या कोई वास्तविक सकारात्मक उदाहरण मौजूद नहीं है), शून्य से विभाजन त्रुटि हो सकती है। scikit-learn के मेट्रिक्स फ़ंक्शन zero_division पैरामीटर के साथ इसे संभालते हैं। डिफ़ॉल्ट 'warn' है, जो 0 लौटाता है और एक चेतावनी उठाता है। आप इसे स्पष्ट रूप से 0.0 पर सेट कर सकते हैं ताकि चेतावनी के बिना 0 लौटाया जा सके, 1.0 ताकि 1 लौटाया जा सके (यदि आप किसी ऐसे वर्ग के लिए कुछ भी भविष्यवाणी नहीं करने वाले मॉडल को मानते हैं जिसमें कोई वास्तविक उदाहरण नहीं है, तो उस वर्ग के लिए पूरी तरह से सटीक/रिकॉलफुल माना जाता है), या np.nan ताकि ऐसे मामलों को औसत से बाहर रखा जा सके। छोटे डेटासेट के लिए, इन एज केस को समझना और zero_division आपके मेट्रिक्स को कैसे प्रभावित करता है, यह सटीक व्याख्या के लिए महत्वपूर्ण है।

from sklearn.metrics import precision_score, recall_score
import numpy as np

y_true_zero = [0, 0, 0]
y_pred_zero = [0, 0, 0]

# शून्य विभाजन के साथ उदाहरण, डिफ़ॉल्ट 'warn'
print("--- शून्य विभाजन हैंडलिंग ---")
precision_warn = precision_score(y_true_zero, y_pred_zero, average=None, zero_division='warn')
recall_warn = recall_score(y_true_zero, y_pred_zero, average=None, zero_division='warn')
print(f"सटीकता (चेतावनी): {precision_warn}")
print(f"रिकॉल (चेतावनी): {recall_warn}")

# zero_division=1 के साथ उदाहरण
precision_one = precision_score(y_true_zero, y_pred_zero, average=None, zero_division=1)
recall_one = recall_score(y_true_zero, y_pred_zero, average=None, zero_division=1)
print(f"सटीकता (zero_division=1): {precision_one}")
print(f"रिकॉल (zero_division=1): {recall_one}")

# zero_division=np.nan के साथ उदाहरण
precision_nan = precision_score(y_true_zero, y_pred_zero, average=None, zero_division=np.nan)
recall_nan = recall_score(y_true_zero, y_pred_zero, average=None, zero_division=np.nan)
print(f"सटीकता (zero_division=np.nan): {precision_nan}")
print(f"रिकॉल (zero_division=np.nan): {recall_nan}")

छोटे डेटासेट पर परिणामों की व्याख्या करना

छोटे डेटासेट पर एआई प्रदर्शन का मूल्यांकन करने के लिए सावधानीपूर्वक व्याख्या की आवश्यकता होती है। उच्च सटीकता केवल इसलिए प्राप्त की जा सकती है क्योंकि मॉडल बहुत कम सकारात्मक भविष्यवाणियां करता है, और जो वह करता है वे सही साबित होते हैं। इसी तरह, उच्च रिकॉल तब हो सकता है जब डेटासेट में बहुत कम वास्तविक सकारात्मक उदाहरण हों, और मॉडल उन्हें सही ढंग से पहचानता है। दोनों मेट्रिक्स पर एक साथ विचार करना महत्वपूर्ण है। एक सामान्य तरीका सटीकता-रिकॉल वक्र को देखना है, हालांकि बहुत छोटे डेटासेट के लिए, यह उतना जानकारीपूर्ण नहीं हो सकता है। प्रश्न-उत्तर प्रणालियों के लिए, एक छोटा डेटासेट प्रत्येक भविष्यवाणी को मैन्युअल रूप से सत्यापित करने की आवश्यकता का मतलब हो सकता है। यदि डेटासेट प्रतिनिधि होने के लिए बहुत छोटा है, तो गणना की गई सटीकता और रिकॉल बड़े, अनदेखे डेटा पर अच्छी तरह से सामान्यीकृत नहीं हो सकते हैं। यदि संभव हो तो अपने डेटासेट को बढ़ाने या क्रॉस-वैलिडेशन जैसी तकनीकों का उपयोग करने पर विचार करें।

सटीकता बनाम रिकॉल ट्रेड-ऑफ

अक्सर सटीकता और रिकॉल के बीच एक ट्रेड-ऑफ होता है। एक को बढ़ाने से कभी-कभी दूसरा कम हो सकता है। उदाहरण के लिए, एक मॉडल जो बहुत रूढ़िवादी है और केवल तभी एक उत्तर को प्रासंगिक भविष्यवाणी करता है जब वह अत्यंत आत्मविश्वासी हो, उसमें संभवतः उच्च सटीकता लेकिन कम रिकॉल होगा (यह कई प्रासंगिक उत्तरों को चूक जाता है)। इसके विपरीत, एक मॉडल जो हर संभव प्रासंगिक उत्तर खोजने की कोशिश करता है, भले ही कम आत्मविश्वास के साथ, उसमें संभवतः उच्च रिकॉल लेकिन कम सटीकता होगी (इसमें कई अप्रासंगिक उत्तर शामिल हैं)। इष्टतम संतुलन विशिष्ट अनुप्रयोग पर निर्भर करता है। प्रश्न-उत्तर एआई के लिए, क्या केवल सही उत्तर प्रदान करना (उच्च सटीकता) अधिक महत्वपूर्ण है, या यह सुनिश्चित करना कि सभी संभावित सही उत्तर मिल जाएं, भले ही कुछ अप्रासंगिक शामिल हों (उच्च रिकॉल)? यह निर्णय निर्देशित करता है कि आप इन मेट्रिक्स को कैसे प्राथमिकता देते हैं।

एआई प्रश्न उत्तर के लिए व्यावहारिक विचार

एआई प्रश्न उत्तर पर सटीकता और रिकॉल लागू करते समय, विशेष रूप से छोटे डेटासेट के साथ, 'सकारात्मक' वर्ग की प्रकृति पर विचार करें। क्या यह एक एकल सही उत्तर है, या स्वीकार्य उत्तरों का एक सेट है? यदि वेक्टर खोज का उपयोग कर रहे हैं (जैसा कि Azure AI Search दस्तावेज़ में उल्लेख किया गया है), तो प्रासंगिकता वेक्टर समानता द्वारा निर्धारित की जाती है। सटीकता और रिकॉल तब मापते हैं कि समानता खोज इच्छित दस्तावेज़ों को कितनी अच्छी तरह पुनः प्राप्त करती है। हाइब्रिड खोज के लिए, जहाँ वेक्टर और कीवर्ड खोज संयुक्त होते हैं, समग्र प्रदर्शन का मूल्यांकन करने के लिए दोनों पहलुओं पर विचार करने की आवश्यकता होती है। छोटे डेटासेट के लिए अधिक मैन्युअल एनोटेशन और 'सच्चे सकारात्मक' के रूप में क्या गिना जाता है, इसकी सावधानीपूर्वक परिभाषा की आवश्यकता हो सकती है, विशेष रूप से सिमेंटिक या वैचारिक समानता के संदर्भ में, न कि केवल सटीक कीवर्ड मिलान के।

precision_recall_fscore_support का उपयोग करना

Scikit-learn एक उपयोगिता फ़ंक्शन, precision_recall_fscore_support प्रदान करता है, जो प्रत्येक वर्ग के लिए सटीकता, रिकॉल, F1-स्कोर और सही उदाहरणों की संख्या (समर्थन) की गणना करता है। यह फ़ंक्शन विशेष रूप से तब उपयोगी होता है जब आप मल्टीक्लास परिदृश्यों में सभी वर्गों में अपने मॉडल के प्रदर्शन का व्यापक अवलोकन चाहते हैं। छोटे डेटासेट के लिए, प्रत्येक वर्ग के लिए 'समर्थन' देखना बहुत जानकारीपूर्ण हो सकता है, यह उजागर करता है कि किन वर्गों में कुछ उदाहरण हैं, जो उन विशिष्ट वर्गों के लिए कम रिकॉल या सटीकता की व्याख्या कर सकता है। यह फ़ंक्शन एक साथ कई प्रमुख मेट्रिक्स प्राप्त करने की प्रक्रिया को सरल बनाता है।

from sklearn.metrics import precision_recall_fscore_support

y_true_multi = [0, 1, 2, 0, 1, 2]
y_pred_multi = [0, 2, 1, 0, 0, 1]

precision, recall, fscore, support = precision_recall_fscore_support(y_true_multi, y_pred_multi, average=None)

print(f"सटीकता: {precision}")
print(f"रिकॉल: {recall}")
print(f"F1-स्कोर: {fscore}")
print(f"समर्थन: {support}")

छोटे डेटासेट के साथ सीमाएं

छोटे डेटासेट पर सटीकता और रिकॉल का मूल्यांकन करते समय प्राथमिक सीमा सांख्यिकीय महत्व की कमी है। एक छोटे नमूने पर गणना किए गए मेट्रिक्स बड़े, अधिक विविध डेटासेट पर मॉडल के प्रदर्शन को सटीक रूप से प्रतिबिंबित नहीं कर सकते हैं। एक मॉडल केवल संयोग या विशिष्ट उदाहरणों के ओवरफिटिंग के कारण छोटे, क्यूरेटेड प्रश्नों के सेट पर असाधारण रूप से अच्छा प्रदर्शन कर सकता है। इसके विपरीत, यदि छोटे डेटासेट में चुनौतीपूर्ण एज केस शामिल हैं तो एक मॉडल खराब प्रदर्शन करता हुआ दिखाई दे सकता है। बहुत छोटे डेटासेट से निष्कर्षों को सामान्यीकृत करना मुश्किल है। इसके अलावा, 'ग्राउंड ट्रुथ' की परिभाषा स्वयं व्यक्तिपरक हो सकती है, खासकर प्रश्न उत्तर जैसे सूक्ष्म एआई कार्यों में, और एक छोटे डेटासेट को एनोटेट करना संभव उत्तरों या व्याख्याओं के पूर्ण स्पेक्ट्रम को कैप्चर नहीं कर सकता है।

क्या जाँचें

  • सुनिश्चित करें कि छोटे डेटासेट के लिए y_true (ग्राउंड ट्रुथ) को सटीक रूप से एनोटेट किया गया है।
  • सत्यापित करें कि y_pred (मॉडल भविष्यवाणियां) y_true लेबल से सही ढंग से मेल खाती हैं।
  • मल्टीक्लास/मल्टीलेबल परिणामों पर average पैरामीटर के प्रभाव को समझें।
  • एज केस के लिए zero_division पैरामीटर के व्यवहार पर विचार करें।
  • सटीकता और रिकॉल दोनों का विश्लेषण करें, अलग-अलग नहीं।
  • ध्यान रखें कि छोटे डेटासेट के परिणाम अच्छी तरह से सामान्यीकृत नहीं हो सकते हैं।

ये मेट्रिक्स तब सबसे विश्वसनीय होते हैं जब उन्हें उन डेटासेट पर लागू किया जाता है जो वास्तविक दुनिया के डेटा का प्रतिनिधि होते हैं जिनसे एआई का सामना होगा। बहुत छोटे डेटासेट के लिए, गणना की गई सटीकता और रिकॉल सांख्यिकीय सीमाओं और संभावित ओवरफिटिंग के कारण वास्तविक प्रदर्शन को सटीक रूप से प्रतिबिंबित नहीं कर सकते हैं। परिणामों की सावधानी के साथ व्याख्या की जानी चाहिए, और यदि संभव हो तो डेटासेट का विस्तार करने या क्रॉस-वैलिडेशन का उपयोग करने के प्रयास किए जाने चाहिए।

स्रोत

  1. scikit-learn: precision_score ↗
  2. scikit-learn: recall_score ↗
  3. Microsoft Learn: relevance in vector search ↗
ऊपर जाएँ ↑