विटर्बी एल्गोरिदम: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{short description|Finds likely sequence of hidden states}}
{{short description|Finds likely sequence of hidden states}}
विटर्बी [[कलन विधि]] छिपे हुए राज्यों के सबसे अधिक संभावना वाले फलन अनुक्रम का अधिकतम पोस्टीरियर अनुमान प्राप्त करने के लिए [[गतिशील प्रोग्रामिंग]] एल्गोरिदम है - जिसे विटरबी पथ कहा जाता है - जिसके परिणामस्वरूप देखी गई घटनाओं का अनुक्रम होता है, खासकर [[मार्कोव सूचना स्रोत|मार्कोव सूचना]] स्त्रोमध्यं और छिपे हुए मार्कोव के संदर्भ में मॉडल (एचएमएम)
विटर्बी [[कलन विधि]] छिपे हुए स्थान के सबसे अधिक संभावना वाले फलन अनुक्रम का अधिकतम पोस्टीरियर अनुमान प्राप्त करने के लिए [[गतिशील प्रोग्रामिंग]] एल्गोरिदम है - जिसे विटरबी पथ कहा जाता है - जिसके परिणामस्वरूप देखी गई घटनाओं का अनुक्रम होता है,विशेष रूप से [[मार्कोव सूचना स्रोत|मार्कोव सूचना]] स्त्रोतों और छिपे हुए मार्कोव के संदर्भ में मॉडल (एचएमएम) होता है।


एल्गोरिदम ने [[सीडीएमए]] और [[जीएसएम]] डिजिटल सेल्युलर, [[डायल करें]] मॉडेम, सैटेलाइट, डीप-स्पेस संचार और 802.11 वायरलेस लैन दोनों में उपयोग किए जाने वाले [[कन्वोल्यूशनल कोड]] को डिकोड करने में सार्वभौमिक अनुप्रयोग पाया है। अब इसका उपयोग सामान्यतः [[वाक् पहचान]], वाक् संश्लेषण, [[डायरीकरण]], में भी किया जाता है।<ref>Xavier Anguera et al., [http://www1.icsi.berkeley.edu/~vinyals/Files/taslp2011a.pdf "Speaker Diarization: A Review of Recent Research"], retrieved 19. August 2010, IEEE TASLP</ref> [[कीवर्ड स्पॉटिंग]], कम्प्यूटेशनल भाषाविज्ञान, और जैव सूचना विज्ञान। उदाहरण के लिए, वाक्-से-पाठ (वाक् पहचान) में, ध्वनिक संकेत को घटनाओं के देखे गए अनुक्रम के रूप में माना जाता है, और पाठ की स्ट्रिंग को ध्वनिक संकेत का छिपा हुआ कारण माना जाता है। विटरबी एल्गोरिदम ध्वनिक संकेत दिए जाने पर पाठ की सबसे संभावित स्ट्रिंग ढूंढता है।
एल्गोरिदम ने [[सीडीएमए]] और [[जीएसएम]] डिजिटल सेल्युलर, [[Index.php?title=डायल अप|डायल -अप]] मॉडेम, सैटेलाइट, डीप-स्पेस संचार और 802.11 वायरलेस लैन दोनों में उपयोग किए जाने वाले [[कन्वोल्यूशनल कोड]] को डिकोड करने में सार्वभौमिक अनुप्रयोग पाया जाता है। अब इसका उपयोग सामान्यतः [[वाक् पहचान]], वाक् संश्लेषण, [[डायरीकरण]], [[कीवर्ड स्पॉटिंग]], कम्प्यूटेशनल भाषाविज्ञान, और जैव सूचना विज्ञान में भी किया जाता है।<ref>Xavier Anguera et al., [http://www1.icsi.berkeley.edu/~vinyals/Files/taslp2011a.pdf "Speaker Diarization: A Review of Recent Research"], retrieved 19. August 2010, IEEE TASLP</ref> उदाहरण के लिए, वाक्-से-पाठ (वाक् पहचान) में, ध्वनिक संकेत को घटनाओं के देखे गए अनुक्रम के रूप में माना जाता है, और पाठ की शृंखला को ध्वनिक संकेत का छिपा हुआ कारण माना जाता है। विटरबी एल्गोरिदम ध्वनिक संकेत दिए जाने पर पाठ की सबसे संभावित शृंखला ढूंढता है।


== इतिहास ==
== इतिहास ==
विटर्बी एल्गोरिदम का नाम [[ एंड्रयू विटेर्बी ]] के नाम पर रखा गया है, जिन्होंने 1967 में इसे ध्वनि वाले डिजिटल संचार लिंक पर [[कनवल्शन कोड]] के लिए डिकोडिंग एल्गोरिदम के रूप में प्रस्तावित किया था।<ref>[https://arxiv.org/abs/cs/0504020v2 29 Apr 2005, G. David Forney Jr: The Viterbi Algorithm: A Personal History]</ref> चूँकि, इसमें अनेक आविष्कारों का इतिहास है, जिसमें कम से कम सात स्वतंत्र खोजें सम्मिलित हैं, जिनमें विटर्बी, नीडलमैन-वुन्श एल्गोरिदम और वैगनर-फिशर एल्गोरिदम सम्मिलित हैं।<ref name="slp">{{cite book |author1=Daniel Jurafsky |author2=James H. Martin |title=भाषण और भाषा प्रसंस्करण|publisher=Pearson Education International |page=246}}</ref> इसे 1987 की प्रारंभ में [[भाषण का भाग टैगिंग]] की विधि के रूप में [[प्राकृतिक भाषा प्रसंस्करण]] में प्रस्तुत किया गया था।
विटर्बी एल्गोरिदम का नाम [[ एंड्रयू विटेर्बी |एंड्रयू विटेर्बी]] के नाम पर रखा गया है, जिन्होंने 1967 में इसे ध्वनि वाले डिजिटल संचार लिंक पर [[कनवल्शन कोड]] के लिए डिकोडिंग एल्गोरिदम के रूप में प्रस्तावित किया था।<ref>[https://arxiv.org/abs/cs/0504020v2 29 Apr 2005, G. David Forney Jr: The Viterbi Algorithm: A Personal History]</ref> चूँकि, इसमें अनेक आविष्कारों का इतिहास है, जिसमें कम से कम सात स्वतंत्र खोजें सम्मिलित हैं, जिनमें विटर्बी, नीडलमैन-वुन्श एल्गोरिदम और वैगनर-फिशर एल्गोरिदम सम्मिलित हैं।<ref name="slp">{{cite book |author1=Daniel Jurafsky |author2=James H. Martin |title=भाषण और भाषा प्रसंस्करण|publisher=Pearson Education International |page=246}}</ref> इसे 1987 की प्रारंभ में [[भाषण का भाग टैगिंग]] की विधि के रूप में [[प्राकृतिक भाषा प्रसंस्करण]] में प्रस्तुत किया गया था।


संभावनाओं से जुड़ी समस्याओं को अधिकतम करने के लिए गतिशील प्रोग्रामिंग एल्गोरिदम के अनुप्रयोग के लिए विटर्बी पथ और विटरबी एल्गोरिदम मानक शब्द बन गए हैं।<ref name="slp" /> उदाहरण के लिए, सांख्यिकीय पार्सिंग में स्ट्रिंग के एकल सबसे संभावित संदर्भ-मुक्त व्युत्पत्ति (पार्स) की खोज के लिए गतिशील प्रोग्रामिंग एल्गोरिदम का उपयोग किया जा सकता है, जिसे सामान्यतः विटर्बी पार्स कहा जाता है।<ref>{{Cite conference | doi = 10.3115/1220355.1220379| title = बिट वैक्टर के साथ अत्यधिक अस्पष्ट संदर्भ-मुक्त व्याकरण का कुशल विश्लेषण| conference = Proc. 20th Int'l Conf. on Computational Linguistics (COLING)| pages = <!--162-->| year = 2004| last1 = Schmid | first1 = Helmut| url = http://www.aclweb.org/anthology/C/C04/C04-1024.pdf| doi-access = free}}</ref><ref>{{Cite conference| doi = 10.3115/1073445.1073461| title = A* parsing: fast exact Viterbi parse selection| conference = Proc. 2003 Conf. of the North American Chapter of the Association for Computational Linguistics on Human Language Technology (NAACL)| pages = 40–47| year = 2003| last1 = Klein | first1 = Dan| last2 = Manning | first2 = Christopher D.| url = http://ilpubs.stanford.edu:8090/532/1/2002-16.pdf| doi-access = free}}</ref><ref>{{Cite journal | doi = 10.1093/nar/gkl200| title = AUGUSTUS: Ab initio prediction of alternative transcripts| journal = Nucleic Acids Research| volume = 34| issue = Web Server issue| pages = W435–W439| year = 2006| last1 = Stanke | first1 = M.| last2 = Keller | first2 = O.| last3 = Gunduz | first3 = I.| last4 = Hayes | first4 = A.| last5 = Waack | first5 = S.| last6 = Morgenstern | first6 = B. | pmid=16845043 | pmc=1538822}}</ref> अन्य अनुप्रयोग [[ऑप्टिकल मोशन ट्रैकिंग]] में है, जहां ट्रैक की गणना की जाती है जो अवलोकनों के अनुक्रम को अधिकतम संभावना प्रदान करता है।<ref>{{cite conference |author=Quach, T.; Farooq, M. |chapter=Maximum Likelihood Track Formation with the Viterbi Algorithm |title=Proceedings of 33rd IEEE Conference on Decision and Control |date=1994 |volume=1 |pages=271–276|doi=10.1109/CDC.1994.410918}}</ref>
संभावनाओं से जुड़ी समस्याओं को अधिकतम करने के लिए गतिशील प्रोग्रामिंग एल्गोरिदम के अनुप्रयोग के लिए विटर्बी पथ और विटरबी एल्गोरिदम मानक शब्द बन गए हैं।<ref name="slp" /> उदाहरण के लिए, सांख्यिकीय पार्सिंग में शृंखला के एकल सबसे संभावित संदर्भ-मुक्त व्युत्पत्ति (पार्स) की खोज के लिए गतिशील प्रोग्रामिंग एल्गोरिदम का उपयोग किया जा सकता है, जिसे सामान्यतः विटर्बी पार्स कहा जाता है।<ref>{{Cite conference | doi = 10.3115/1220355.1220379| title = बिट वैक्टर के साथ अत्यधिक अस्पष्ट संदर्भ-मुक्त व्याकरण का कुशल विश्लेषण| conference = Proc. 20th Int'l Conf. on Computational Linguistics (COLING)| pages = <!--162-->| year = 2004| last1 = Schmid | first1 = Helmut| url = http://www.aclweb.org/anthology/C/C04/C04-1024.pdf| doi-access = free}}</ref><ref>{{Cite conference| doi = 10.3115/1073445.1073461| title = A* parsing: fast exact Viterbi parse selection| conference = Proc. 2003 Conf. of the North American Chapter of the Association for Computational Linguistics on Human Language Technology (NAACL)| pages = 40–47| year = 2003| last1 = Klein | first1 = Dan| last2 = Manning | first2 = Christopher D.| url = http://ilpubs.stanford.edu:8090/532/1/2002-16.pdf| doi-access = free}}</ref><ref>{{Cite journal | doi = 10.1093/nar/gkl200| title = AUGUSTUS: Ab initio prediction of alternative transcripts| journal = Nucleic Acids Research| volume = 34| issue = Web Server issue| pages = W435–W439| year = 2006| last1 = Stanke | first1 = M.| last2 = Keller | first2 = O.| last3 = Gunduz | first3 = I.| last4 = Hayes | first4 = A.| last5 = Waack | first5 = S.| last6 = Morgenstern | first6 = B. | pmid=16845043 | pmc=1538822}}</ref> अन्य अनुप्रयोग [[ऑप्टिकल मोशन ट्रैकिंग]] में है, जहां ट्रैक की गणना की जाती है जो अवलोकनों के अनुक्रम को अधिकतम संभावना प्रदान करता है।<ref>{{cite conference |author=Quach, T.; Farooq, M. |chapter=Maximum Likelihood Track Formation with the Viterbi Algorithm |title=Proceedings of 33rd IEEE Conference on Decision and Control |date=1994 |volume=1 |pages=271–276|doi=10.1109/CDC.1994.410918}}</ref>
== एक्सटेंशन ==
== एक्सटेंशन ==
विटरबी एल्गोरिदम का सामान्यीकरण, जिसे अधिकतम-योग एल्गोरिदम (या अधिकतम-उत्पाद एल्गोरिदम) कहा जाता है, का उपयोग बड़ी संख्या में [[ चित्रमय मॉडल ]] में सभी या कुछ [[अव्यक्त चर]] के सबसमुच्चय के सबसे संभावित असाइनमेंट को खोजने के लिए किया जा सकता है, उदाहरण के लिए [[बायेसियन नेटवर्क]], [[मार्कोव यादृच्छिक क्षेत्र]] और [[सशर्त यादृच्छिक क्षेत्र]]सामान्यतः, अव्यक्त चर को कुछ सीमा तक छिपे हुए मार्कोव मॉडल (एचएमएम) के समान कनेक्ट करने की आवश्यकता होती है, जिसमें चर और चर के मध्य कुछ प्रकार की रैखिक संरचना के मध्य सीमित संख्या में कनेक्शन होते हैं। सामान्य एल्गोरिदम में संदेश भेजना सम्मिलित है और यह अधिक सीमा तक विश्वास प्रसार एल्गोरिदम (जो आगे-पीछे एल्गोरिदम का सामान्यीकरण है) के समान है।
विटरबी एल्गोरिदम का सामान्यीकरण, जिसे अधिकतम-योग एल्गोरिदम (या अधिकतम-उत्पाद एल्गोरिदम) कहा जाता है, इसका उपयोग बड़ी संख्या में [[ चित्रमय मॉडल |चित्रमय मॉडल]] में सभी या कुछ [[अव्यक्त चर]] के सब समुच्चय के सबसे संभावित असाइनमेंट को खोजने के लिए किया जा सकता है, उदाहरण के लिए [[बायेसियन नेटवर्क]], [[मार्कोव यादृच्छिक क्षेत्र]] और [[सशर्त यादृच्छिक क्षेत्र]] होता हैं। सामान्यतः, अव्यक्त वैरिएबल को कुछ सीमा तक छिपे हुए मार्कोव मॉडल (एचएमएम) के समान कनेक्ट करने की आवश्यकता होती है, जिसमें वैरिएबल और वैरिएबल के मध्य कुछ प्रकार की रैखिक संरचना के मध्य सीमित संख्या में कनेक्शन होते हैं। सामान्य एल्गोरिदम में संदेश भेजना सम्मिलित है और यह अधिक सीमा तक विश्वास प्रसार एल्गोरिदम (जो आगे-पीछे एल्गोरिदम का सामान्यीकरण है) के समान होता है


पुनरावृत्त विटरबी डिकोडिंग नामक एल्गोरिदम के साथ कोई भी अवलोकन के परिणाम को पा सकता है जो किसी दिए गए छिपे हुए मार्कोव मॉडल से सबसे अच्छा (औसतन) मेल खाता है। यह एल्गोरिदम क्यूई वांग एट अल द्वारा प्रस्तावित है। [[टर्बो कोड]] से निपटने के लिए.<ref>{{cite journal |author1=Qi Wang |author2=Lei Wei |author3=Rodney A. Kennedy |year=2002 |title=उच्च-दर समता-संक्षिप्त टीसीएम के लिए पुनरावृत्त विटरबी डिकोडिंग, ट्रेलिस शेपिंग और बहुस्तरीय संरचना|journal=IEEE Transactions on Communications |volume=50 |pages=48–55 |doi=10.1109/26.975743}}</ref> पुनरावृत्तीय विटरबी डिकोडिंग संशोधित विटरबी एल्गोरिदम को पुनरावृत्त रूप से प्रयुक्त करके काम करता है, अभिसरण तक भराव के लिए स्कोर का पुनर्मूल्यांकन करता है।
पुनरावृत्त विटरबी डिकोडिंग नामक एल्गोरिदम के साथ कोई भी अवलोकन के परिणाम को प्राप्त सकता है जो किसी दिए गए छिपे हुए मार्कोव मॉडल से सबसे अच्छा (औसतन) मेल खाता है। यह एल्गोरिदम Qi वांग एट अल द्वारा प्रस्तावित होता है। [[टर्बो कोड]] से निपटने के लिए. पुनरावृत्तीय विटरबी डिकोडिंग संशोधित विटरबी एल्गोरिदम को पुनरावृत्त रूप से प्रयुक्त करके काम करता है, अभिसरण तक भराव के लिए स्कोर का पुनर्मूल्यांकन करता है।<ref>{{cite journal |author1=Qi Wang |author2=Lei Wei |author3=Rodney A. Kennedy |year=2002 |title=उच्च-दर समता-संक्षिप्त टीसीएम के लिए पुनरावृत्त विटरबी डिकोडिंग, ट्रेलिस शेपिंग और बहुस्तरीय संरचना|journal=IEEE Transactions on Communications |volume=50 |pages=48–55 |doi=10.1109/26.975743}}</ref>


एक वैकल्पिक एल्गोरिथम, [[आलसी विटर्बी एल्गोरिदम]] प्रस्तावित किया गया है।<ref>{{cite conference|url=http://people.csail.mit.edu/jonfeld/pubs/lazyviterbi.pdf |title=कन्वेन्शनल कोड के लिए एक तेज़ अधिकतम-संभावना डिकोडर|date=December 2002 |conference= Vehicular Technology Conference |conference-url=http://www.ieeevtc.org/ |pages=371–375 |doi=10.1109/VETECF.2002.1040367}}</ref> व्यावहारिक रुचि के अनेक अनुप्रयोगों के लिए, उचित ध्वनि स्थितियों के अनुसार, आलसी डिकोडर (लेज़ी विटर्बी एल्गोरिदम का उपयोग करके) मूल [[विटर्बी डिकोडर]] (विटरबी एल्गोरिदम का उपयोग करके) की तुलना में बहुत तेज़ है। जबकि मूल विटरबी एल्गोरिदम संभावित परिणामों के [[ सलाखें (ग्राफ) ]] में प्रत्येक नोड की गणना करता है, लेज़ी विटरबी एल्गोरिदम क्रम में मूल्यांकन करने के लिए नोड्स की प्राथमिकता वाली सूची बनाए रखता है, और आवश्यक गणना की संख्या सामान्यतः सामान्य से कम (और कभी अधिक नहीं) होती है समान परिणाम के लिए विटर्बी एल्गोरिदम। चूँकि, यह इतना आसान नहीं है हार्डवेयर में समानांतरीकरण करने के लिए।
एक वैकल्पिक एल्गोरिथम, [[आलसी विटर्बी एल्गोरिदम|लेज़ी विटर्बी एल्गोरिदम]] प्रस्तावित किया गया है।<ref>{{cite conference|url=http://people.csail.mit.edu/jonfeld/pubs/lazyviterbi.pdf |title=कन्वेन्शनल कोड के लिए एक तेज़ अधिकतम-संभावना डिकोडर|date=December 2002 |conference= Vehicular Technology Conference |conference-url=http://www.ieeevtc.org/ |pages=371–375 |doi=10.1109/VETECF.2002.1040367}}</ref> व्यावहारिक रुचि के अनेक अनुप्रयोगों के लिए, उचित ध्वनि स्थितियों के अनुसार, लेज़ी डिकोडर (लेज़ी विटर्बी एल्गोरिदम का उपयोग करके) मूल [[विटर्बी डिकोडर]] (विटरबी एल्गोरिदम का उपयोग करके) की तुलना में बहुत तेज़ होता है। जबकि मूल विटरबी एल्गोरिदम संभावित परिणामों के [[ सलाखें (ग्राफ) |ट्रेलिस (ग्राफ)]] में प्रत्येक नोड की गणना करता है, लेज़ी विटरबी एल्गोरिदम क्रम में मूल्यांकन करने के लिए नोड्स की प्राथमिकता वाली सूची बनाए रखता है, और आवश्यक गणना की संख्या सामान्यतः सामान्य विटरबी एल्गोरिदम की तुलना में कम (और कभी अधिक नहीं) होती है वही समान परिणाम चूँकि, हार्डवेयर में समानांतरीकरण करना यह इतना आसान [स्पष्टीकरण आवश्यक] नहीं है|


== स्यूडोकोड ==
== स्यूडोकोड ==
यह एल्गोरिथम पथ उत्पन्न करता है <math> X=(x_1,x_2,\ldots,x_T) </math>, जो राज्यों का क्रम है <math>x_n \in S=\{s_1,s_2,\dots,s_K\}</math> जो अवलोकन उत्पन्न करते हैं <math> Y=(y_1,y_2,\ldots, y_T) </math> साथ <math>y_n \in  O=\{o_1,o_2,\dots,o_N\}</math>, कहाँ <math>N</math> अवलोकन स्थान में संभावित अवलोकनों की संख्या है <math>O</math>.
यह एल्गोरिथम पथ <math> X=(x_1,x_2,\ldots,x_T) </math> उत्पन्न करता है जो स्थान <math>x_n \in S=\{s_1,s_2,\dots,s_K\}</math> का अनुक्रम है जो <math>y_n \in  O=\{o_1,o_2,\dots,o_N\}</math> के साथ अवलोकन <math> Y=(y_1,y_2,\ldots, y_T) </math> उत्पन्न करते हैं, जहाँ <math>N</math> अवलोकन स्थान <math>O</math> में संभावित अवलोकनों की संख्या है .
 
आकार की दो 2-आयामी तालिकाएँ <math>K \times T</math> निर्मित हैं:
*प्रत्येक तत्व <math>T_1[i,j]</math> का <math>T_1</math> अब तक के सबसे संभावित पथ की संभावना को संग्रहीत करता है <math> \hat{X}=(\hat{x}_1,\hat{x}_2,\ldots,\hat{x}_j) </math> साथ <math>\hat{x}_j=s_i </math> जो उत्पन्न करता है <math> Y=(y_1,y_2,\ldots, y_j)</math>.
*प्रत्येक तत्व <math>T_2[i,j] </math> का <math>T_2 </math> भंडार <math>\hat{x}_{j-1} </math> अब तक के सबसे संभावित पथ में से <math> \hat{X}=(\hat{x}_1,\hat{x}_2,\ldots,\hat{x}_{j-1},\hat{x}_j = s_i)</math> <math>\forall j, 2\leq j \leq T  </math>
तालिका प्रविष्टियाँ <math> T_1[i,j],T_2[i,j]</math> के बढ़ते क्रम से भरे जाते हैं <math>K\cdot j+i </math>:


<math>K \times T</math> आकार की दो 2-आयामी तालिकाएँ निर्मित हैं:
*<math>T_1</math>प्रत्येक तत्व <math>T_1[i,j]</math> का अब तक के सबसे संभावित पथ <math> \hat{X}=(\hat{x}_1,\hat{x}_2,\ldots,\hat{x}_j) </math> की संभावना को <math>\hat{x}_j=s_i </math> के साथ संग्रहीत करता है जो <math> Y=(y_1,y_2,\ldots, y_j)</math> उत्पन्न करता है|
*<math>T_2 </math> में से प्रत्येक तत्व <math>T_2[i,j] </math> अब तक के सबसे संभावित पथ के <math>\hat{x}_{j-1} </math> को संगृहीत करता हैं <math> \hat{X}=(\hat{x}_1,\hat{x}_2,\ldots,\hat{x}_{j-1},\hat{x}_j = s_i)</math> <math>\forall j, 2\leq j \leq T  </math> तालिका प्रविष्टियाँ <math> T_1[i,j],T_2[i,j]</math> <math>K\cdot j+i </math> के बढ़ते क्रम से भरे जाते हैं |
:<math>T_1[i,j]=\max_{k}{(T_1[k,j-1]\cdot A_{ki}\cdot B_{iy_j})} </math>,
:<math>T_1[i,j]=\max_{k}{(T_1[k,j-1]\cdot A_{ki}\cdot B_{iy_j})} </math>,
:<math>T_2[i,j]=\operatorname{argmax}_{k}{(T_1[k,j-1]\cdot A_{ki} \cdot B_{iy_j})} </math>,
:<math>T_2[i,j]=\operatorname{argmax}_{k}{(T_1[k,j-1]\cdot A_{ki} \cdot B_{iy_j})} </math>,


साथ <math>A_{ki}</math> और <math>B_{iy_j}</math> जैसा कि नीचे परिभाषित किया गया है। ध्यान दें कि <math>B_{iy_j}</math> इसे पश्चात् वाली अभिव्यक्ति में प्रकट होने की आवश्यकता नहीं है, क्योंकि यह गैर-नकारात्मक और स्वतंत्र है <math>k</math> और इस प्रकार यह argmax को प्रभावित नहीं करता है।
साथ जैसा कि नीचे परिभाषित हैं <math>A_{ki}</math> और <math>B_{iy_j}</math> के साथ किया गया है। ध्यान दें कि <math>B_{iy_j}</math> इसके पश्चात् कीअभिव्यक्ति में प्रकट होने की आवश्यकता नहीं है, क्योंकि यह गैर-नकारात्मक हैं और <math>k</math> स्वतंत्र है और इस प्रकार यह argmax को प्रभावित नहीं करता है।


;इनपुट:
'''इनपुट'''
* [[अवलोकन स्थान]] <math> O=\{o_1,o_2,\dots,o_N\}</math>,
* [[अवलोकन स्थान]] <math> O=\{o_1,o_2,\dots,o_N\}</math>,
* राज्य स्थान <math> S=\{s_1,s_2,\dots,s_K\} </math>,
* अवस्था स्थान <math> S=\{s_1,s_2,\dots,s_K\} </math>,
* प्रारंभिक संभावनाओं की श्रृंखला <math> \Pi = (\pi_1,\pi_2,\dots,\pi_K)</math> ऐसा है कि <math> \pi_i </math> इसकी संभावना को संग्रहीत करता है <math> x_1 = s_i </math>,
* प्रारंभिक संभावनाओं की श्रृंखला <math> \Pi = (\pi_1,\pi_2,\dots,\pi_K)</math> ऐसा है कि <math> \pi_i </math> इसकी संभावना को संग्रहीत करता है कि <math> x_1 = s_i </math>,
* अवलोकनों का क्रम <math> Y=(y_1,y_2,\ldots, y_T) </math> ऐसा है कि <math> y_t=o_i </math> यदि समय पर अवलोकन <math> t </math> है <math> o_i </math>,
* अवलोकनों का क्रम <math> Y=(y_1,y_2,\ldots, y_T) </math>इस प्रकार हैं कि <math> y_t=o_i </math> यदि समय <math> t </math> पर अवलोकन <math> o_i </math> है <math> o_i </math>,
* [[स्टोकेस्टिक मैट्रिक्स]] <math> A </math> आकार का <math> K\times K </math> ऐसा है कि <math> A_{ij} </math> राज्य से पारगमन की [[संक्रमण संभावना]] को संग्रहीत करता है <math> s_i </math> कहना <math> s_j </math>,
*[[स्टोकेस्टिक मैट्रिक्स]] आकार <math> K\times K </math> का [[संक्रमण संभावना]] <math> A </math> ऐसा है कि <math> A_{ij} </math> स्थान <math> s_i </math> से स्थान <math> s_j </math>तक पारगमन की को संग्रहीत करता है
* हिडन मार्कोव मॉडल <math> B </math> आकार का <math> K\times N </math> ऐसा है कि <math> B_{ij} </math> अवलोकन की संभावना को संग्रहीत करता है <math> o_j </math> राज्य से <math> s_i </math>.
*हिडन मार्कोव मॉडल आकार <math> K\times N </math> का उत्सर्जन मैट्रिक्स <math> B </math> ऐसा है कि <math> B_{ij} </math> स्थान <math> s_i </math>से <math> o_j </math> देखने की संभावना संग्रहीत करता है।


;आउटपुट
;आउटपुट
* सबसे संभावित छिपा हुआ राज्य क्रम <math> X=(x_1,x_2,\ldots,x_T) </math>
* सबसे संभावित छिपा हुआ अवस्था क्रम <math> X=(x_1,x_2,\ldots,x_T) </math>
 
 
 
फलन ''VITERBI''<math>(O,S,\Pi,Y,A,B):X</math>
फलन ''VITERBI''<math>(O,S,\Pi,Y,A,B):X</math>
प्रत्येक राज्य के लिए <math>i=1,2,\ldots,K</math> करना        
 
प्रत्येक स्थान के लिए <math>i=1,2,\ldots,K</math> करना    
<math>T_1[i,1]\leftarrow\pi_i\cdot B_{iy_1}</math>
<math>T_1[i,1]\leftarrow\pi_i\cdot B_{iy_1}</math>
        <math>T_2[i,1]\leftarrow  0</math>
    <math>T_2[i,1]\leftarrow  0</math>
के लिए समाप्त
के लिए समाप्त
    प्रत्येक अवलोकन के लिए <math>j = 2,3,\ldots,T</math> करना
  प्रत्येक अवलोकन के लिए <math>j = 2,3,\ldots,T</math> करना
        प्रत्येक राज्य के लिए <math>i =1,2,\ldots,K</math> करना            
    प्रत्येक स्थान के लिए <math>i =1,2,\ldots,K</math> करना      
{{nowrap|<math>T_1[i,j] \gets \max_{k}{(T_1[k,j-1]\cdot A_{ki} \cdot B_{iy_j})} </math>}}            
{{nowrap|<math>T_1[i,j] \gets \max_{k}{(T_1[k,j-1]\cdot A_{ki} \cdot B_{iy_j})} </math>}}      
{{nowrap|<math>T_2[i,j] \gets \arg\max_{k}{(T_1[k,j-1]\cdot A_{ki} \cdot B_{iy_j}) } </math>}}
{{nowrap|<math>T_2[i,j] \gets \arg\max_{k}{(T_1[k,j-1]\cdot A_{ki} \cdot B_{iy_j}) } </math>}}
        के लिए समाप्त
    के लिए समाप्त
    के लिए समाप्त    
  के लिए समाप्त  
{{nowrap|<math>z_T \gets \arg\max_{k}{(T_1[k,T])} </math>}}    
{{nowrap|<math>z_T \gets \arg\max_{k}{(T_1[k,T])} </math>}}  
<math>x_T\leftarrow s_{z_T}</math>
<math>x_T\leftarrow s_{z_T}</math>
के लिए <math>j=T,T-1,\ldots,2</math> करना        
 
के लिए <math>j=T,T-1,\ldots,2</math> करना    
 
<math>z_{j-1}\leftarrow T_2[z_j,j]</math>
<math>z_{j-1}\leftarrow T_2[z_j,j]</math>
        <math>x_{j-1}\leftarrow s_{z_{j-1}}</math>
    <math>x_{j-1}\leftarrow s_{z_{j-1}}</math>
के लिए समाप्त
के लिए समाप्त
    वापस करना <math>X</math>
  वापस करना <math>X</math>
अंत फलन
अंत फलन


पाइथॉन (प्रोग्रामिंग भाषा) के निकट संक्षिप्त रूप में पुन: प्रस्तुत:
पाइथॉन (प्रोग्रामिंग भाषा) के निकट संक्षिप्त रूप में पुन: प्रस्तुत:
  फलन ''विटरबी''<math>(O, S, \Pi, Tm, Em): best\_path</math> टीएम: संक्रमण मैट्रिक्स एम: उत्सर्जन मैट्रिक्स    
  फलन ''विटरबी''<math>(O, S, \Pi, Tm, Em): best\_path</math> टीएम: संक्रमण मैट्रिक्स एम: उत्सर्जन मैट्रिक्स  
<math>trellis \leftarrow matrix(length(S), length(O))</math> प्रत्येक अवलोकन को देखते हुए प्रत्येक स्थिति की संभाव्यता बनाए रखना    
<math>trellis \leftarrow matrix(length(S), length(O))</math> प्रत्येक अवलोकन को देखते हुए प्रत्येक स्थिति की संभाव्यता बनाए रखना  
<math>pointers \leftarrow matrix(length(S), length(O))</math> बैकपॉइंटर को सर्वोत्तम पूर्व स्थिति में रखने के लिए
<math>pointers \leftarrow matrix(length(S), length(O))</math> बैकपॉइंटर को सर्वोत्तम पूर्व स्थिति में रखने के लिए
    एस इन के लिए <math>range(length(S))</math>: समय 0 पर प्रत्येक छिपी हुई स्थिति की संभावना निर्धारित करें…        
  एस इन के लिए <math>range(length(S))</math>: समय 0 पर प्रत्येक छिपी हुई स्थिति की संभावना निर्धारित करें…    
<math>trellis[s, 0] \leftarrow \Pi[s] \cdot Em[s, O[0]]</math>
<math>trellis[s, 0] \leftarrow \Pi[s] \cdot Em[s, O[0]]</math>
ओ इन के लिए <math>range(1, length(O))</math>: ...और उसके पश्चात्, प्रत्येक राज्य की सबसे संभावित पूर्व स्थिति पर नज़र रखते हुए, k
ओ इन के लिए <math>range(1, length(O))</math>: ...और उसके पश्चात्, प्रत्येक स्थान की सबसे संभावित पूर्व स्थिति पर नज़र रखते हुए, k
        एस इन के लिए <math>range(length(S))</math>:            
    एस इन के लिए <math>range(length(S))</math>:      
<math>k \leftarrow \arg\max(trellis[k, o-1] \cdot Tm[k, s] \cdot Em[s, o]\ \mathsf{for}\ k\ \mathsf{in}\ range(length(S)))</math>
<math>k \leftarrow \arg\max(trellis[k, o-1] \cdot Tm[k, s] \cdot Em[s, o]\ \mathsf{for}\ k\ \mathsf{in}\ range(length(S)))</math>
            <math>trellis[s, o] \leftarrow trellis[k, o-1] \cdot Tm[k, s] \cdot Em[s, o]</math>
      <math>trellis[s, o] \leftarrow trellis[k, o-1] \cdot Tm[k, s] \cdot Em[s, o]</math>
            <math>pointers[s, o] \leftarrow k</math>
      <math>pointers[s, o] \leftarrow k</math>
    <math>best\_path \leftarrow list()</math>
  <math>best\_path \leftarrow list()</math>
    <math>k \leftarrow \arg\max(trellis[k, length(O)-1]\ \mathsf{for}\ k\ \mathsf{in}\ range(length(S)))</math> सर्वोत्तम अंतिम स्थिति का k ज्ञात करें
  <math>k \leftarrow \arg\max(trellis[k, length(O)-1]\ \mathsf{for}\ k\ \mathsf{in}\ range(length(S)))</math> सर्वोत्तम अंतिम स्थिति का k ज्ञात करें
    ओ इन के लिए <math>range(length(O)-1, -1, -1)</math>: पिछले अवलोकन से पीछे हटें        
  ओ इन के लिए <math>range(length(O)-1, -1, -1)</math>: पिछले अवलोकन से पीछे हटें    
<math>best\_path.insert(0, S[k])</math> सबसे संभावित पथ पर पिछली स्थिति डालें        
<math>best\_path.insert(0, S[k])</math> सबसे संभावित पथ पर पिछली स्थिति डालें    
<math>k \leftarrow pointers[k, o]</math> सर्वोत्तम पिछली स्थिति खोजने के लिए बैकपॉइंटर का उपयोग करें
<math>k \leftarrow pointers[k, o]</math> सर्वोत्तम पिछली स्थिति खोजने के लिए बैकपॉइंटर का उपयोग करें
    वापस करना <math>best\_path</math>
  वापस करना <math>best\_path</math>
;व्याख्या:
;
मान लीजिए हमें राज्य स्थान के साथ छिपा हुआ मार्कोव मॉडल (एचएमएम) दिया गया है <math>S</math>, प्रारंभिक संभावनाएँ <math>\pi_i</math> राज्य में होने का <math>i</math> और संक्रमण की संभावनाएँ <math>a_{i,j}</math> राज्य से परिवर्तन का <math>i</math> कहना <math>j</math>. मान लीजिए, हम आउटपुट देखते हैं <math>y_1,\dots, y_T</math>. सबसे संभावित राज्य अनुक्रम <math>x_1,\dots,x_T</math> जो अवलोकन उत्पन्न करता है वह पुनरावृत्ति संबंधों द्वारा दिया जाता है<ref>Xing E, slide 11.</ref>
;व्याख्या
मान लीजिए हमें अवस्था स्थान <math>S</math> के साथ छिपा हुआ मार्कोव मॉडल (एचएमएम) दिया गया है ,स्थान <math>i</math> में होने का प्रारंभिक संभावनाएँ <math>\pi_i</math>और स्थान <math>i</math> से स्थान <math>j</math> में संक्रमण की संभावनाएँ <math>a_{i,j}</math> हैं मान लीजिए हम आउटपुट <math>y_1,\dots, y_T</math>,<math>x_1,\dots,x_T</math> देखते हैं सबसे संभावित स्थिति अनुक्रम जो अवलोकन उत्पन्न करता है, पुनरावृत्ति संबंधों द्वारा दिया गया है <ref>Xing E, slide 11.</ref>
 
:<math>
:<math>
\begin{align}
\begin{align}
Line 83: Line 89:
\end{align}
\end{align}
</math>
</math>
यहाँ <math>V_{t,k}</math> सबसे संभावित स्थिति अनुक्रम की संभावना है <math>\mathrm{P}\big(x_1,\dots,x_t,y_1,\dots, y_t\big)</math> पहले के लिए जिम्मेदार <math>t</math> जो अवलोकन हैं <math>k</math> इसकी अंतिम अवस्था के रूप में। विटर्बी पथ को बैक पॉइंटर्स को सहेजकर पुनः प्राप्त किया जा सकता है जो कि किस स्थिति को याद रखते हैं <math>x</math> दूसरे समीकरण में उपयोग किया गया था। होने देना <math>\mathrm{Ptr}(k,t)</math> वह फलन बनें जो का मान लौटाता है <math>x</math> गणना करते थे <math>V_{t,k}</math> यदि <math>t > 1</math>, या <math>k</math> यदि <math>t=1</math>. तब
यहाँ <math>V_{t,k}</math> सबसे संभावित स्थिति अनुक्रम की संभावना है <math>\mathrm{P}\big(x_1,\dots,x_t,y_1,\dots, y_t\big)</math>जो पहले <math>t</math> अवलोकन के लिए जिम्मेदार हैं जिसकी अंतिम अवस्था <math>k</math> हैं विटर्बी पथ को बैक पॉइंटर्स को सहेजकर पुनः प्राप्त किया जा सकता है जो याद रखता है कि दूसरे समीकरण में किस स्थिति <math>x</math> का उपयोग किया गया था। मानलीजिए <math>\mathrm{Ptr}(k,t)</math> वह फलन है जो <math>x</math> का मान लौटाता है जिसका उपयोग <math>V_{t,k}</math> की गणना करने के लिए किया जाता है यदि <math>t > 1</math> या <math>k</math> यदि <math>t=1</math> हैं तब


:<math>
:<math>
Line 91: Line 97:
\end{align}
\end{align}
</math>
</math>
यहां हम [[arg max]] की मानक परिभाषा का उपयोग कर रहे हैं।
यहां हम [[arg max|आर्ग मैक्स]] की मानक परिभाषा का उपयोग कर रहे हैं।


इस कार्यान्वयन की जटिलता है <math>O(T\times\left|{S}\right|^2)</math>. उत्तम अनुमान तब उपस्थित होता है जब आंतरिक लूप में अधिकतम केवल उन राज्यों पर पुनरावृत्ति करके पाया जाता है जो सीधे वर्तमान स्थिति से जुड़े होते हैं (अर्थात वहां से बढ़त होती है) <math>k</math> को <math>j</math>). फिर अमूर्त विश्लेषण का उपयोग करके कोई यह दिखा सकता है कि जटिलता क्या है <math>O(T\times(\left|{S}\right| + \left|{E}\right|))</math>, कहाँ <math>E</math> ग्राफ़ में किनारों की संख्या है.
इस कार्यान्वयन की जटिलता है <math>O(T\times\left|{S}\right|^2)</math> है| उत्तम अनुमान तब उपस्थित होता है जब आंतरिक लूप में अधिकतम केवल उन स्थान पर पुनरावृत्ति करके पाया जाता है जो सीधे वर्तमान स्थिति से जुड़े होते हैं अर्थात <math>k</math> से <math>j</math> तक बढ़त होती है फिर अमूर्त विश्लेषण का उपयोग करके कोई यह दिखा सकता है कि जटिलता <math>O(T\times(\left|{S}\right| + \left|{E}\right|))</math> है , जहाँ <math>E</math> ग्राफ़ में किनारों की संख्या होती है.|


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


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


छिपी हुई स्थिति (स्वस्थ, बुखार) के साथ अवलोकन (सामान्य, सर्दी, चक्कर आना) छिपे हुए मार्कोव मॉडल (एचएमएम) का निर्माण करते हैं, और इसे पायथन (प्रोग्रामिंग भाषा) में निम्नानुसार दर्शाया जा सकता है:
छिपी हुई स्थिति (स्वस्थ, ज्वर) के साथ अवलोकन (सामान्य, सर्दी, चक्कर आना) छिपे हुए मार्कोव मॉडल (एचएमएम) का निर्माण करते हैं, और इसे पायथन (प्रोग्रामिंग भाषा) में निम्नानुसार दर्शाया जा सकता है:
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
obs = ("normal", "cold", "dizzy")
obs = ("normal", "cold", "dizzy")
Line 114: Line 120:
}
}
</syntaxhighlight>
</syntaxhighlight>
कोड के इस टुकड़े में, <code>start_p</code> डॉक्टर के इस विश्वास का प्रतिनिधित्व करता है कि जब मरीज पहली बार आता है मध्य एचएमएम किस स्थिति में होता है (डॉक्टर केवल इतना जानता है कि मरीज स्वस्थ है)। यहां उपयोग किया गया विशेष संभाव्यता वितरण संतुलन नहीं है, जो (संक्रमण संभावनाओं को देखते हुए) लगभग है <code>{'Healthy': 0.57, 'Fever': 0.43}</code>. <code>transition_p</code> e> अंतर्निहित मार्कोव श्रृंखला में स्वास्थ्य स्थिति में परिवर्तन का प्रतिनिधित्व करता है। इस उदाहरण में, मरीज जो आज स्वस्थ है, उसे कल बुखार होने की केवल 30% संभावना है। <code>emit_p</code> ई> दर्शाता है कि अंतर्निहित स्थिति (स्वस्थ या बुखार) को देखते हुए, प्रत्येक संभावित अवलोकन (सामान्य, सर्दी, या चक्कर आना) की कितनी संभावना है। मरीज जो स्वस्थ है उसके सामान्य अनुभूत करने की 50% संभावना है; जिस व्यक्ति को बुखार है उसे चक्कर आने की संभावना 60% है।
कोड के इस टुकड़े में, <code>स्टार्ट_पी</code> डॉक्टर के इस विश्वास का प्रतिनिधित्व करता है कि जब रोगी पहली बार आता है तब मध्य एचएमएम किस स्थिति में होता है (डॉक्टर केवल इतना जानता है कि रोगी स्वस्थ है)। यहां प्रयुक्त विशेष संभाव्यता वितरण संतुलन वितरण नहीं है, जो (संक्रमण संभावनाओं को देखते हुए) लगभग <code>{'Healthy': 0.57, 'Fever': 0.43}</code>. हैं| <code>transition_p</code> e> अंतर्निहित मार्कोव श्रृंखला में स्वास्थ्य स्थिति में परिवर्तन का प्रतिनिधित्व करता है। इस उदाहरण में, रोगी जो आज स्वस्थ है, उसे कल ज्वर होने की केवल 30% संभावना है। <code>emit_p</code> ई> दर्शाता है कि अंतर्निहित स्थिति (स्वस्थ या ज्वर) को देखते हुए, प्रत्येक संभावित अवलोकन (सामान्य, सर्दी, या चक्कर आना) की कितनी संभावना है। रोगी जो स्वस्थ है उसके सामान्य अनुभूतिि करने की 50% संभावना है; जिस व्यक्ति को ज्वर है उसे चक्कर आने की संभावना 60% है।


[[File:An example of HMM.png|thumb|center|300px|दिए गए एचएमएम का चित्रमय प्रतिनिधित्व]]एक मरीज लगातार तीन दिन दौरा करता है, और डॉक्टर को पता चलता है कि मरीज को पहले दिन सामान्य अनुभूत होता है, दूसरे दिन ठंड लगती है, और तीसरे दिन चक्कर आता है। डॉक्टर का प्रश्न है: रोगी की स्वास्थ्य स्थितियों का सबसे संभावित क्रम क्या है जो इन टिप्पणियों की व्याख्या करेगा? इसका उत्तर विटर्बी एल्गोरिथम द्वारा दिया गया है।
[[File:An example of HMM.png|thumb|center|300px|<nowiki>दिए गए एचएमएम का चित्रमय प्रतिनिधित्व करता हैं|</nowiki>]]एक रोगी लगातार तीन दिन दौरा करता है, और डॉक्टर को पता चलता है कि रोगी को पहले दिन सामान्य अनुभूति होती है, दूसरे दिन ठंड लगती है, और तीसरे दिन चक्कर आता है। डॉक्टर का प्रश्न है: रोगी की स्वास्थ्य स्थितियों का सबसे संभावित क्रम क्या है जो इन टिप्पणियों की व्याख्या करेगा? इसका उत्तर विटर्बी एल्गोरिथम द्वारा दिया गया है।


<सिंटैक्सहाइलाइट लैंग=पायथन लाइन=1 >
<syntaxhighlight>
डीईएफ़ विटरबी(अवलोकन, स्थिति, प्रारंभ_पी, ट्रांस_पी, एमिट_पी):
def viterbi(obs, states, start_p, trans_p, emit_p):
     वी = [{}]
     V = [{}]
     राज्यों में अनुसूचित जनजाति के लिए:
     for st in states:
         वी[0] [एसटी] = {संभावना: प्रारंभ_पी[एसटी] * एमिट_पी[एसटी] [अवलोकन[0, पिछला: कोई नहीं}
         V[0] [st] = {"prob": start_p[st] * emit_p[st] [obs[0]], "prev": None}
     # जब t > 0 हो मध्य Viterbi चलाएँ
     # Run Viterbi when t > 0
     रेंज में टी के लिए (1, लेन (ओब्स)):
     for t in range(1, len(obs)):
         वी.संलग्न करें({})
         V.append({})
         राज्यों में अनुसूचित जनजाति के लिए:
         for st in states:
             max_tr_prob = V[t - 1] [राज्य[0 [prob] * trans_p[राज्य[0 [st] * emotional_p[st] [obs[t]
             max_tr_prob = V[t - 1] [states[0]] ["prob"] * trans_p[states[0]] [st] * emit_p[st] [obs[t]]
             prev_st_selected = स्थितियाँ[0]
             prev_st_selected = states[0]
             राज्यों में prev_st के लिए[1:]:
             for prev_st in states[1:]:
                 tr_prob = V[t - 1] [prev_st] [prob ] * trans_p[prev_st] [st] * edit_p[st] [obs[t
                 tr_prob = V[t - 1] [prev_st] ["prob"] * trans_p[prev_st] [st] * emit_p[st] [obs[t]]
                 यदि tr_prob > max_tr_prob:
                 if tr_prob > max_tr_prob:
                     max_tr_prob = tr_prob
                     max_tr_prob = tr_prob
                     prev_st_selected = prev_st
                     prev_st_selected = prev_st


             max_prob = max_tr_prob
             max_prob = max_tr_prob
             V[t] [st] = {संभावना: max_prob, पिछला: prev_st_selected}
             V[t] [st] = {"prob": max_prob, "prev": prev_st_selected}


     dptable(V) में लाइन के लिए:
     for line in dptable(V):
         प्रिंट(लाइन)
         print(line)


     ऑप्ट = []
     opt = []
     अधिकतम_प्रोब = 0.0
     max_prob = 0.0
     best_st = कोई नहीं
     best_st = None
     # सबसे संभावित स्थिति और उसका बैकट्रैक प्राप्त करें
     # Get most probable state and its backtrack
     सेंट के लिए, V[-1].आइटम() में डेटा:
     for st, data in V[-1].items():
         यदि डेटा[ समस्या ] > max_prob:
         if data["prob"] > max_prob:
             max_prob = डेटा[संभावना]
             max_prob = data["prob"]
             best_st = st
             best_st = st
     ऑप्ट.एपेंड(best_st)
     opt.append(best_st)
     पिछला = best_st
     previous = best_st


     # पहले अवलोकन तक बैकट्रैक का पालन करें
     # Follow the backtrack till the first observation
     रेंज में टी के लिए (लेन (वी) - 2, -1, -1):
     for t in range(len(V) - 2, -1, -1):
         opt.insert(0, V[t + 1] [पिछला] [पिछला])
         opt.insert(0, V[t + 1] [previous] ["prev"])
         पिछला = वी[टी + 1] [पिछला] [पिछला]
         previous = V[t + 1] [previous] ["prev"]


     प्रिंट करें (राज्यों के चरण + .join(opt) + %s % max_prob की उच्चतम संभावना के साथ हैं)
     print ("The steps of states are " + " ".join(opt) + " with highest probability of %s" % max_prob)


डीईएफ़ डीपीटेबल(वी):
def dptable(V):
     # शब्दकोश से चरणों की तालिका प्रिंट करें
     # Print a table of steps from dictionary
     उपज * 5 + .join(( %3dd% i) i के लिए रेंज में(len(V)))
     yield " " * 5 + "    ".join(("%3d" % i) for i in range(len(V)))
     V[0] में राज्य के लिए:
     for state in V[0]:
         उपज�%.7s:7% स्थिति + .join( .7s.% ( %lf%% v[state] [prob ]) for v in V)
         yield "%.7s: " % state + " ".join("%.7s" % ("%lf" % v[state] ["prob"]) for v in V)
</सिंटैक्सहाइलाइट>
</syntaxhighlight>
कार्यक्रम <code>viterbi</code> निम्नलिखित तर्क लेता है: <code>obs</code> अवलोकनों का क्रम है, उदा. <code>['normal', 'cold', 'dizzy']</code>; <code>states</code> छिपी हुई अवस्थाओं का समूह है; <code>start_p</code> प्रारंभ संभावना है; <code>trans_p</code> संक्रमण संभावनाएँ हैं; और <code>emit_p</code> उत्सर्जन संभावनाएँ हैं। कोड की सरलता के लिए, हम मानते हैं कि अवलोकन अनुक्रम <code>obs</code> गैर-रिक्त है और वह  <code>trans_p[i] [j]</code> और <code>emit_p[i] [j]</code> सभी राज्यों i,j के लिए परिभाषित किया गया है।
 
चल रहे उदाहरण में, फ़ॉरवर्ड/विटर्बी एल्गोरिदम का उपयोग निम्नानुसार किया जाता है:


<syntaxhighlight lang="python">
viterbi(obs,
        states,
        start_p,
        trans_p,
        emit_p)


</syntaxhighlight>
इससे पता चलता है कि अवलोकन <code>['normal', 'cold', 'dizzy']</code> संभवतः स्थान <code>['Healthy', 'Healthy', 'Fever']</code>. द्वारा उत्पन्न किए गए थे दूसरे शब्दों में, देखी गई गतिविधियों को देखते हुए, रोगी के पहले दिन और दूसरे दिन भी स्वस्थ रहने की संभावना थी (उस दिन ठंड अनुभूति होने के अतिरिक्त), और केवल तीसरे दिन ज्वर होने की संभावना थी।
स्क्रिप्ट का आउटपुट है
 
<syntaxhighlight lang="console">
$ python viterbi_example.py
        0          1          2
Healthy: 0.30000 0.08400 0.00588
Fever: 0.04000 0.02700 0.01512
The steps of states are Healthy Healthy Fever with highest probability of 0.01512
</syntaxhighlight>
इससे पता चलता है कि अवलोकन <code>['normal', 'cold', 'dizzy']</code> संभवतः राज्यों द्वारा उत्पन्न किए गए थे <code>['Healthy', 'Healthy', 'Fever']</code>. दूसरे शब्दों में, देखी गई गतिविधियों को देखते हुए, रोगी के पहले दिन और दूसरे दिन भी स्वस्थ रहने की संभावना थी (उस दिन ठंड अनुभूत होने के अतिरिक्त), और केवल तीसरे दिन बुखार होने की संभावना थी।


विटर्बी के एल्गोरिदम के संचालन को इसके माध्यम से देखा जा सकता है
विटर्बी के एल्गोरिदम के संचालन को इसके लिस आरेख के माध्यम से देखा जा सकता है। विटर्बी पथ अनिवार्य रूप से इस जाली के माध्यम से सबसे छोटा रास्ता है।
ट्रेलिस आरेख#ट्रेलिस आरेख। विटर्बी पथ मूलतः सबसे छोटा है
इस जाली के माध्यम से पथ.


== सॉफ्ट आउटपुट विटर्बी एल्गोरिदम ==
== सॉफ्ट आउटपुट विटर्बी एल्गोरिदम ==
सॉफ्ट आउटपुट विटर्बी एल्गोरिदम (SOVA) क्लासिकल विटर्बी एल्गोरिदम का प्रकार है।
सॉफ्ट आउटपुट विटर्बी एल्गोरिदम (सोवा) क्लासिकल विटर्बी एल्गोरिदम का प्रकार होता है।


SOVA मौलिक विटरबी एल्गोरिदम से इस मायने में भिन्न है कि यह संशोधित पथ मीट्रिक का उपयोग करता है जो इनपुट प्रतीकों की प्राथमिक संभाव्यता| ''फैसले का.
सोवा मौलिक विटरबी एल्गोरिदम से इस मायने में भिन्न है कि यह संशोधित पथ मीट्रिक का उपयोग करता है जो इनपुट प्रतीकों की प्राथमिक संभावनाओं को ध्यान में रखता है, और निर्णय की विश्वसनीयता को संकेत करने वाला नरम आउटपुट उत्पन्न करता है।


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


यह ''निवेश'' पूरी स्लाइडिंग विंडो (सामान्यतः ''कम से कम'' पांच बाधा लंबाई के सामान्तर) पर जमा होती है, ''हार्ड बिट निर्णय'' की विश्वसनीयता के ''सॉफ्ट आउटपुट'' माप को इंगित करने के लिए विटर्बी एल्गोरिदम.
विटर्बी एल्गोरिदम के हार्ड बिट निर्णय की विश्वसनीयता के नरम आउटपुट माप को इंगित करने के लिए, यह निवेश पूरी स्लाइडिंग विंडो (सामान्यतः कम से कम पांच बाधा लंबाई के बराबर) पर जमा होती है।


== यह भी देखें ==
== यह भी देखें ==
Line 209: Line 194:
* विटर्बी डिकोडर
* विटर्बी डिकोडर
* हिडन मार्कोव मॉडल
* हिडन मार्कोव मॉडल
* भाषण का भाग टैगिंग
* पार्टऑफ़ स्पीच टैगिंग
*[[ए* खोज एल्गोरिदम]]
*[[ए* खोज एल्गोरिदम]]


Line 236: Line 221:
=== कार्यान्वयन ===
=== कार्यान्वयन ===
* [https://reference.wolfram.com/langage/ref/FindHiddenMarkovStates.html Mathematica] में स्टोकेस्टिक प्रक्रियाओं के समर्थन के हिस्से के रूप में कार्यान्वयन है
* [https://reference.wolfram.com/langage/ref/FindHiddenMarkovStates.html Mathematica] में स्टोकेस्टिक प्रक्रियाओं के समर्थन के हिस्से के रूप में कार्यान्वयन है
* [http://libsusa.org/ Susa] सिग्नल प्रोसेसिंग फ्रेमवर्क [[ आगे त्रुटि सुधार ]] कोड और चैनल इक्वलाइजेशन के लिए C++ कार्यान्वयन प्रदान करता है [https://github.com/libsusa/susa/blob/master/inc/susa/channel। ज यहाँ].
* [http://libsusa.org/ Susa] सिग्नल प्रोसेसिंग फ्रेमवर्क [[ आगे त्रुटि सुधार |आगे त्रुटि सुधार]] कोड और चैनल इक्वलाइजेशन के लिए C++ कार्यान्वयन प्रदान करता है [https://github.com/libsusa/susa/blob/master/inc/susa/channel। ज यहाँ].
* [https://github.com/xukmin/viterbi C++]
* [https://github.com/xukmin/viterbi C++]
* [http://pcarvalho.com/forward_viterbi/ C#]
* [http://pcarvalho.com/forward_viterbi/ C#]

Revision as of 17:38, 13 July 2023

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

एल्गोरिदम ने सीडीएमए और जीएसएम डिजिटल सेल्युलर, डायल -अप मॉडेम, सैटेलाइट, डीप-स्पेस संचार और 802.11 वायरलेस लैन दोनों में उपयोग किए जाने वाले कन्वोल्यूशनल कोड को डिकोड करने में सार्वभौमिक अनुप्रयोग पाया जाता है। अब इसका उपयोग सामान्यतः वाक् पहचान, वाक् संश्लेषण, डायरीकरण, कीवर्ड स्पॉटिंग, कम्प्यूटेशनल भाषाविज्ञान, और जैव सूचना विज्ञान में भी किया जाता है।[1] उदाहरण के लिए, वाक्-से-पाठ (वाक् पहचान) में, ध्वनिक संकेत को घटनाओं के देखे गए अनुक्रम के रूप में माना जाता है, और पाठ की शृंखला को ध्वनिक संकेत का छिपा हुआ कारण माना जाता है। विटरबी एल्गोरिदम ध्वनिक संकेत दिए जाने पर पाठ की सबसे संभावित शृंखला ढूंढता है।

इतिहास

विटर्बी एल्गोरिदम का नाम एंड्रयू विटेर्बी के नाम पर रखा गया है, जिन्होंने 1967 में इसे ध्वनि वाले डिजिटल संचार लिंक पर कनवल्शन कोड के लिए डिकोडिंग एल्गोरिदम के रूप में प्रस्तावित किया था।[2] चूँकि, इसमें अनेक आविष्कारों का इतिहास है, जिसमें कम से कम सात स्वतंत्र खोजें सम्मिलित हैं, जिनमें विटर्बी, नीडलमैन-वुन्श एल्गोरिदम और वैगनर-फिशर एल्गोरिदम सम्मिलित हैं।[3] इसे 1987 की प्रारंभ में भाषण का भाग टैगिंग की विधि के रूप में प्राकृतिक भाषा प्रसंस्करण में प्रस्तुत किया गया था।

संभावनाओं से जुड़ी समस्याओं को अधिकतम करने के लिए गतिशील प्रोग्रामिंग एल्गोरिदम के अनुप्रयोग के लिए विटर्बी पथ और विटरबी एल्गोरिदम मानक शब्द बन गए हैं।[3] उदाहरण के लिए, सांख्यिकीय पार्सिंग में शृंखला के एकल सबसे संभावित संदर्भ-मुक्त व्युत्पत्ति (पार्स) की खोज के लिए गतिशील प्रोग्रामिंग एल्गोरिदम का उपयोग किया जा सकता है, जिसे सामान्यतः विटर्बी पार्स कहा जाता है।[4][5][6] अन्य अनुप्रयोग ऑप्टिकल मोशन ट्रैकिंग में है, जहां ट्रैक की गणना की जाती है जो अवलोकनों के अनुक्रम को अधिकतम संभावना प्रदान करता है।[7]

एक्सटेंशन

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

पुनरावृत्त विटरबी डिकोडिंग नामक एल्गोरिदम के साथ कोई भी अवलोकन के परिणाम को प्राप्त सकता है जो किसी दिए गए छिपे हुए मार्कोव मॉडल से सबसे अच्छा (औसतन) मेल खाता है। यह एल्गोरिदम Qi वांग एट अल द्वारा प्रस्तावित होता है। टर्बो कोड से निपटने के लिए. पुनरावृत्तीय विटरबी डिकोडिंग संशोधित विटरबी एल्गोरिदम को पुनरावृत्त रूप से प्रयुक्त करके काम करता है, अभिसरण तक भराव के लिए स्कोर का पुनर्मूल्यांकन करता है।[8]

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

स्यूडोकोड

यह एल्गोरिथम पथ उत्पन्न करता है जो स्थान का अनुक्रम है जो के साथ अवलोकन उत्पन्न करते हैं, जहाँ अवलोकन स्थान में संभावित अवलोकनों की संख्या है .

आकार की दो 2-आयामी तालिकाएँ निर्मित हैं:

  • प्रत्येक तत्व का अब तक के सबसे संभावित पथ की संभावना को के साथ संग्रहीत करता है जो उत्पन्न करता है|
  • में से प्रत्येक तत्व अब तक के सबसे संभावित पथ के को संगृहीत करता हैं तालिका प्रविष्टियाँ के बढ़ते क्रम से भरे जाते हैं |
,
,

साथ जैसा कि नीचे परिभाषित हैं और के साथ किया गया है। ध्यान दें कि इसके पश्चात् कीअभिव्यक्ति में प्रकट होने की आवश्यकता नहीं है, क्योंकि यह गैर-नकारात्मक हैं और स्वतंत्र है और इस प्रकार यह argmax को प्रभावित नहीं करता है।

इनपुट

  • अवलोकन स्थान ,
  • अवस्था स्थान ,
  • प्रारंभिक संभावनाओं की श्रृंखला ऐसा है कि इसकी संभावना को संग्रहीत करता है कि ,
  • अवलोकनों का क्रम इस प्रकार हैं कि यदि समय पर अवलोकन है ,
  • स्टोकेस्टिक मैट्रिक्स आकार का संक्रमण संभावना ऐसा है कि स्थान से स्थान तक पारगमन की को संग्रहीत करता है
  • हिडन मार्कोव मॉडल आकार का उत्सर्जन मैट्रिक्स ऐसा है कि स्थान से देखने की संभावना संग्रहीत करता है।
आउटपुट
  • सबसे संभावित छिपा हुआ अवस्था क्रम


फलन VITERBI

प्रत्येक स्थान के लिए करना

    

के लिए समाप्त

  प्रत्येक अवलोकन के लिए  करना
    प्रत्येक स्थान के लिए  करना       

    के लिए समाप्त
  के लिए समाप्त   

के लिए करना

    

के लिए समाप्त

  वापस करना 

अंत फलन

पाइथॉन (प्रोग्रामिंग भाषा) के निकट संक्षिप्त रूप में पुन: प्रस्तुत:

फलन विटरबी टीएम: संक्रमण मैट्रिक्स एम: उत्सर्जन मैट्रिक्स   

प्रत्येक अवलोकन को देखते हुए प्रत्येक स्थिति की संभाव्यता बनाए रखना बैकपॉइंटर को सर्वोत्तम पूर्व स्थिति में रखने के लिए

  एस इन के लिए : समय 0 पर प्रत्येक छिपी हुई स्थिति की संभावना निर्धारित करें…     

ओ इन के लिए : ...और उसके पश्चात्, प्रत्येक स्थान की सबसे संभावित पूर्व स्थिति पर नज़र रखते हुए, k

    एस इन के लिए :       

      
      
  
   सर्वोत्तम अंतिम स्थिति का k ज्ञात करें
  ओ इन के लिए : पिछले अवलोकन से पीछे हटें     

सबसे संभावित पथ पर पिछली स्थिति डालें सर्वोत्तम पिछली स्थिति खोजने के लिए बैकपॉइंटर का उपयोग करें

  वापस करना 
व्याख्या

मान लीजिए हमें अवस्था स्थान के साथ छिपा हुआ मार्कोव मॉडल (एचएमएम) दिया गया है ,स्थान में होने का प्रारंभिक संभावनाएँ और स्थान से स्थान में संक्रमण की संभावनाएँ हैं मान लीजिए हम आउटपुट , देखते हैं सबसे संभावित स्थिति अनुक्रम जो अवलोकन उत्पन्न करता है, पुनरावृत्ति संबंधों द्वारा दिया गया है [10]

यहाँ सबसे संभावित स्थिति अनुक्रम की संभावना है जो पहले अवलोकन के लिए जिम्मेदार हैं जिसकी अंतिम अवस्था हैं विटर्बी पथ को बैक पॉइंटर्स को सहेजकर पुनः प्राप्त किया जा सकता है जो याद रखता है कि दूसरे समीकरण में किस स्थिति का उपयोग किया गया था। मानलीजिए वह फलन है जो का मान लौटाता है जिसका उपयोग की गणना करने के लिए किया जाता है यदि या यदि हैं तब

यहां हम आर्ग मैक्स की मानक परिभाषा का उपयोग कर रहे हैं।

इस कार्यान्वयन की जटिलता है है| उत्तम अनुमान तब उपस्थित होता है जब आंतरिक लूप में अधिकतम केवल उन स्थान पर पुनरावृत्ति करके पाया जाता है जो सीधे वर्तमान स्थिति से जुड़े होते हैं अर्थात से तक बढ़त होती है फिर अमूर्त विश्लेषण का उपयोग करके कोई यह दिखा सकता है कि जटिलता है , जहाँ ग्राफ़ में किनारों की संख्या होती है.|

उदाहरण

ऐसे गांव पर विचार करें जहां सभी ग्रामीण या मध्य स्वस्थ हैं या उन्हें ज्वर है, और केवल गांव का डॉक्टर ही यह निर्धारित कर सकता है कि प्रत्येक को ज्वर है या नहीं। डॉक्टर रोगीों से यह पूछकर ज्वर का निदान करते हैं कि उन्हें कैसी अनुभूतिि हो रही है। ग्रामीण केवल यही उत्तर दे सकते हैं कि उन्हें सामान्य, चक्कर या ठंड लग रही है।

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

छिपी हुई स्थिति (स्वस्थ, ज्वर) के साथ अवलोकन (सामान्य, सर्दी, चक्कर आना) छिपे हुए मार्कोव मॉडल (एचएमएम) का निर्माण करते हैं, और इसे पायथन (प्रोग्रामिंग भाषा) में निम्नानुसार दर्शाया जा सकता है:

obs = ("normal", "cold", "dizzy")
states = ("Healthy", "Fever")
start_p = {"Healthy": 0.6, "Fever": 0.4}
trans_p = {
    "Healthy": {"Healthy": 0.7, "Fever": 0.3},
    "Fever": {"Healthy": 0.4, "Fever": 0.6},
}
emit_p = {
    "Healthy": {"normal": 0.5, "cold": 0.4, "dizzy": 0.1},
    "Fever": {"normal": 0.1, "cold": 0.3, "dizzy": 0.6},
}

कोड के इस टुकड़े में, स्टार्ट_पी डॉक्टर के इस विश्वास का प्रतिनिधित्व करता है कि जब रोगी पहली बार आता है तब मध्य एचएमएम किस स्थिति में होता है (डॉक्टर केवल इतना जानता है कि रोगी स्वस्थ है)। यहां प्रयुक्त विशेष संभाव्यता वितरण संतुलन वितरण नहीं है, जो (संक्रमण संभावनाओं को देखते हुए) लगभग {'Healthy': 0.57, 'Fever': 0.43}. हैं| transition_p e> अंतर्निहित मार्कोव श्रृंखला में स्वास्थ्य स्थिति में परिवर्तन का प्रतिनिधित्व करता है। इस उदाहरण में, रोगी जो आज स्वस्थ है, उसे कल ज्वर होने की केवल 30% संभावना है। emit_p ई> दर्शाता है कि अंतर्निहित स्थिति (स्वस्थ या ज्वर) को देखते हुए, प्रत्येक संभावित अवलोकन (सामान्य, सर्दी, या चक्कर आना) की कितनी संभावना है। रोगी जो स्वस्थ है उसके सामान्य अनुभूतिि करने की 50% संभावना है; जिस व्यक्ति को ज्वर है उसे चक्कर आने की संभावना 60% है।

दिए गए एचएमएम का चित्रमय प्रतिनिधित्व करता हैं|

एक रोगी लगातार तीन दिन दौरा करता है, और डॉक्टर को पता चलता है कि रोगी को पहले दिन सामान्य अनुभूति होती है, दूसरे दिन ठंड लगती है, और तीसरे दिन चक्कर आता है। डॉक्टर का प्रश्न है: रोगी की स्वास्थ्य स्थितियों का सबसे संभावित क्रम क्या है जो इन टिप्पणियों की व्याख्या करेगा? इसका उत्तर विटर्बी एल्गोरिथम द्वारा दिया गया है।

def viterbi(obs, states, start_p, trans_p, emit_p):
    V = [{}]
    for st in states:
        V[0] [st] = {"prob": start_p[st] * emit_p[st] [obs[0]], "prev": None}
    # Run Viterbi when t > 0
    for t in range(1, len(obs)):
        V.append({})
        for st in states:
            max_tr_prob = V[t - 1] [states[0]] ["prob"] * trans_p[states[0]] [st] * emit_p[st] [obs[t]]
            prev_st_selected = states[0]
            for prev_st in states[1:]:
                tr_prob = V[t - 1] [prev_st] ["prob"] * trans_p[prev_st] [st] * emit_p[st] [obs[t]]
                if tr_prob > max_tr_prob:
                    max_tr_prob = tr_prob
                    prev_st_selected = prev_st

            max_prob = max_tr_prob
            V[t] [st] = {"prob": max_prob, "prev": prev_st_selected}

    for line in dptable(V):
        print(line)

    opt = []
    max_prob = 0.0
    best_st = None
    # Get most probable state and its backtrack
    for st, data in V[-1].items():
        if data["prob"] > max_prob:
            max_prob = data["prob"]
            best_st = st
    opt.append(best_st)
    previous = best_st

    # Follow the backtrack till the first observation
    for t in range(len(V) - 2, -1, -1):
        opt.insert(0, V[t + 1] [previous] ["prev"])
        previous = V[t + 1] [previous] ["prev"]

    print ("The steps of states are " + " ".join(opt) + " with highest probability of %s" % max_prob)

def dptable(V):
    # Print a table of steps from dictionary
    yield " " * 5 + "     ".join(("%3d" % i) for i in range(len(V)))
    for state in V[0]:
        yield "%.7s: " % state + " ".join("%.7s" % ("%lf" % v[state] ["prob"]) for v in V)


इससे पता चलता है कि अवलोकन ['normal', 'cold', 'dizzy'] संभवतः स्थान ['Healthy', 'Healthy', 'Fever']. द्वारा उत्पन्न किए गए थे दूसरे शब्दों में, देखी गई गतिविधियों को देखते हुए, रोगी के पहले दिन और दूसरे दिन भी स्वस्थ रहने की संभावना थी (उस दिन ठंड अनुभूति होने के अतिरिक्त), और केवल तीसरे दिन ज्वर होने की संभावना थी।

विटर्बी के एल्गोरिदम के संचालन को इसके लिस आरेख के माध्यम से देखा जा सकता है। विटर्बी पथ अनिवार्य रूप से इस जाली के माध्यम से सबसे छोटा रास्ता है।

सॉफ्ट आउटपुट विटर्बी एल्गोरिदम

सॉफ्ट आउटपुट विटर्बी एल्गोरिदम (सोवा) क्लासिकल विटर्बी एल्गोरिदम का प्रकार होता है।

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

सोवा में पहला कदम उत्तरजीवी पथ का चयन करना है, जो प्रत्येक समय तत्काल अद्वितीय नोड, t से होकर गुजरता है। चूँकि प्रत्येक नोड में 2 शाखाएँ एकत्रित होती हैं (एक शाखा को सर्वाइवर पाथ बनाने के लिए चुना जाता है, और दूसरी को छोड़ दिया जाता है), चुनी गई और छोड़ी गई शाखाओं के मध्य शाखा आव्युह (या निवेश) में अंतर त्रुटि की मात्रा को दर्शाता है। विकल्प।

विटर्बी एल्गोरिदम के हार्ड बिट निर्णय की विश्वसनीयता के नरम आउटपुट माप को इंगित करने के लिए, यह निवेश पूरी स्लाइडिंग विंडो (सामान्यतः कम से कम पांच बाधा लंबाई के बराबर) पर जमा होती है।

यह भी देखें

संदर्भ

  1. Xavier Anguera et al., "Speaker Diarization: A Review of Recent Research", retrieved 19. August 2010, IEEE TASLP
  2. 29 Apr 2005, G. David Forney Jr: The Viterbi Algorithm: A Personal History
  3. 3.0 3.1 Daniel Jurafsky; James H. Martin. भाषण और भाषा प्रसंस्करण. Pearson Education International. p. 246.
  4. Schmid, Helmut (2004). बिट वैक्टर के साथ अत्यधिक अस्पष्ट संदर्भ-मुक्त व्याकरण का कुशल विश्लेषण (PDF). Proc. 20th Int'l Conf. on Computational Linguistics (COLING). doi:10.3115/1220355.1220379.
  5. Klein, Dan; Manning, Christopher D. (2003). A* parsing: fast exact Viterbi parse selection (PDF). Proc. 2003 Conf. of the North American Chapter of the Association for Computational Linguistics on Human Language Technology (NAACL). pp. 40–47. doi:10.3115/1073445.1073461.
  6. Stanke, M.; Keller, O.; Gunduz, I.; Hayes, A.; Waack, S.; Morgenstern, B. (2006). "AUGUSTUS: Ab initio prediction of alternative transcripts". Nucleic Acids Research. 34 (Web Server issue): W435–W439. doi:10.1093/nar/gkl200. PMC 1538822. PMID 16845043.
  7. Quach, T.; Farooq, M. (1994). "Maximum Likelihood Track Formation with the Viterbi Algorithm". Proceedings of 33rd IEEE Conference on Decision and Control. Vol. 1. pp. 271–276. doi:10.1109/CDC.1994.410918.{{cite conference}}: CS1 maint: multiple names: authors list (link)
  8. Qi Wang; Lei Wei; Rodney A. Kennedy (2002). "उच्च-दर समता-संक्षिप्त टीसीएम के लिए पुनरावृत्त विटरबी डिकोडिंग, ट्रेलिस शेपिंग और बहुस्तरीय संरचना". IEEE Transactions on Communications. 50: 48–55. doi:10.1109/26.975743.
  9. कन्वेन्शनल कोड के लिए एक तेज़ अधिकतम-संभावना डिकोडर (PDF). Vehicular Technology Conference. December 2002. pp. 371–375. doi:10.1109/VETECF.2002.1040367.
  10. Xing E, slide 11.


सामान्य संदर्भ

  • Viterbi AJ (April 1967). "कनवल्शनल कोड के लिए त्रुटि सीमाएं और एक एसिम्प्टोटिक रूप से इष्टतम डिकोडिंग एल्गोरिदम". IEEE Transactions on Information Theory. 13 (2): 260–269. doi:10.1109/TIT.1967.1054010. (नोट: विटर्बी डिकोडिंग एल्गोरिदम अनुभाग IV में वर्णित है।) सदस्यता आवश्यक है।
  • Feldman J, Abou-Faycal I, Frigo M (2002). "A Fast Maximum-Likelihood Decoder for Convolutional Codes". कार्यवाही आईईईई 56वें ​​वाहन प्रौद्योगिकी सम्मेलन. pp. 371–375. CiteSeerX 10.1.1.114.1314. doi:10.1109/VETECF.2002.1040367. ISBN 978-0-7803-7467-6. S2CID 9783963. {{cite book}}: |journal= ignored (help); zero width space character in |title= at position 23 (help)
  • Forney GD (March 1973). "विटरबी एल्गोरिदम". Proceedings of the IEEE. 61 (3): 268–278. doi:10.1109/PROC.1973.9030. सदस्यता आवश्यक है.
  • Press, WH; Teukolsky, SA; Vetterling, WT; Flannery, BP (2007). "Section 16.2. Viterbi Decoding". संख्यात्मक व्यंजन विधि: वैज्ञानिक कंप्यूटिंग की कला (3rd ed.). New York: Cambridge University Press. ISBN 978-0-521-88068-8.
  • Rabiner LR (February 1989). "छिपे हुए मार्कोव मॉडल और वाक् पहचान में चयनित अनुप्रयोगों पर एक ट्यूटोरियल". Proceedings of the IEEE. 77 (2): 257–286. CiteSeerX 10.1.1.381.3454. doi:10.1109/5.18626. S2CID 13618539. (एचएमएम के लिए फॉरवर्ड एल्गोरिदम और विटर्बी एल्गोरिदम का वर्णन करता है)।
  • शिंगल, आर. और गॉडफ्राइड टूसेंट|गॉडफ्राइड टी. टूसेंट, संशोधित विटरबी एल्गोरिदम के साथ पाठ पहचान में प्रयोग, पैटर्न विश्लेषण और मशीन इंटेलिजेंस पर आईईईई लेनदेन, वॉल्यूम। पीएएमआई-एल, अप्रैल 1979, पृ. 184-193।
  • शिंगल, आर. और गॉडफ्राइड टूसेंट|गॉडफ्राइड टी. टूसेंट, स्रोत सांख्यिकी के लिए संशोधित विटर्बी एल्गोरिदम की संवेदनशीलता, पैटर्न विश्लेषण और मशीन इंटेलिजेंस पर आईईईई लेनदेन, वॉल्यूम। पीएएमआई-2, मार्च 1980, पृ. 181-185।

बाहरी संबंध



कार्यान्वयन

श्रेणी:त्रुटि का पता लगाना और सुधार करना श्रेणी:गतिशील प्रोग्रामिंग श्रेणी:मार्कोव मॉडल श्रेणी: पायथन (प्रोग्रामिंग भाषा) कोड के उदाहरण वाले लेख