विटर्बी एल्गोरिदम: 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> उदाहरण के लिए, वाक्-से-पाठ (वाक् पहचान) में, ध्वनिक संकेत को घटनाओं के देखे गए अनुक्रम के रूप में माना जाता है, और पाठ की शृंखला को ध्वनिक संकेत का छिपा हुआ कारण माना जाता है। विटरबी एल्गोरिदम ध्वनिक संकेत दिए जाने पर पाठ की सबसे संभावित शृंखला ढूंढता है। | ||
== इतिहास == | == इतिहास == | ||
विटर्बी एल्गोरिदम का नाम [[ एंड्रयू विटेर्बी ]] के नाम पर रखा गया है, जिन्होंने 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 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> व्यावहारिक रुचि के अनेक अनुप्रयोगों के लिए, उचित ध्वनि स्थितियों के अनुसार, | एक वैकल्पिक एल्गोरिथम, [[आलसी विटर्बी एल्गोरिदम|लेज़ी विटर्बी एल्गोरिदम]] प्रस्तावित किया गया है।<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>N</math> अवलोकन स्थान <math>O</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>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> \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> o_i </math>, | ||
* [[स्टोकेस्टिक मैट्रिक्स]] <math> | *[[स्टोकेस्टिक मैट्रिक्स]] आकार <math> K\times K </math> का [[संक्रमण संभावना]] <math> A </math> ऐसा है कि <math> A_{ij} </math> स्थान <math> s_i </math> से स्थान <math> s_j </math>तक पारगमन की को संग्रहीत करता है | ||
* हिडन मार्कोव मॉडल <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> | ||
फलन ''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>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>j = 2,3,\ldots,T</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</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>: ...और उसके पश्चात्, प्रत्येक | ओ इन के लिए <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> | |||
;व्याख्या | ; | ||
मान लीजिए हमें | ;व्याख्या | ||
मान लीजिए हमें अवस्था स्थान <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>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>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> | कोड के इस टुकड़े में, <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>]]एक रोगी लगातार तीन दिन दौरा करता है, और डॉक्टर को पता चलता है कि रोगी को पहले दिन सामान्य अनुभूति होती है, दूसरे दिन ठंड लगती है, और तीसरे दिन चक्कर आता है। डॉक्टर का प्रश्न है: रोगी की स्वास्थ्य स्थितियों का सबसे संभावित क्रम क्या है जो इन टिप्पणियों की व्याख्या करेगा? इसका उत्तर विटर्बी एल्गोरिथम द्वारा दिया गया है। | ||
< | <syntaxhighlight> | ||
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] [ | max_tr_prob = V[t - 1] [states[0]] ["prob"] * trans_p[states[0]] [st] * emit_p[st] [obs[t]] | ||
prev_st_selected = | prev_st_selected = states[0] | ||
for prev_st in states[1:]: | |||
tr_prob = V[t - 1] [prev_st] [prob ] * trans_p[prev_st] [st] * | 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 | 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] = { | V[t] [st] = {"prob": max_prob, "prev": prev_st_selected} | ||
dptable(V) | for line in dptable(V): | ||
print(line) | |||
opt = [] | |||
max_prob = 0.0 | |||
best_st = | best_st = None | ||
# | # Get most probable state and its backtrack | ||
for st, data in V[-1].items(): | |||
if data["prob"] > max_prob: | |||
max_prob = | max_prob = data["prob"] | ||
best_st = st | 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] [ | 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))) | |||
V[0] | for state in V[0]: | ||
yield "%.7s: " % state + " ".join("%.7s" % ("%lf" % v[state] ["prob"]) for v in V) | |||
</ | </syntaxhighlight> | ||
इससे पता चलता है कि अवलोकन <code>['normal', 'cold', 'dizzy']</code> संभवतः स्थान <code>['Healthy', 'Healthy', 'Fever']</code>. द्वारा उत्पन्न किए गए थे दूसरे शब्दों में, देखी गई गतिविधियों को देखते हुए, रोगी के पहले दिन और दूसरे दिन भी स्वस्थ रहने की संभावना थी (उस दिन ठंड अनुभूति होने के अतिरिक्त), और केवल तीसरे दिन ज्वर होने की संभावना थी। | |||
इससे पता चलता है कि अवलोकन <code>['normal', 'cold', 'dizzy']</code> संभवतः | |||
विटर्बी के एल्गोरिदम के संचालन को इसके माध्यम से देखा जा सकता | विटर्बी के एल्गोरिदम के संचालन को इसके लिस आरेख के माध्यम से देखा जा सकता है। विटर्बी पथ अनिवार्य रूप से इस जाली के माध्यम से सबसे छोटा रास्ता है। | ||
इस जाली के माध्यम से | |||
== सॉफ्ट आउटपुट विटर्बी एल्गोरिदम == | == सॉफ्ट आउटपुट विटर्बी एल्गोरिदम == | ||
सॉफ्ट आउटपुट विटर्बी एल्गोरिदम ( | सॉफ्ट आउटपुट विटर्बी एल्गोरिदम (सोवा) क्लासिकल विटर्बी एल्गोरिदम का प्रकार होता है। | ||
सोवा मौलिक विटरबी एल्गोरिदम से इस मायने में भिन्न है कि यह संशोधित पथ मीट्रिक का उपयोग करता है जो इनपुट प्रतीकों की प्राथमिक संभावनाओं को ध्यान में रखता है, और निर्णय की विश्वसनीयता को संकेत करने वाला नरम आउटपुट उत्पन्न करता है। | |||
सोवा में पहला कदम उत्तरजीवी पथ का चयन करना है, जो प्रत्येक समय तत्काल अद्वितीय नोड, ''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 शाखाएँ एकत्रित होती हैं (एक शाखा को सर्वाइवर पाथ बनाने के लिए चुना जाता है, और दूसरी को छोड़ दिया जाता है), चुनी गई और छोड़ी गई शाखाओं के मध्य शाखा आव्युह (या निवेश) में अंतर त्रुटि की मात्रा को दर्शाता है। विकल्प।
विटर्बी एल्गोरिदम के हार्ड बिट निर्णय की विश्वसनीयता के नरम आउटपुट माप को इंगित करने के लिए, यह निवेश पूरी स्लाइडिंग विंडो (सामान्यतः कम से कम पांच बाधा लंबाई के बराबर) पर जमा होती है।
यह भी देखें
- अपेक्षा-अधिकतमीकरण एल्गोरिथ्म
- बॉम-वेल्च एल्गोरिथम
- फॉरवर्ड-बैकवर्ड एल्गोरिथम
- अग्रेषित एल्गोरिथ्म
- त्रुटि-सुधार कोड
- विटर्बी डिकोडर
- हिडन मार्कोव मॉडल
- पार्टऑफ़ स्पीच टैगिंग
- ए* खोज एल्गोरिदम
संदर्भ
- ↑ 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 में विटरबी डिकोडिंग के लिए कोड सम्मिलित है।
श्रेणी:त्रुटि का पता लगाना और सुधार करना श्रेणी:गतिशील प्रोग्रामिंग श्रेणी:मार्कोव मॉडल श्रेणी: पायथन (प्रोग्रामिंग भाषा) कोड के उदाहरण वाले लेख