2010-06-02 10 views
6

मुझे पता है कि यह प्रोग्रामिंग प्रश्न का केवल एक हिस्सा है, लेकिन फिलहाल, मैं तर्क प्रोग्रामिंग का थोड़ा सा कर रहा हूं। एक बात जो मैं अभी भी सही ढंग से समझ नहीं पा रहा हूं वह पहले आदेश तर्क में एकीकरण है।प्रथम आदेश तर्क में एकीकरण का वास्तविक विश्व उदाहरण?

मैंने Wikipedia article पढ़ा है और यह कम या ज्यादा स्पष्ट है कि उद्देश्य एक शब्द खोज रहा है जो दो वाक्यों को एकीकृत करता है ... इस आलेख में भी उदाहरण हैं लेकिन मुझे यह नहीं पता कि यह उपयोगी क्यों होना चाहिए । क्या कोई ए, बी, सी, आदि के बजाय वास्तविक दुनिया वस्तुओं के साथ एक उदाहरण दे सकता है? मुझे आशा है कि इससे मुझे समझने में मदद मिलेगी। धन्यवाद

+0

यहां आज़माएं? http://stackoverflow.com/questions/1133289/simplest-example-of-need-for-unification-in-type-inference –

+0

धन्यवाद लेकिन किसी भी तरह से मुझे लगता है कि यह कुछ अलग है जो मैं चाहता हूं। मैं प्रोग्रामिंग भाग की तुलना में unificaiton के तर्क भाग में अधिक रुचि रखते हैं। –

उत्तर

2

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

एकीकरण आधारित व्याकरण के रूप में एक CFG (विषय से मुक्त व्याकरण) जहां प्रस्तुतियों एकीकरण के साथ बढ़ाया है के बारे में सोचा जा सकता है। सीजीएफ में प्रत्येक शब्द को एवीएम (विशेषता मूल्य मैट्रिक्स) मिलता है, जो सुविधाओं और मूल्यों का एक निर्देशित विश्वकोश ग्राफ है। यहां विचार कुछ हद तक कंपाइलर्स में इस्तेमाल व्याकरण की विशेषता है।

S -> NP VP 
NP -> Kim 
NP -> The cats 
VP -> V NP 
V -> see 
V -> sees 

हम समझौते में कुछ मामूली overgeneration यहाँ:

इस खिलौने व्याकरण कल्पना कीजिए

* बिल्लियों किम देखता [एस [एनपी बिल्लियों] [उपाध्यक्ष [V देखता] [ एनपी किम]]]

आदेश इसे ठीक करने के हम CFG परिशोधित कर सकते हैं समझौते की धारणा शामिल करने के लिए:

S -> NP_sg VP_sg 
S -> NP_sg VP_pl 
NP_sg -> Kim 
NP_pl -> The cats 
VP_sg -> V_sg NP_sg 
VP_sg -> V_sg NP_pl 
V_sg -> sees 
V_pl -> see 
VP_pl -> V_pl NP_pl 
VP_pl -> V_pl NP_sg 

यहां हम पहले से अतिसंवेदनशीलता को अस्वीकार कर देंगे। लेकिन इससे संयोजक अभिव्यक्ति बहुत जल्दी हो जाती है। लेकिन हम एक AVM के साथ प्रत्येक अवधि बढ़ाने और इन एक साथ एकजुट है जब हम पार्स सकता है:

S -> NP VP , C = A unified with B. 
NP -> kim /[ AGR sg ]. We mark Kim as being singular 
NP -> The cats/[ AGR pl ] 
VP[ AGR #1 ] -> V [ AGR #1 ] NP 

# 1-अंकन reentrancies कर रहे हैं, जिसका मतलब है कि इस सुविधा का मान एक समान होना चाहिए, वास्तव में वे इंगित करेगा एकीकरण के बाद ग्राफ में एक ही नोड के लिए, iff यह succedes। अभ्यास में हम कहते हैं कि एक क्रिया वाक्यांश की समझौता सुविधा वाक्यांश में क्रिया के समझौते के समान है।

V -> See/[ AGR pl ] 
V -> Sees/[ AGR sg ] 

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

अधिक जानकारी के लिए HPSG और LFG देखें।

+0

यह बहुत उपयोगी है, लेकिन मुझे लगता है कि आपका दूसरा कोड ब्लॉक की दूसरी पंक्ति में "एस -> एनपी_एसएस वीपी_पीएल" के बजाय "एस -> एनपी_पीएल वीपी_पीएल" था। – redfish64

1

तर्क प्रोग्रामिंग, AFAIK, बहुत अधिक एकीकरण है। आप दुभाषिया को एक बयान प्रदान करते हैं, और दुभाषिया इसे किसी चीज़ के साथ एकीकृत करने का प्रयास करता है जिसे वह "सत्य" यानी अपने डेटाबेस में कुछ ऐसा जानता है।

उदा।

cat(tom) :- true. 

दावा करता है कि टॉम एक बिल्ली है।

तो फिर तुम

?- cat(X). 

क्वेरी कर सकता है और prolog

X = tom 

Prolog अपने डेटाबेस में लग रहा है और एक तथ्य यह पहले से ही "जानता" के साथ अपनी प्रदान की बयान (cat(X)) को एकजुट करने की कोशिश करता है वापस आ जाएगी। इस मामले में, यह cat(tom) पाता है और इस प्रकार आपको X=tom बता सकता है।

+0

मेरे स्रोत उद्धृत करें: प्रस्तावना उदाहरण विकिपीडिया के प्रोलॉग पेज से आता है। –

5

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

लिफ़्टेड अनुमान नियमों प्रतिस्थापन है कि विभिन्न तार्किक अभिव्यक्ति समान दिखने खोजने की आवश्यकता है। इस प्रक्रिया को एकीकरण कहा जाता है और सभी प्रथम क्रम अनुमान एल्गोरिदम का एक प्रमुख घटक है। UNIFY एल्गोरिदम दो वाक्यों और उनके लिए एक एकीकृतकर्ता देता है यदि एक मौजूद है।

हमें कुछ उदाहरण देखें कि कैसे यूनिफ़ाई का व्यवहार करना चाहिए। मान लें कि हमारे पास क्वेरी है Knows (जॉन, एक्स): जॉन कौन जानता है? इस क्वेरी के कुछ जवाब में सभी वाक्यों को ढूंढकर पाए जा सकते हैं जो ज्ञात (जॉन, एक्स) के साथ एकीकृत ज्ञान आधार है। यहाँ के परिणाम चार अलग अलग वाक्य कि ज्ञान का आधार में हो सकता है के साथ एकीकरण की हैं:

UNIFY(Knows(John, x), Knows(John, Jane)) = {x/Jane} 
UNIFY(Knows(John, x), Knows(y, Bill)) = {x/Bill, y/John} 
UNIFY(Knows(John, x), Knows(y, Mother(y))) = {y/John, x/Mother(John)} 
UNIFY(Knows(John, x), Knows(x, Elisabeth)) = fail 

पिछले एकीकरण में विफल रहता है क्योंकि एक्स मूल्यों पर जॉन और एलिजाबेथ पर नहीं ले जा सकते उसी समय।

+0

मुझे यह जवाब पसंद है। वर्बोज़ के बिना बहुत स्पष्ट और संक्षेप में। यह एकीकरण का असली सार दिखाता है। – in70x

संबंधित मुद्दे