विटर्बी एल्गोरिदम: Difference between revisions
(Created page with "{{short description|Finds likely sequence of hidden states}} विटर्बी कलन विधि छिपे हुए राज्यों के सबसे...") |
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 वायरलेस लैन दोनों में उपयोग किए जाने वाले [[कन्वोल्यूशनल कोड]] को डिकोड करने में सार्वभौमिक अनुप्रयोग पाया है। अब इसका उपयोग | एल्गोरिदम ने [[सीडीएमए]] और [[जीएसएम]] डिजिटल सेल्युलर, [[डायल करें]] मॉडेम, सैटेलाइट, डीप-स्पेस संचार और 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 में इसे | विटर्बी एल्गोरिदम का नाम [[ एंड्रयू विटेर्बी ]] के नाम पर रखा गया है, जिन्होंने 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>{{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>. | ||
आकार की दो 2-आयामी तालिकाएँ <math>K \times T</math> निर्मित हैं: | आकार की दो 2-आयामी तालिकाएँ <math>K \times T</math> निर्मित हैं: | ||
Line 28: | Line 26: | ||
:<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> और इस प्रकार यह 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> Y=(y_1,y_2,\ldots, y_T) </math> ऐसा है कि <math> y_t=o_i </math> यदि समय पर अवलोकन <math> t </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> A </math> आकार का <math> K\times K </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> B </math> आकार का <math> K\times N </math> ऐसा है कि <math> B_{ij} </math> अवलोकन की संभावना को संग्रहीत करता है <math> o_j </math> राज्य से <math> s_i </math>. | ||
Line 40: | Line 38: | ||
;आउटपुट | ;आउटपुट | ||
* सबसे संभावित छिपा हुआ राज्य क्रम <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> | |||
प्रत्येक राज्य के लिए <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> | ||
Line 58: | Line 56: | ||
के लिए समाप्त | के लिए समाप्त | ||
वापस करना <math>X</math> | वापस करना <math>X</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>: ...और उसके | ओ इन के लिए <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> | ||
Line 78: | Line 76: | ||
वापस करना <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> | :<math> | ||
\begin{align} | \begin{align} | ||
Line 85: | Line 83: | ||
\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>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 95: | Line 93: | ||
यहां हम [[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 116: | Line 114: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
कोड के इस टुकड़े में, <code>start_p</code> डॉक्टर के इस विश्वास का प्रतिनिधित्व करता है कि जब मरीज पहली बार आता है | कोड के इस टुकड़े में, <code>start_p</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|दिए गए एचएमएम का चित्रमय प्रतिनिधित्व]]एक मरीज लगातार तीन दिन दौरा करता है, और डॉक्टर को पता चलता है कि मरीज को पहले दिन सामान्य अनुभूत होता है, दूसरे दिन ठंड लगती है, और तीसरे दिन चक्कर आता है। डॉक्टर का प्रश्न है: रोगी की स्वास्थ्य स्थितियों का सबसे संभावित क्रम क्या है जो इन टिप्पणियों की व्याख्या करेगा? इसका उत्तर विटर्बी एल्गोरिथम द्वारा दिया गया है। | ||
<सिंटैक्सहाइलाइट लैंग=पायथन लाइन=1 > | <सिंटैक्सहाइलाइट लैंग=पायथन लाइन=1 > | ||
Line 125: | Line 123: | ||
राज्यों में अनुसूचित जनजाति के लिए: | राज्यों में अनुसूचित जनजाति के लिए: | ||
वी[0] [एसटी] = {संभावना: प्रारंभ_पी[एसटी] * एमिट_पी[एसटी] [अवलोकन[0, पिछला: कोई नहीं} | वी[0] [एसटी] = {संभावना: प्रारंभ_पी[एसटी] * एमिट_पी[एसटी] [अवलोकन[0, पिछला: कोई नहीं} | ||
# जब t > 0 हो | # जब t > 0 हो मध्य Viterbi चलाएँ | ||
रेंज में टी के लिए (1, लेन (ओब्स)): | रेंज में टी के लिए (1, लेन (ओब्स)): | ||
वी.संलग्न करें({}) | वी.संलग्न करें({}) | ||
Line 162: | Line 160: | ||
डीईएफ़ डीपीटेबल(वी): | डीईएफ़ डीपीटेबल(वी): | ||
# शब्दकोश से चरणों की | # शब्दकोश से चरणों की तालिका प्रिंट करें | ||
उपज * 5 + .join(( % | उपज * 5 + .join(( %3dd% i) i के लिए रेंज में(len(V))) | ||
V[0] में राज्य के लिए: | V[0] में राज्य के लिए: | ||
उपज�%.7s:7% स्थिति + .join( .7s.% ( %lf%% v[state] [prob ]) for v in V) | |||
</सिंटैक्सहाइलाइट> | </सिंटैक्सहाइलाइट> | ||
कार्यक्रम <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 के लिए परिभाषित किया गया है। | कार्यक्रम <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 के लिए परिभाषित किया गया है। | ||
Line 188: | Line 186: | ||
The steps of states are Healthy Healthy Fever with highest probability of 0.01512 | The steps of states are Healthy Healthy Fever with highest probability of 0.01512 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
इससे पता चलता है कि अवलोकन <code>['normal', 'cold', 'dizzy']</code> संभवतः राज्यों द्वारा उत्पन्न किए गए थे <code>['Healthy', 'Healthy', 'Fever']</code>. दूसरे शब्दों में, देखी गई गतिविधियों को देखते हुए, रोगी के पहले दिन और दूसरे दिन भी स्वस्थ रहने की संभावना थी (उस दिन ठंड | इससे पता चलता है कि अवलोकन <code>['normal', 'cold', 'dizzy']</code> संभवतः राज्यों द्वारा उत्पन्न किए गए थे <code>['Healthy', 'Healthy', 'Fever']</code>. दूसरे शब्दों में, देखी गई गतिविधियों को देखते हुए, रोगी के पहले दिन और दूसरे दिन भी स्वस्थ रहने की संभावना थी (उस दिन ठंड अनुभूत होने के अतिरिक्त), और केवल तीसरे दिन बुखार होने की संभावना थी। | ||
विटर्बी के एल्गोरिदम के संचालन को इसके माध्यम से देखा जा सकता है | विटर्बी के एल्गोरिदम के संचालन को इसके माध्यम से देखा जा सकता है | ||
Line 195: | Line 193: | ||
== सॉफ्ट आउटपुट विटर्बी एल्गोरिदम == | == सॉफ्ट आउटपुट विटर्बी एल्गोरिदम == | ||
सॉफ्ट आउटपुट विटर्बी एल्गोरिदम (SOVA) क्लासिकल विटर्बी एल्गोरिदम का | सॉफ्ट आउटपुट विटर्बी एल्गोरिदम (SOVA) क्लासिकल विटर्बी एल्गोरिदम का प्रकार है। | ||
SOVA | SOVA मौलिक विटरबी एल्गोरिदम से इस मायने में भिन्न है कि यह संशोधित पथ मीट्रिक का उपयोग करता है जो इनपुट प्रतीकों की प्राथमिक संभाव्यता| ''फैसले का. | ||
SOVA में पहला कदम उत्तरजीवी पथ का चयन करना है, जो प्रत्येक समय तत्काल | SOVA में पहला कदम उत्तरजीवी पथ का चयन करना है, जो प्रत्येक समय तत्काल अद्वितीय नोड, ''t'' से होकर गुजरता है। चूँकि प्रत्येक नोड में 2 शाखाएँ एकत्रित होती हैं (एक शाखा को ''सर्वाइवर पाथ'' बनाने के लिए चुना जाता है, और दूसरी को छोड़ दिया जाता है), चुने गए और के मध्य शाखा मेट्रिक्स (या ''निवेश'') में अंतर होता है। छोड़ी गई शाखाएं चयन में ''त्रुटि की मात्रा'' का संकेत देती हैं। | ||
यह '' | यह ''निवेश'' पूरी स्लाइडिंग विंडो (सामान्यतः ''कम से कम'' पांच बाधा लंबाई के सामान्तर) पर जमा होती है, ''हार्ड बिट निर्णय'' की विश्वसनीयता के ''सॉफ्ट आउटपुट'' माप को इंगित करने के लिए विटर्बी एल्गोरिदम. | ||
== यह भी देखें == | == यह भी देखें == | ||
Line 237: | Line 235: | ||
=== कार्यान्वयन === | === कार्यान्वयन === | ||
* [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++] | ||
Line 248: | Line 246: | ||
* [https://hackage.haskell.org/package/hmm-0.2.1.1/docs/src/Data-HMM.html#viterbi हास्केल] | * [https://hackage.haskell.org/package/hmm-0.2.1.1/docs/src/Data-HMM.html#viterbi हास्केल] | ||
* [https://github.com/nyxtom/viterbi जाओ] | * [https://github.com/nyxtom/viterbi जाओ] | ||
* [http://tuvalu.santafe.edu/~simon/styled-8/ SFIHMM] में विटरबी डिकोडिंग के लिए कोड | * [http://tuvalu.santafe.edu/~simon/styled-8/ SFIHMM] में विटरबी डिकोडिंग के लिए कोड सम्मिलित है। | ||
श्रेणी:त्रुटि का पता लगाना और सुधार करना | श्रेणी:त्रुटि का पता लगाना और सुधार करना |
Revision as of 13:14, 13 July 2023
विटर्बी कलन विधि छिपे हुए राज्यों के सबसे अधिक संभावना वाले फलन अनुक्रम का अधिकतम पोस्टीरियर अनुमान प्राप्त करने के लिए गतिशील प्रोग्रामिंग एल्गोरिदम है - जिसे विटरबी पथ कहा जाता है - जिसके परिणामस्वरूप देखी गई घटनाओं का अनुक्रम होता है, खासकर मार्कोव सूचना स्त्रोमध्यं और छिपे हुए मार्कोव के संदर्भ में मॉडल (एचएमएम)।
एल्गोरिदम ने सीडीएमए और जीएसएम डिजिटल सेल्युलर, डायल करें मॉडेम, सैटेलाइट, डीप-स्पेस संचार और 802.11 वायरलेस लैन दोनों में उपयोग किए जाने वाले कन्वोल्यूशनल कोड को डिकोड करने में सार्वभौमिक अनुप्रयोग पाया है। अब इसका उपयोग सामान्यतः वाक् पहचान, वाक् संश्लेषण, डायरीकरण, में भी किया जाता है।[1] कीवर्ड स्पॉटिंग, कम्प्यूटेशनल भाषाविज्ञान, और जैव सूचना विज्ञान। उदाहरण के लिए, वाक्-से-पाठ (वाक् पहचान) में, ध्वनिक संकेत को घटनाओं के देखे गए अनुक्रम के रूप में माना जाता है, और पाठ की स्ट्रिंग को ध्वनिक संकेत का छिपा हुआ कारण माना जाता है। विटरबी एल्गोरिदम ध्वनिक संकेत दिए जाने पर पाठ की सबसे संभावित स्ट्रिंग ढूंढता है।
इतिहास
विटर्बी एल्गोरिदम का नाम एंड्रयू विटेर्बी के नाम पर रखा गया है, जिन्होंने 1967 में इसे ध्वनि वाले डिजिटल संचार लिंक पर कनवल्शन कोड के लिए डिकोडिंग एल्गोरिदम के रूप में प्रस्तावित किया था।[2] चूँकि, इसमें अनेक आविष्कारों का इतिहास है, जिसमें कम से कम सात स्वतंत्र खोजें सम्मिलित हैं, जिनमें विटर्बी, नीडलमैन-वुन्श एल्गोरिदम और वैगनर-फिशर एल्गोरिदम सम्मिलित हैं।[3] इसे 1987 की प्रारंभ में भाषण का भाग टैगिंग की विधि के रूप में प्राकृतिक भाषा प्रसंस्करण में प्रस्तुत किया गया था।
संभावनाओं से जुड़ी समस्याओं को अधिकतम करने के लिए गतिशील प्रोग्रामिंग एल्गोरिदम के अनुप्रयोग के लिए विटर्बी पथ और विटरबी एल्गोरिदम मानक शब्द बन गए हैं।[3] उदाहरण के लिए, सांख्यिकीय पार्सिंग में स्ट्रिंग के एकल सबसे संभावित संदर्भ-मुक्त व्युत्पत्ति (पार्स) की खोज के लिए गतिशील प्रोग्रामिंग एल्गोरिदम का उपयोग किया जा सकता है, जिसे सामान्यतः विटर्बी पार्स कहा जाता है।[4][5][6] अन्य अनुप्रयोग ऑप्टिकल मोशन ट्रैकिंग में है, जहां ट्रैक की गणना की जाती है जो अवलोकनों के अनुक्रम को अधिकतम संभावना प्रदान करता है।[7]
एक्सटेंशन
विटरबी एल्गोरिदम का सामान्यीकरण, जिसे अधिकतम-योग एल्गोरिदम (या अधिकतम-उत्पाद एल्गोरिदम) कहा जाता है, का उपयोग बड़ी संख्या में चित्रमय मॉडल में सभी या कुछ अव्यक्त चर के सबसमुच्चय के सबसे संभावित असाइनमेंट को खोजने के लिए किया जा सकता है, उदाहरण के लिए बायेसियन नेटवर्क, मार्कोव यादृच्छिक क्षेत्र और सशर्त यादृच्छिक क्षेत्र। सामान्यतः, अव्यक्त चर को कुछ सीमा तक छिपे हुए मार्कोव मॉडल (एचएमएम) के समान कनेक्ट करने की आवश्यकता होती है, जिसमें चर और चर के मध्य कुछ प्रकार की रैखिक संरचना के मध्य सीमित संख्या में कनेक्शन होते हैं। सामान्य एल्गोरिदम में संदेश भेजना सम्मिलित है और यह अधिक सीमा तक विश्वास प्रसार एल्गोरिदम (जो आगे-पीछे एल्गोरिदम का सामान्यीकरण है) के समान है।
पुनरावृत्त विटरबी डिकोडिंग नामक एल्गोरिदम के साथ कोई भी अवलोकन के परिणाम को पा सकता है जो किसी दिए गए छिपे हुए मार्कोव मॉडल से सबसे अच्छा (औसतन) मेल खाता है। यह एल्गोरिदम क्यूई वांग एट अल द्वारा प्रस्तावित है। टर्बो कोड से निपटने के लिए.[8] पुनरावृत्तीय विटरबी डिकोडिंग संशोधित विटरबी एल्गोरिदम को पुनरावृत्त रूप से प्रयुक्त करके काम करता है, अभिसरण तक भराव के लिए स्कोर का पुनर्मूल्यांकन करता है।
एक वैकल्पिक एल्गोरिथम, आलसी विटर्बी एल्गोरिदम प्रस्तावित किया गया है।[9] व्यावहारिक रुचि के अनेक अनुप्रयोगों के लिए, उचित ध्वनि स्थितियों के अनुसार, आलसी डिकोडर (लेज़ी विटर्बी एल्गोरिदम का उपयोग करके) मूल विटर्बी डिकोडर (विटरबी एल्गोरिदम का उपयोग करके) की तुलना में बहुत तेज़ है। जबकि मूल विटरबी एल्गोरिदम संभावित परिणामों के सलाखें (ग्राफ) में प्रत्येक नोड की गणना करता है, लेज़ी विटरबी एल्गोरिदम क्रम में मूल्यांकन करने के लिए नोड्स की प्राथमिकता वाली सूची बनाए रखता है, और आवश्यक गणना की संख्या सामान्यतः सामान्य से कम (और कभी अधिक नहीं) होती है समान परिणाम के लिए विटर्बी एल्गोरिदम। चूँकि, यह इतना आसान नहीं है हार्डवेयर में समानांतरीकरण करने के लिए।
स्यूडोकोड
यह एल्गोरिथम पथ उत्पन्न करता है , जो राज्यों का क्रम है जो अवलोकन उत्पन्न करते हैं साथ , कहाँ अवलोकन स्थान में संभावित अवलोकनों की संख्या है .
आकार की दो 2-आयामी तालिकाएँ निर्मित हैं:
- प्रत्येक तत्व का अब तक के सबसे संभावित पथ की संभावना को संग्रहीत करता है साथ जो उत्पन्न करता है .
- प्रत्येक तत्व का भंडार अब तक के सबसे संभावित पथ में से
तालिका प्रविष्टियाँ के बढ़ते क्रम से भरे जाते हैं :
- ,
- ,
साथ और जैसा कि नीचे परिभाषित किया गया है। ध्यान दें कि इसे पश्चात् वाली अभिव्यक्ति में प्रकट होने की आवश्यकता नहीं है, क्योंकि यह गैर-नकारात्मक और स्वतंत्र है और इस प्रकार यह argmax को प्रभावित नहीं करता है।
- इनपुट
- अवलोकन स्थान ,
- राज्य स्थान ,
- प्रारंभिक संभावनाओं की श्रृंखला ऐसा है कि इसकी संभावना को संग्रहीत करता है ,
- अवलोकनों का क्रम ऐसा है कि यदि समय पर अवलोकन है ,
- स्टोकेस्टिक मैट्रिक्स आकार का ऐसा है कि राज्य से पारगमन की संक्रमण संभावना को संग्रहीत करता है कहना ,
- हिडन मार्कोव मॉडल आकार का ऐसा है कि अवलोकन की संभावना को संग्रहीत करता है राज्य से .
- आउटपुट
- सबसे संभावित छिपा हुआ राज्य क्रम
फलन VITERBI प्रत्येक राज्य के लिए करना
के लिए समाप्त
प्रत्येक अवलोकन के लिए करना प्रत्येक राज्य के लिए करना
के लिए समाप्त के लिए समाप्त
के लिए करना
के लिए समाप्त
वापस करना
अंत फलन
पाइथॉन (प्रोग्रामिंग भाषा) के निकट संक्षिप्त रूप में पुन: प्रस्तुत:
फलन विटरबी टीएम: संक्रमण मैट्रिक्स एम: उत्सर्जन मैट्रिक्स
प्रत्येक अवलोकन को देखते हुए प्रत्येक स्थिति की संभाव्यता बनाए रखना बैकपॉइंटर को सर्वोत्तम पूर्व स्थिति में रखने के लिए
एस इन के लिए : समय 0 पर प्रत्येक छिपी हुई स्थिति की संभावना निर्धारित करें…
ओ इन के लिए : ...और उसके पश्चात्, प्रत्येक राज्य की सबसे संभावित पूर्व स्थिति पर नज़र रखते हुए, k
एस इन के लिए :
सर्वोत्तम अंतिम स्थिति का k ज्ञात करें ओ इन के लिए : पिछले अवलोकन से पीछे हटें
सबसे संभावित पथ पर पिछली स्थिति डालें सर्वोत्तम पिछली स्थिति खोजने के लिए बैकपॉइंटर का उपयोग करें
वापस करना
- व्याख्या
मान लीजिए हमें राज्य स्थान के साथ छिपा हुआ मार्कोव मॉडल (एचएमएम) दिया गया है , प्रारंभिक संभावनाएँ राज्य में होने का और संक्रमण की संभावनाएँ राज्य से परिवर्तन का कहना . मान लीजिए, हम आउटपुट देखते हैं . सबसे संभावित राज्य अनुक्रम जो अवलोकन उत्पन्न करता है वह पुनरावृत्ति संबंधों द्वारा दिया जाता है[10]
यहाँ सबसे संभावित स्थिति अनुक्रम की संभावना है पहले के लिए जिम्मेदार जो अवलोकन हैं इसकी अंतिम अवस्था के रूप में। विटर्बी पथ को बैक पॉइंटर्स को सहेजकर पुनः प्राप्त किया जा सकता है जो कि किस स्थिति को याद रखते हैं दूसरे समीकरण में उपयोग किया गया था। होने देना वह फलन बनें जो का मान लौटाता है गणना करते थे यदि , या यदि . तब
यहां हम arg max की मानक परिभाषा का उपयोग कर रहे हैं।
इस कार्यान्वयन की जटिलता है . उत्तम अनुमान तब उपस्थित होता है जब आंतरिक लूप में अधिकतम केवल उन राज्यों पर पुनरावृत्ति करके पाया जाता है जो सीधे वर्तमान स्थिति से जुड़े होते हैं (अर्थात वहां से बढ़त होती है) को ). फिर अमूर्त विश्लेषण का उपयोग करके कोई यह दिखा सकता है कि जटिलता क्या है , कहाँ ग्राफ़ में किनारों की संख्या है.
उदाहरण
एक ऐसे गांव पर विचार करें जहां सभी ग्रामीण या मध्य स्वस्थ हैं या उन्हें बुखार है, और केवल गांव का डॉक्टर ही यह निर्धारित कर सकता है कि प्रत्येक को बुखार है या नहीं। डॉक्टर मरीजों से यह पूछकर बुखार का निदान करते हैं कि उन्हें कैसा अनुभूत हो रहा है। ग्रामीण केवल यही उत्तर दे सकते हैं कि उन्हें सामान्य, चक्कर या ठंड लग रही है।
डॉक्टर का मानना है कि मरीजों की स्वास्थ्य स्थिति अलग मार्कोव श्रृंखला के रूप में संचालित होती है। दो अवस्थाएँ हैं, स्वस्थ्य और ज्वर, किन्तु डॉक्टर उनका सीधे निरीक्षण नहीं कर सकते; वे डॉक्टर से छिपे हुए हैं। प्रत्येक दिन, इस बात की निश्चित संभावना होती है कि मरीज डॉक्टर को बताएगा कि मुझे सामान्य अनुभूत हो रहा है, मुझे ठंड लग रही है, या मुझे चक्कर आ रहा है, यह मरीज की स्वास्थ्य स्थिति पर निर्भर करता है।
छिपी हुई स्थिति (स्वस्थ, बुखार) के साथ अवलोकन (सामान्य, सर्दी, चक्कर आना) छिपे हुए मार्कोव मॉडल (एचएमएम) का निर्माण करते हैं, और इसे पायथन (प्रोग्रामिंग भाषा) में निम्नानुसार दर्शाया जा सकता है:
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},
}
कोड के इस टुकड़े में, start_p
डॉक्टर के इस विश्वास का प्रतिनिधित्व करता है कि जब मरीज पहली बार आता है मध्य एचएमएम किस स्थिति में होता है (डॉक्टर केवल इतना जानता है कि मरीज स्वस्थ है)। यहां उपयोग किया गया विशेष संभाव्यता वितरण संतुलन नहीं है, जो (संक्रमण संभावनाओं को देखते हुए) लगभग है {'Healthy': 0.57, 'Fever': 0.43}
. transition_p
e> अंतर्निहित मार्कोव श्रृंखला में स्वास्थ्य स्थिति में परिवर्तन का प्रतिनिधित्व करता है। इस उदाहरण में, मरीज जो आज स्वस्थ है, उसे कल बुखार होने की केवल 30% संभावना है। emit_p
ई> दर्शाता है कि अंतर्निहित स्थिति (स्वस्थ या बुखार) को देखते हुए, प्रत्येक संभावित अवलोकन (सामान्य, सर्दी, या चक्कर आना) की कितनी संभावना है। मरीज जो स्वस्थ है उसके सामान्य अनुभूत करने की 50% संभावना है; जिस व्यक्ति को बुखार है उसे चक्कर आने की संभावना 60% है।
एक मरीज लगातार तीन दिन दौरा करता है, और डॉक्टर को पता चलता है कि मरीज को पहले दिन सामान्य अनुभूत होता है, दूसरे दिन ठंड लगती है, और तीसरे दिन चक्कर आता है। डॉक्टर का प्रश्न है: रोगी की स्वास्थ्य स्थितियों का सबसे संभावित क्रम क्या है जो इन टिप्पणियों की व्याख्या करेगा? इसका उत्तर विटर्बी एल्गोरिथम द्वारा दिया गया है।
<सिंटैक्सहाइलाइट लैंग=पायथन लाइन=1 > डीईएफ़ विटरबी(अवलोकन, स्थिति, प्रारंभ_पी, ट्रांस_पी, एमिट_पी):
वी = [{}] राज्यों में अनुसूचित जनजाति के लिए: वी[0] [एसटी] = {संभावना: प्रारंभ_पी[एसटी] * एमिट_पी[एसटी] [अवलोकन[0, पिछला: कोई नहीं} # जब t > 0 हो मध्य Viterbi चलाएँ रेंज में टी के लिए (1, लेन (ओब्स)): वी.संलग्न करें({}) राज्यों में अनुसूचित जनजाति के लिए: max_tr_prob = V[t - 1] [राज्य[0 [prob] * trans_p[राज्य[0 [st] * emotional_p[st] [obs[t] prev_st_selected = स्थितियाँ[0] राज्यों में prev_st के लिए[1:]: tr_prob = V[t - 1] [prev_st] [prob ] * trans_p[prev_st] [st] * edit_p[st] [obs[t यदि tr_prob > max_tr_prob: max_tr_prob = tr_prob prev_st_selected = prev_st
max_prob = max_tr_prob V[t] [st] = {संभावना: max_prob, पिछला: prev_st_selected}
dptable(V) में लाइन के लिए: प्रिंट(लाइन)
ऑप्ट = [] अधिकतम_प्रोब = 0.0 best_st = कोई नहीं # सबसे संभावित स्थिति और उसका बैकट्रैक प्राप्त करें सेंट के लिए, V[-1].आइटम() में डेटा: यदि डेटा[ समस्या ] > max_prob: max_prob = डेटा[संभावना] best_st = st ऑप्ट.एपेंड(best_st) पिछला = best_st
# पहले अवलोकन तक बैकट्रैक का पालन करें रेंज में टी के लिए (लेन (वी) - 2, -1, -1): opt.insert(0, V[t + 1] [पिछला] [पिछला]) पिछला = वी[टी + 1] [पिछला] [पिछला]
प्रिंट करें (राज्यों के चरण + .join(opt) + %s % max_prob की उच्चतम संभावना के साथ हैं)
डीईएफ़ डीपीटेबल(वी):
# शब्दकोश से चरणों की तालिका प्रिंट करें उपज * 5 + .join(( %3dd% i) i के लिए रेंज में(len(V))) V[0] में राज्य के लिए: उपज�%.7s:7% स्थिति + .join( .7s.% ( %lf%% v[state] [prob ]) for v in V)
</सिंटैक्सहाइलाइट>
कार्यक्रम viterbi
निम्नलिखित तर्क लेता है: obs
अवलोकनों का क्रम है, उदा. ['normal', 'cold', 'dizzy']
; states
छिपी हुई अवस्थाओं का समूह है; start_p
प्रारंभ संभावना है; trans_p
संक्रमण संभावनाएँ हैं; और emit_p
उत्सर्जन संभावनाएँ हैं। कोड की सरलता के लिए, हम मानते हैं कि अवलोकन अनुक्रम obs
गैर-रिक्त है और वह trans_p[i] [j]
और emit_p[i] [j]
सभी राज्यों i,j के लिए परिभाषित किया गया है।
चल रहे उदाहरण में, फ़ॉरवर्ड/विटर्बी एल्गोरिदम का उपयोग निम्नानुसार किया जाता है:
viterbi(obs,
states,
start_p,
trans_p,
emit_p)
स्क्रिप्ट का आउटपुट है
$ 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
इससे पता चलता है कि अवलोकन ['normal', 'cold', 'dizzy']
संभवतः राज्यों द्वारा उत्पन्न किए गए थे ['Healthy', 'Healthy', 'Fever']
. दूसरे शब्दों में, देखी गई गतिविधियों को देखते हुए, रोगी के पहले दिन और दूसरे दिन भी स्वस्थ रहने की संभावना थी (उस दिन ठंड अनुभूत होने के अतिरिक्त), और केवल तीसरे दिन बुखार होने की संभावना थी।
विटर्बी के एल्गोरिदम के संचालन को इसके माध्यम से देखा जा सकता है ट्रेलिस आरेख#ट्रेलिस आरेख। विटर्बी पथ मूलतः सबसे छोटा है इस जाली के माध्यम से पथ.
सॉफ्ट आउटपुट विटर्बी एल्गोरिदम
सॉफ्ट आउटपुट विटर्बी एल्गोरिदम (SOVA) क्लासिकल विटर्बी एल्गोरिदम का प्रकार है।
SOVA मौलिक विटरबी एल्गोरिदम से इस मायने में भिन्न है कि यह संशोधित पथ मीट्रिक का उपयोग करता है जो इनपुट प्रतीकों की प्राथमिक संभाव्यता| फैसले का.
SOVA में पहला कदम उत्तरजीवी पथ का चयन करना है, जो प्रत्येक समय तत्काल अद्वितीय नोड, 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 में विटरबी डिकोडिंग के लिए कोड सम्मिलित है।
श्रेणी:त्रुटि का पता लगाना और सुधार करना श्रेणी:गतिशील प्रोग्रामिंग श्रेणी:मार्कोव मॉडल श्रेणी: पायथन (प्रोग्रामिंग भाषा) कोड के उदाहरण वाले लेख