विटर्बी एल्गोरिदम: Difference between revisions
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}} | ||
विटर्बी [[कलन विधि]] छिपे हुए स्थान के सबसे अधिक संभावना वाले फलन अनुक्रम का अधिकतम पोस्टीरियर अनुमान प्राप्त करने के लिए [[गतिशील प्रोग्रामिंग]] एल्गोरिदम है - जिसे विटरबी पथ कहा जाता है - जिसके | विटर्बी [[कलन विधि]] छिपे हुए स्थान के सबसे अधिक संभावना वाले फलन अनुक्रम का अधिकतम पोस्टीरियर अनुमान प्राप्त करने के लिए [[गतिशील प्रोग्रामिंग]] एल्गोरिदम होता है - जिसे विटरबी पथ कहा जाता है - जिसके परिणाम स्वरूप देखी गई घटनाओं का अनुक्रम होता रहता है,इस प्रकार विशेष रूप से [[मार्कोव सूचना स्रोत|मार्कोव सूचना]] स्त्रोतों और छिपे हुए मार्कोव के संदर्भ में मॉडल (एचएमएम) होता है। | ||
एल्गोरिदम ने [[सीडीएमए]] और [[जीएसएम]] डिजिटल सेल्युलर, [[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> उदाहरण के लिए, वाक्-से-पाठ (वाक् पहचान) में, | इसमें एल्गोरिदम ने [[सीडीएमए]] और [[जीएसएम]] डिजिटल सेल्युलर, [[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> चूँकि, इसमें अनेक आविष्कारों का इतिहास है, जिसमें कम से कम सात स्वतंत्र खोजें सम्मिलित हैं | विटर्बी एल्गोरिदम का नाम [[ एंड्रयू विटेर्बी |एंड्रयू विटेर्बी]] के नाम पर रखा गया है, और जिन्होंने 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> | ||
== एक्सटेंशन == | == एक्सटेंशन == | ||
विटर्बी एल्गोरिदम का सामान्यीकरण होता हैं , जिसे अधिकतम-योग एल्गोरिदम (या अधिकतम-उत्पाद एल्गोरिदम) कहा जाता है, और इसका उपयोग बड़ी संख्या में [[ चित्रमय मॉडल |चित्रमय मॉडल]] में सभी या कुछ [[अव्यक्त चर]] के सब समुच्चय के सबसे संभावित असाइनमेंट को खोजने के लिए किया जा सकता है, उदाहरण के लिए [[बायेसियन नेटवर्क]], [[मार्कोव यादृच्छिक क्षेत्र]] और [[सशर्त यादृच्छिक क्षेत्र]] होता हैं। इस प्रकार सामान्यतः, अव्यक्त वैरिएबल को कुछ सीमा तक छिपे हुए मार्कोव मॉडल (एचएमएम) के समान कनेक्ट करने की आवश्यकता होती है, और जिसमें वैरिएबल और वैरिएबल के मध्य कुछ प्रकार की रैखिक संरचना के मध्य सीमित संख्या में कनेक्शन होते हैं। सामान्य एल्गोरिदम में संदेश भेजना सम्मिलित होता है| और इस प्रकार यह अधिक सीमा तक विश्वास प्रसार एल्गोरिदम (जो आगे-पीछे एल्गोरिदम का सामान्यीकरण है) के समान होता है| | |||
पुनरावृत्त विटरबी डिकोडिंग नामक एल्गोरिदम के साथ कोई भी अवलोकन के परिणाम को प्राप्त सकता है | पुनरावृत्त विटरबी डिकोडिंग नामक एल्गोरिदम के साथ कोई भी अवलोकन के परिणाम को प्राप्त सकता है| इस प्रकार किसी दिए गए छिपे हुए मार्कोव मॉडल से सबसे अच्छा (औसतन) मेल खाता है। और यह एल्गोरिदम 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> जो इस प्रकार व्यावहारिक रुचि के अनेक अनुप्रयोगों के लिए, उचित ध्वनि स्थितियों के अनुसार होता हैं,और जिसमे लेज़ी डिकोडर (लेज़ी विटर्बी एल्गोरिदम का उपयोग करके) मूल [[विटर्बी डिकोडर]] (विटरबी एल्गोरिदम का उपयोग करके) की तुलना में बहुत तीव्र होता है। और जबकि मूल विटरबी एल्गोरिदम संभावित परिणामों के [[ सलाखें (ग्राफ) |ट्रेलिस (ग्राफ)]] में प्रत्येक नोड की गणना करता रहता है, इस प्रकार यह लेज़ी विटरबी एल्गोरिदम क्रम में मूल्यांकन करने के लिए नोड्स की प्राथमिकता वाली सूची बनाए रखता है| और यह आवश्यक गणना की संख्या सामान्यतः सामान्य विटरबी एल्गोरिदम की तुलना में कम (और कभी अधिक नहीं) होती रहती है| और वही समान परिणाम चूँकि, हार्डवेयर में समानांतरीकरण करना होता हैं| और यह इतना आसान [स्पष्टीकरण आवश्यक] नहीं होता है| | |||
== स्यूडोकोड == | == स्यूडोकोड == | ||
यह एल्गोरिथम पथ <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> 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> में संभावित अवलोकनों की संख्या होती है | | ||
<math>K \times T</math> आकार की दो 2-आयामी तालिकाएँ निर्मित हैं | इसमें <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_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_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>A_{ki}</math> और <math>B_{iy_j}</math> के साथ किया गया है। और ध्यान दें कि <math>B_{iy_j}</math> इसके पश्चात् की अभिव्यक्ति में प्रकट होने की आवश्यकता नहीं होती है, क्योंकि यह गैर-ऋणात्मक होता हैं| और इस प्रकार यह <math>k</math> स्वतंत्र होता है और इस प्रकार यह आर्ग मैक्स को प्रभावित नहीं करता है। | ||
'''इनपुट''' | '''इनपुट''' | ||
* [[अवलोकन स्थान]] <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> K\times K </math> का [[संक्रमण संभावना]] <math> A </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> K\times N </math> का उत्सर्जन मैट्रिक्स <math> B </math> ऐसा है कि <math> B_{ij} </math> स्थान <math> s_i </math>से <math> o_j </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> होता हैं| | ||
और यह फलन ''विटर्बी'' <math>(O,S,\Pi,Y,A,B):X</math> होता हैं| | |||
इस प्रकार यह प्रत्येक स्थान के लिए <math>i=1,2,\ldots,K</math> करना होता हैं| | |||
और यह <math>T_1[i,1]\leftarrow\pi_i\cdot B_{iy_1}</math> होता हैं| | |||
<math>T_2[i,1]\leftarrow 0</math> | |||
इसके लिए समाप्त होता हैं| | |||
प्रत्येक अवलोकन के लिए <math>j = 2,3,\ldots,T</math> करना | |||
<math>T_1[i,1]\leftarrow\pi_i\cdot B_{iy_1}</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> | ||
Line 57: | Line 55: | ||
<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</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>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>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>pointers[s, o] \leftarrow k</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>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> | |||
; | ; | ||
;व्याख्या | ;व्याख्या | ||
Line 89: | Line 87: | ||
\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>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 99: | Line 97: | ||
यहां हम [[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> ग्राफ़ में किनारों की संख्या होती है| | ||
== उदाहरण == | == उदाहरण == | ||
ऐसे गांव पर विचार करें जहां सभी ग्रामीण या मध्य स्वस्थ हैं या उन्हें ज्वर है, और केवल गांव का डॉक्टर ही यह निर्धारित कर सकता है कि प्रत्येक को ज्वर है या | ऐसे गांव पर विचार करें जहां सभी ग्रामीण या मध्य स्वस्थ हैं या उन्हें ज्वर है, और वह केवल गांव का डॉक्टर ही यह निर्धारित कर सकता है कि प्रत्येक को ज्वर है या नहीं हैं। डॉक्टर रोगी से यह पूछकर ज्वर का निदान करते हैं कि उन्हें कैसी अनुभूति हो रही है। और ग्रामीण केवल यही उत्तर दे सकते हैं कि उन्हें सामान्य, चक्कर या ठंड लग रही है। | ||
डॉक्टर का मानना है कि रोगी की स्वास्थ्य स्थिति अलग [[मार्कोव श्रृंखला]] के रूप में संचालित होती है। दो अवस्थाएँ हैं, "स्वस्थ" और ज्वर,", किन्तु डॉक्टर उनका सीधे निरीक्षण नहीं कर सकते | डॉक्टर का मानना है कि रोगी की स्वास्थ्य स्थिति अलग [[मार्कोव श्रृंखला]] के रूप में संचालित होती है। दो अवस्थाएँ हैं, "स्वस्थ" और ज्वर,", किन्तु डॉक्टर उनका सीधे निरीक्षण नहीं कर सकते हैं| वे डॉक्टर से छिपे हुए हैं। और प्रत्येक दिन, इस बात की निश्चित संभावना होती है कि रोगी डॉक्टर को बताएगा कि "मुझे सामान्य अनुभूति हो रही है", या "मुझे ठंड लग रही है", और या "मुझे चक्कर आ रहा है", यह रोगी की स्वास्थ्य स्थिति पर निर्भर करता है। | ||
छिपी हुई स्थिति (स्वस्थ, ज्वर) के साथ अवलोकन (सामान्य, सर्दी, चक्कर आना) छिपे हुए मार्कोव मॉडल (एचएमएम) का निर्माण करते हैं, और इसे पायथन (प्रोग्रामिंग भाषा) में निम्नानुसार दर्शाया जा सकता है | छिपी हुई स्थिति (स्वस्थ, ज्वर) के साथ अवलोकन (सामान्य, सर्दी, चक्कर आना) छिपे हुए मार्कोव मॉडल (एचएमएम) का निर्माण करते हैं, और इसे पायथन (प्रोग्रामिंग भाषा) में निम्नानुसार दर्शाया जा सकता है| | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
obs = ("normal", "cold", "dizzy") | obs = ("normal", "cold", "dizzy") | ||
Line 120: | Line 118: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
कोड के इस टुकड़े में, <code>स्टार्ट_पी</code> डॉक्टर के इस विश्वास का प्रतिनिधित्व करता है कि जब रोगी पहली बार आता है तब मध्य एचएमएम किस स्थिति में होता है (डॉक्टर केवल इतना जानता है कि रोगी स्वस्थ है)। यहां प्रयुक्त विशेष संभाव्यता वितरण संतुलन वितरण नहीं है | इस प्रकार कोड के इस टुकड़े में, <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|<nowiki>दिए गए एचएमएम का चित्रमय प्रतिनिधित्व करता हैं|</nowiki>]] | [[File:An example of HMM.png|thumb|center|300px|<nowiki>दिए गए एचएमएम का चित्रमय प्रतिनिधित्व करता हैं|</nowiki>]]रोगी लगातार तीन दिन दौरा करता है, और डॉक्टर को पता चलता है कि रोगी को पहले दिन सामान्य अनुभूति होती है| और दूसरे दिन ठंड लगती है, और तीसरे दिन चक्कर आता है। तब डॉक्टर का प्रश्न होता है कि रोगी की स्वास्थ्य स्थितियों का सबसे संभावित क्रम क्या है जो इन टिप्पणियों की व्याख्या करेगा? और इसका उत्तर विटर्बी एल्गोरिथम द्वारा दिया गया है। | ||
<syntaxhighlight> | <syntaxhighlight> | ||
Line 173: | Line 171: | ||
विटर्बी के एल्गोरिदम के संचालन को इसके लिस आरेख के माध्यम से देखा जा सकता है। विटर्बी पथ अनिवार्य रूप से इस जाली के माध्यम से सबसे छोटा रास्ता है। | इससे पता चलता है कि अवलोकन <code>['normal', 'cold', 'dizzy']</code> संभवतः स्थान <code>['Healthy', 'Healthy', 'Fever']</code>. के द्वारा उत्पन्न किए गए थे जिन्हें दूसरे शब्दों में, देखी गई गतिविधियों को देखते हुए, रोगी के पहले दिन और दूसरे दिन भी स्वस्थ रहने की संभावना रहती थी| और (उस दिन ठंड की अनुभूति होने के अतिरिक्त), और केवल तीसरे दिन ज्वर होने की संभावना थी। | ||
विटर्बी के एल्गोरिदम के संचालन को इसके लिस आरेख के माध्यम से देखा जा सकता है। इस प्रकार विटर्बी पथ अनिवार्य रूप से इस जाली के माध्यम से सबसे छोटा रास्ता होता है। | |||
== सॉफ्ट आउटपुट विटर्बी एल्गोरिदम == | == सॉफ्ट आउटपुट विटर्बी एल्गोरिदम == | ||
सॉफ्ट आउटपुट विटर्बी एल्गोरिदम (सोवा) क्लासिकल विटर्बी एल्गोरिदम का प्रकार होता है। | सॉफ्ट आउटपुट विटर्बी एल्गोरिदम (सोवा) क्लासिकल विटर्बी एल्गोरिदम का प्रकार होता है। | ||
सोवा मौलिक विटरबी एल्गोरिदम से इस | सोवा मौलिक विटरबी एल्गोरिदम से इस प्रकार से भिन्न होता है कि यह संशोधित पथ मीट्रिक का उपयोग करता है जो इनपुट प्रतीकों की प्राथमिक संभावनाओं को ध्यान में रखता है, और निर्णय की विश्वसनीयता को संकेत करने वाला नरम आउटपुट उत्पन्न करता है। | ||
सोवा में पहला कदम उत्तरजीवी पथ का चयन करना है, जो प्रत्येक समय तत्काल अद्वितीय नोड, ''t'' से होकर गुजरता है। चूँकि प्रत्येक नोड में 2 शाखाएँ एकत्रित होती हैं (एक शाखा को ''सर्वाइवर पाथ'' बनाने के लिए चुना जाता है, और दूसरी को छोड़ दिया जाता है), चुनी गई और छोड़ी गई शाखाओं के मध्य शाखा आव्युह (या ''निवेश)'' में अंतर त्रुटि की मात्रा को दर्शाता है। | सोवा में पहला कदम उत्तरजीवी पथ का चयन करना होता है, जो प्रत्येक समय तत्काल अद्वितीय नोड, ''t'' से होकर गुजरता है। चूँकि प्रत्येक नोड में 2 शाखाएँ एकत्रित होती हैं (एक शाखा को ''सर्वाइवर पाथ'' बनाने के लिए चुना जाता है, और दूसरी को छोड़ दिया जाता है), चुनी गई और छोड़ी गई शाखाओं के मध्य शाखा आव्युह (या ''निवेश)'' में अंतर त्रुटि की मात्रा को दर्शाता है। | ||
विटर्बी एल्गोरिदम के हार्ड बिट निर्णय की विश्वसनीयता के नरम आउटपुट माप को इंगित करने के लिए, यह निवेश पूरी स्लाइडिंग विंडो (सामान्यतः कम से कम पांच बाधा लंबाई के बराबर) पर | विटर्बी एल्गोरिदम के हार्ड बिट निर्णय की विश्वसनीयता के नरम आउटपुट माप को इंगित करने के लिए, यह निवेश पूरी स्लाइडिंग विंडो (सामान्यतः कम से कम पांच बाधा लंबाई के बराबर) पर एकत्रित होती है। | ||
== यह भी देखें == | == यह भी देखें == |
Revision as of 12:27, 15 July 2023
विटर्बी कलन विधि छिपे हुए स्थान के सबसे अधिक संभावना वाले फलन अनुक्रम का अधिकतम पोस्टीरियर अनुमान प्राप्त करने के लिए गतिशील प्रोग्रामिंग एल्गोरिदम होता है - जिसे विटरबी पथ कहा जाता है - जिसके परिणाम स्वरूप देखी गई घटनाओं का अनुक्रम होता रहता है,इस प्रकार विशेष रूप से मार्कोव सूचना स्त्रोतों और छिपे हुए मार्कोव के संदर्भ में मॉडल (एचएमएम) होता है।
इसमें एल्गोरिदम ने सीडीएमए और जीएसएम डिजिटल सेल्युलर, डायल -अप मॉडेम, सैटेलाइट, डीप-स्पेस संचार और 802.11 वायरलेस लैन दोनों में उपयोग किए जाने वाले कन्वोल्यूशनल कोड को डिकोड करने में सार्वभौमिक अनुप्रयोग पाया जाता है। अब इसका उपयोग सामान्यतः वाक् पहचान, वाक् संश्लेषण, डायरीकरण, कीवर्ड स्पॉटिंग, कम्प्यूटेशनल भाषाविज्ञान, और जैव सूचना विज्ञान में भी किया जाता है।[1] इस प्रकार उदाहरण के लिए, वाक्-से-पाठ (वाक् पहचान) में, ध्वनि के संकेत को घटनाओं के देखे गए अनुक्रम के रूप में माना जाता है, और पाठ की शृंखला को ध्वनिक संकेत का छिपा हुआ कारण माना जाता है। जिसे विटरबी एल्गोरिदम ध्वनि का संकेत दिए जाने पर पाठ की सबसे संभावित शृंखला को ढूंढता रहता है।
इतिहास
विटर्बी एल्गोरिदम का नाम एंड्रयू विटेर्बी के नाम पर रखा गया है, और जिन्होंने 1967 में इसे ध्वनि वाले डिजिटल संचार लिंक पर कनवल्शन कोड के लिए डिकोडिंग एल्गोरिदम के रूप में प्रस्तावित किया गया था।[2] चूँकि, इसमें अनेक आविष्कारों का इतिहास सम्मिलित होता है, जिसमें कम से कम सात स्वतंत्र खोजें सम्मिलित होती हैं| और जिनमें विटर्बी, नीडलमैन-वुन्श एल्गोरिदम और वैगनर-फिशर एल्गोरिदम सम्मिलित होते रहते हैं।[3] इस प्रकार इसे 1987 की प्रारंभ में भाषण का भाग टैगिंग की विधि के रूप में प्राकृतिक भाषा प्रसंस्करण में प्रस्तुत किया गया था।
संभावनाओं से जुड़ी समस्याओं को अधिकतम बढ़ाने के लिए इसमें गतिशील प्रोग्रामिंग एल्गोरिदम के अनुप्रयोग के लिए विटर्बी पथ और विटरबी एल्गोरिदम मानक शब्द बन गए हैं।[3] इस प्रकार उदाहरण के लिए, सांख्यिकीय पार्सिंग में शृंखला के एकल सबसे संभावित संदर्भ-मुक्त व्युत्पत्ति (पार्स) की खोज के लिए गतिशील प्रोग्रामिंग एल्गोरिदम का उपयोग किया जा सकता है, जिसे सामान्यतः विटर्बी पार्स भी कहा जाता है।[4][5][6] इस प्रकार अन्य अनुप्रयोग ऑप्टिकल मोशन ट्रैकिंग में होते है, जहां ट्रैक की गणना की जाती है और जिन्हें अवलोकनों के अनुक्रम को अधिकतम संभावना प्रदान करता है।[7]
एक्सटेंशन
विटर्बी एल्गोरिदम का सामान्यीकरण होता हैं , जिसे अधिकतम-योग एल्गोरिदम (या अधिकतम-उत्पाद एल्गोरिदम) कहा जाता है, और इसका उपयोग बड़ी संख्या में चित्रमय मॉडल में सभी या कुछ अव्यक्त चर के सब समुच्चय के सबसे संभावित असाइनमेंट को खोजने के लिए किया जा सकता है, उदाहरण के लिए बायेसियन नेटवर्क, मार्कोव यादृच्छिक क्षेत्र और सशर्त यादृच्छिक क्षेत्र होता हैं। इस प्रकार सामान्यतः, अव्यक्त वैरिएबल को कुछ सीमा तक छिपे हुए मार्कोव मॉडल (एचएमएम) के समान कनेक्ट करने की आवश्यकता होती है, और जिसमें वैरिएबल और वैरिएबल के मध्य कुछ प्रकार की रैखिक संरचना के मध्य सीमित संख्या में कनेक्शन होते हैं। सामान्य एल्गोरिदम में संदेश भेजना सम्मिलित होता है| और इस प्रकार यह अधिक सीमा तक विश्वास प्रसार एल्गोरिदम (जो आगे-पीछे एल्गोरिदम का सामान्यीकरण है) के समान होता है|
पुनरावृत्त विटरबी डिकोडिंग नामक एल्गोरिदम के साथ कोई भी अवलोकन के परिणाम को प्राप्त सकता है| इस प्रकार किसी दिए गए छिपे हुए मार्कोव मॉडल से सबसे अच्छा (औसतन) मेल खाता है। और यह एल्गोरिदम Qi वांग एट अल द्वारा प्रस्तावित होता है। टर्बो कोड से निपटने के लिए. पुनरावृत्तीय विटरबी डिकोडिंग संशोधित विटरबी एल्गोरिदम को पुनरावृत्त रूप से प्रयुक्त करके काम करता रहता है, और यह अभिसरण तक भराव के लिए स्कोर का पुनर्मूल्यांकन करता रहता है।[8]
इसमें वैकल्पिक एल्गोरिथम, लेज़ी विटर्बी एल्गोरिदम प्रस्तावित किया गया है।[9] जो इस प्रकार व्यावहारिक रुचि के अनेक अनुप्रयोगों के लिए, उचित ध्वनि स्थितियों के अनुसार होता हैं,और जिसमे लेज़ी डिकोडर (लेज़ी विटर्बी एल्गोरिदम का उपयोग करके) मूल विटर्बी डिकोडर (विटरबी एल्गोरिदम का उपयोग करके) की तुलना में बहुत तीव्र होता है। और जबकि मूल विटरबी एल्गोरिदम संभावित परिणामों के ट्रेलिस (ग्राफ) में प्रत्येक नोड की गणना करता रहता है, इस प्रकार यह लेज़ी विटरबी एल्गोरिदम क्रम में मूल्यांकन करने के लिए नोड्स की प्राथमिकता वाली सूची बनाए रखता है| और यह आवश्यक गणना की संख्या सामान्यतः सामान्य विटरबी एल्गोरिदम की तुलना में कम (और कभी अधिक नहीं) होती रहती है| और वही समान परिणाम चूँकि, हार्डवेयर में समानांतरीकरण करना होता हैं| और यह इतना आसान [स्पष्टीकरण आवश्यक] नहीं होता है|
स्यूडोकोड
यह एल्गोरिथम पथ उत्पन्न करता है जो स्थान का अनुक्रम होता है| जो के साथ अवलोकन उत्पन्न करते रहते हैं| और इस प्रकार जहाँ अवलोकन स्थान में संभावित अवलोकनों की संख्या होती है |
इसमें आकार की दो 2-आयामी तालिकाएँ निर्मित होता हैं|
- प्रत्येक तत्व का अब तक के सबसे संभावित पथ की संभावना को के साथ संग्रहीत करता है जो उत्पन्न करता है|
- में से प्रत्येक तत्व अब तक के सबसे संभावित पथ के को संगृहीत करता रहता हैं| और जिन्हें तालिका प्रविष्टियाँ के बढ़ते क्रम से भरे जाते हैं |
- ,
- ,
इसके साथ जैसा कि नीचे परिभाषित हुआ हैं कि और के साथ किया गया है। और ध्यान दें कि इसके पश्चात् की अभिव्यक्ति में प्रकट होने की आवश्यकता नहीं होती है, क्योंकि यह गैर-ऋणात्मक होता हैं| और इस प्रकार यह स्वतंत्र होता है और इस प्रकार यह आर्ग मैक्स को प्रभावित नहीं करता है।
इनपुट
- अवलोकन स्थान ,
- अवस्था स्थान ,
- प्रारंभिक संभावनाओं की श्रृंखला ऐसा है कि इसकी संभावना को संग्रहीत करता है कि यह होता हैं|
- अवलोकनों का क्रम इस प्रकार हैं कि यदि समय पर अवलोकन होता है|
- स्टोकेस्टिक मैट्रिक्स आकार का संक्रमण संभावना ऐसा है कि स्थान से स्थान तक पारगमन की को संग्रहीत करता है|
- हिडन मार्कोव मॉडल आकार का उत्सर्जन मैट्रिक्स ऐसा है कि स्थान से देखने की संभावना संग्रहीत करता है।
- आउटपुट
- सबसे संभावित छिपा हुआ अवस्था क्रम होता हैं|
और यह फलन विटर्बी होता हैं|
इस प्रकार यह प्रत्येक स्थान के लिए करना होता हैं|
और यह होता हैं|
इसके लिए समाप्त होता हैं|
प्रत्येक अवलोकन के लिए करना प्रत्येक स्थान के लिए करना
के लिए समाप्त के लिए समाप्त
के लिए करना
के लिए समाप्त
वापस करना
अंत फलन
पाइथॉन (प्रोग्रामिंग भाषा) के निकट संक्षिप्त रूप में पुन: प्रस्तुत:
फलन विटरबी टीएम: संक्रमण मैट्रिक्स एम: उत्सर्जन मैट्रिक्स
प्रत्येक अवलोकन को देखते हुए प्रत्येक स्थिति की संभाव्यता बनाए रखना बैकपॉइंटर को सर्वोत्तम पूर्व स्थिति में रखने के लिए
एस इन के लिए : समय 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 शाखाएँ एकत्रित होती हैं (एक शाखा को सर्वाइवर पाथ बनाने के लिए चुना जाता है, और दूसरी को छोड़ दिया जाता है), चुनी गई और छोड़ी गई शाखाओं के मध्य शाखा आव्युह (या निवेश) में अंतर त्रुटि की मात्रा को दर्शाता है।
विटर्बी एल्गोरिदम के हार्ड बिट निर्णय की विश्वसनीयता के नरम आउटपुट माप को इंगित करने के लिए, यह निवेश पूरी स्लाइडिंग विंडो (सामान्यतः कम से कम पांच बाधा लंबाई के बराबर) पर एकत्रित होती है।
यह भी देखें
- अपेक्षा-अधिकतमीकरण एल्गोरिथ्म
- बॉम-वेल्च एल्गोरिथम
- फॉरवर्ड-बैकवर्ड एल्गोरिथम
- अग्रेषित एल्गोरिथ्म
- त्रुटि-सुधार कोड
- विटर्बी डिकोडर
- हिडन मार्कोव मॉडल
- पार्टऑफ़ स्पीच टैगिंग
- ए* खोज एल्गोरिदम
संदर्भ
- ↑ Xavier Anguera et al., "Speaker Diarization: A Review of Recent Research", retrieved 19. August 2010, IEEE TASLP
- ↑ 29 Apr 2005, G. David Forney Jr: The Viterbi Algorithm: A Personal History
- ↑ 3.0 3.1 Daniel Jurafsky; James H. Martin. भाषण और भाषा प्रसंस्करण. Pearson Education International. p. 246.
- ↑ Schmid, Helmut (2004). बिट वैक्टर के साथ अत्यधिक अस्पष्ट संदर्भ-मुक्त व्याकरण का कुशल विश्लेषण (PDF). Proc. 20th Int'l Conf. on Computational Linguistics (COLING). doi:10.3115/1220355.1220379.
- ↑ 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.
- ↑ 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.
- ↑ 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) - ↑ Qi Wang; Lei Wei; Rodney A. Kennedy (2002). "उच्च-दर समता-संक्षिप्त टीसीएम के लिए पुनरावृत्त विटरबी डिकोडिंग, ट्रेलिस शेपिंग और बहुस्तरीय संरचना". IEEE Transactions on Communications. 50: 48–55. doi:10.1109/26.975743.
- ↑ कन्वेन्शनल कोड के लिए एक तेज़ अधिकतम-संभावना डिकोडर (PDF). Vehicular Technology Conference. December 2002. pp. 371–375. doi:10.1109/VETECF.2002.1040367.
- ↑ 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।
बाहरी संबंध
- Implementations in Java, F#, Clojure, C# on Wikibooks
- Tutorial on convolutional coding with viterbi decoding, by Chip Fleming
- A tutorial for a Hidden Markov Model toolkit (implemented in C) that contains a description of the Viterbi algorithm
- Viterbi algorithm by Dr. Andrew J. Viterbi (scholarpedia.org).
कार्यान्वयन
- Mathematica में स्टोकेस्टिक प्रक्रियाओं के समर्थन के हिस्से के रूप में कार्यान्वयन है
- Susa सिग्नल प्रोसेसिंग फ्रेमवर्क आगे त्रुटि सुधार कोड और चैनल इक्वलाइजेशन के लिए C++ कार्यान्वयन प्रदान करता है ज यहाँ.
- C++
- C#
- जावा
- जावा 8
- जूलिया (HMMBase.jl)
- पर्ल
- प्रोलॉग
- हास्केल
- जाओ
- SFIHMM में विटरबी डिकोडिंग के लिए कोड सम्मिलित है।
श्रेणी:त्रुटि का पता लगाना और सुधार करना श्रेणी:गतिशील प्रोग्रामिंग श्रेणी:मार्कोव मॉडल श्रेणी: पायथन (प्रोग्रामिंग भाषा) कोड के उदाहरण वाले लेख