What Bugs Do Prolog Students Write? An Empirical Taxonomy and Data-Driven Mutation Framework
यह शोध पत्र LogMorph प्रस्तुत करता है, जो प्रोलॉग (Prolog) के लिए एक डेटा-संचालित उत्परिवर्तन ढांचा (mutation framework) है, जो वास्तविक क्लासरूम की गलतियों से मेल खाने वाले त्रुटि वितरण के साथ यथार्थवादी कृत्रिम दोष उत्पन्न करने के लिए 7,201 छात्र सबमिशन के एक अनुभवजन्य वर्गीकरण (empirical taxonomy) का लाभ उठाता है, जिससे लॉजिक प्रोग्रामिंग शिक्षा में स्वचालित फीडबैक टूल की प्रभावशीलता में सुधार होता है।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
कल्पना कीजिए कि आप एक रोबोट को एक मानव जासूस की तरह सोचना सिखाने की कोशिश कर रहे हैं। आप उसे सिर्फ यह नहीं बताते कि "अपराध सुलझाओ"; आपको उसे तर्क के उन विशिष्ट, विचित्र नियमों को सिखाना होगा कि कैसे सुराग आपस में जुड़ते हैं। यह लॉजिक प्रोग्रामिंग (Logic Programming) की दुनिया है, जो कोड लिखने का एक ऐसा तरीका है जहाँ आप यह बताने के बजाय कि इसे कैसे करना है, यह बताते हैं कि क्या सत्य है। यह टर्न-बाय-टर्न ड्राइविंग निर्देशों के बजाय एक शहर के मानचित्र को देने जैसा है। लेकिन यहाँ एक पेंच है: इंसान बिखराव भरे होते हैं। जब हम इन नियमों को सीखने की कोशिश करते हैं, तो हम बहुत विशिष्ट, अनुमानित गलतियाँ करते हैं। हम शायद कोई नियम भूल जाते हैं, दो सुरागों को आपस में मिला देते हैं, या गलत जगह पर एक "स्टॉप साइन" लगा देते हैं।
हमारे कोड को ठीक करने के लिए एक सहायक रोबोट ट्यूटर बनाने के लिए, हमें यह जानने की जरूरत है कि हम किस तरह की गलतियाँ करते हैं। यदि रोबलेट केवल यादृच्छिक (random), मनगढ़ंत त्रुटियों पर अभ्यास करता है, तो वह एक वास्तविक छात्र से मिलने पर भ्रमित हो जाएगा। यह एक ड्राइविंग इंस्ट्रक्टर की तरह है जो केवल उन कारों के साथ अभ्यास करता है जिनके टायर पंचर हैं, और फिर एक छात्र द्वारा सीटबेल्ट लगाना भूल जाने पर हैरान रह जाता है। यह शोध पत्र छात्र की त्रुटियों की इस अव्यवस्थित वास्तविकता में गहराई से उतरकर एक बेहतर प्रशिक्षण मैदान तैयार करता है।
द ग्रेट प्रोलॉग बग हंट (The Great Prolog Bug Hunt)
हाल ही के एक अध्ययन में, शोधकर्ताओं ने जासूस बनने का निर्णय लिया, लेकिन अपराधियों की तलाश करने के बजाय, वे कंप्यूटर कोड में 'बग्स' (bugs) की तलाश कर रहे थे। उन्होंने प्रोलॉग (Prolog) नामक भाषा सीख रहे 265 स्नातक छात्रों के 7,201 कोड सबमिशन का अध्ययन किया। प्रोलॉग को एक ऐसी भाषा के रूप में सोचें जहाँ आप तथ्यों और नियमों की एक सूची लिखते हैं, और कंप्यूटर उत्तर निकाल लेता है। छात्र पहेलियाँ सुलझा रहे थे, सरल तर्क खेलों से लेकर एक अंतिम प्रोजेक्ट तक, जहाँ उन्होंने "स्टार बैटल" (Star Battle) नामक एक जटिल बोर्ड गेम के लिए सॉल्वर बनाया था।
टीम ने केवल यह नहीं गिना कि कितने प्रोग्राम विफल हुए; वे यह जानना चाहते थे कि वे क्यों विफल हुए। उन्होंने 200 ऐसे सबमिशन चुने जहाँ छात्रों ने एक गलती को ठीक किया था और उन्हें मैन्युअल रूप से एक "टैक्सोनॉमी" (taxonomy) में वर्गीकृत किया, जो कि एक विस्तृत फाइलिंग सिस्टम का एक फैंसी शब्द है। उन्होंने पाया कि सबसे आम गलती कोई जटिल तर्क संबंधी त्रुटि नहीं थी, बल्कि केवल अधूरा काम था। लगभग 37.5% बार, छात्र कहानी के एक पूरे अध्याय को भूल गए की तरह, पहेली का एक पूरा हिस्सा लिखना भूल गए। अगली सबसे आम त्रुटियाँ गलत सामग्री का उपयोग करना (20.5%) या एक नियम में लक्ष्यों को आपस में मिला देना (13.0%) थीं। दिलचस्प बात यह है कि उन्होंने पाया कि छात्र उन "लापरवाह" टाइपो को शायद ही कभी करते हैं जो अन्य भाषाओं में लोग करते हैं; उनकी गलतियाँ अक्सर इस बात की गहरी गलतफहमी थीं कि तर्क कैसे काम करता है।
"बग फैक्ट्री" का निर्माण (LOGMORPH)
यह जानना कि छात्र क्या गलतियाँ करते हैं, बहुत अच्छी बात है, लेकिन आप कंप्यूटर को उन्हें पहचानना कैसे सिखाते हैं? शोधकर्ताओं ने LOGMORPH नामक एक उपकरण बनाया। एक ऐसी फैक्ट्री की कल्पना करें जो कोड के एक आदर्श, काम करने वाले टुकड़े को लेती है और जानबूझकर उसे खराब कर देती है।
पुराने कारखाने चीजों को यादृच्छिक रूप से तोड़ते थे, जैसे बोर्ड पर तीर मारना। वे मानते थे कि हर प्रकार का टूटना समान रूप से संभावित है। लेकिन LOGMORPH अलग है। यह एक डेटा-ड्रिवन (data-driven) फैक्ट्री है। यह शोधकर्ताओं द्वारा पहले बनाए गए वास्तविक छात्र त्रुटियों के "फाइलिंग कैबिनेट" को देखती है और कहती है, "ठीक है, चूंकि छात्र 37.5% समय अपना कोड पूरा करना भूल जाते हैं, तो चलिए कोड को उसी तरह 37.5% बार तोड़ते हैं।"
यह उपकरण चार चरणों में काम करता है:
- स्कैनिंग (Scanning): यह आदर्श कोड को पढ़ता है और हर उस स्थान को ढूँढता है जहाँ गलती हो सकती है।
- सैंपलिंग (Sampling): यह टूटने के लिए एक स्थान चुनता है, लेकिन यह वास्तविक छात्र सांख्यिकी के आधार पर चुनता है। यदि "क्लॉज भूलना" आम है, तो यह उसे अक्सर चुनता है।
- इंजेक्टिंग (Injecting): यह वास्तव में कोड को तोड़ता है। कभी-कभी यह आसान होता है, जैसे दो संख्याओं को बदलना। अन्य समय में, इसे एक नया कोड का हिस्सा इन्वेंट करने की आवश्यकता होती है। इसके लिए, यह एक स्मार्ट "सिंथेसाइज़र" (एक प्रकार का AI) का उपयोग करता है ताकि नियमों के अनुकूल कोड की एक नई पंक्ति उत्पन्न की जा सके।
- टेस्टिंग (Testing): यह जाँचता है कि क्या टूटा हुआ कोड वास्तव में परीक्षणों (tests) में विफल होता है। यदि "टूटा हुआ" कोड अभी भी पूरी तरह से काम करता है, तो यह उसे फेंक देता है और फिर से प्रयास करता है।
परिणाम: एक लगभग पूर्ण दर्पण
टीम ने इन नकली, बग वाले प्रोग्रामों को बनाने के लिए इस फैक्ट्री को चलाया और 16,000 नकली प्रोग्राम बनाए। फिर उन्होंने इन नकली प्रोग्रामों के "बग प्रोफाइल" की तुलना वास्तविक छात्र डेटा से की। परिणाम आश्चर्यजनक रूप से करीब थे। अधिकांश त्रुटि श्रेणियों के लिए, नकली प्रोग्राम वास्तविक प्रोग्रामों से दो प्रतिशत अंक के भीतर मेल खाते थे। यह अपने प्रतिबिंब को बिल्कुल उसी तरह चलते हुए देखने जैसा था।
हालाँकि, दर्पण पूर्ण नहीं था। शोधकर्ताओं ने दो मुख्य गड़बड़ियाँ देखीं:
- "कट" (Cut) की समस्या: प्रोलॉग में, एक विशेष प्रतीक है जिसे "कट" (लिखा जाता है
!) कहा जाता है जो कंप्यूटर को अन्य उत्तरों की तलाश करने से रोकता है। छात्र अक्सर इसमें गलती करते हैं। लेकिन नकली प्रोग्रामों में, ये गलतियाँ दुर्लभ थीं। क्यों? क्योंकि फैक्ट्री का "टेस्टिंग" चरण बहुत सख्त था। यदि एक नकली कट ने टेस्ट परिणामों को नहीं बदला, तो फैक्ट्री ने उसे हटा दिया। वास्तविक छात्र एक ऐसी कट गलती कर सकते हैं जो टेस्ट को नहीं तोड़ती लेकिन फिर भी तर्क को भ्रमित करती है, लेकिन फैक्ट्री ने उन्हें फ़िल्टर कर दिया। - "रोबोट" कोड: जब फैक्ट्री को नया कोड इन्वेंट करना पड़ता था (जैसे कि एक रैंडम गोल जोड़ना), तो "सिंथेसाइज़र" कभी-कभी ऐसी चीजें लिखता था जो तकनीकी रूप से सही थीं लेकिन सुनने में बेतुकी लगती थीं। उदाहरण के लिए, यह एक खाली लिस्ट की तुलना गणितीय प्रतीक का उपयोग करके एक वेरिएबल से कर सकता है। कोई भी मानव छात्र ऐसा कभी नहीं लिखेगा; यह एक रोबोट की तरह लग रहा था जो मानव बोलने की कोशिश कर रहा हो। शोधकर्ताओं को संदेह है कि यदि वे सिंथेसाइज़र को छात्र लेखन पर प्रशिक्षित अधिक उन्नत AI से बदल दें, तो नकली कोड बहुत अधिक स्वाभाविक लगेगा।
इसका क्या अर्थ है
यह शोध पत्र लॉजिक प्रोग्रामिंग सिखाने की सभी समस्याओं को हल करने का दावा नहीं करता है। इसके बजाय, यह छात्र त्रुटियों को सिम्युलेट करने का एक नया, बहुत बेहतर तरीका प्रदान करता है। वास्तविक डेटा का उपयोग करके गलतियों को वेटेज देकर, LOGMORPH एक यथार्थवादी प्रशिक्षण मैदान बनाता है। शोधकर्ता सुझाव देते हैं कि भविष्य में, इस डेटा-ड्रिवन दृष्टिकोण को स्मार्ट AI भाषा मॉडलों के साथ जोड़ने से ये प्रशिक्षण उपकरण और भी अधिक जीवंत बन सकते हैं, जिससे रोबोट न केवल यह समझ पाएंगे कि छात्र गलत है, बल्कि यह भी कि उन्होंने वह विशिष्ट, मानवीय गलती क्यों की।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।