Beispiel für die Implementierung von Baum-Welch

8

Ich versuche, etwas über den Baum-Welch-Algorithmus zu lernen (mit einem versteckten Markov-Modell). Ich verstehe die grundlegende Theorie von Vorwärts-Rückwärts-Modellen, aber es wäre schön, wenn jemand mit etwas Code dazu beitragen würde, es zu erklären (ich finde es einfacher, Code zu lesen, weil ich herumspielen kann, um es zu verstehen). Ich überprüfte Github und Bitbucket und fand nichts, was leicht verständlich war.

Es gibt viele HMM-Tutorials im Netz, aber die Wahrscheinlichkeiten sind entweder bereits vorhanden oder, im Fall von Rechtschreibprüfern, fügen Sie Wörter hinzu, um die Modelle zu erstellen. Es wäre cool, wenn jemand Beispiele dafür hätte, ein Baum-Welch-Modell mit nur den Beobachtungen zu erstellen. Zum Beispiel in Ссылка , wenn Sie nur:

%Vor%

Dies ist nur ein Beispiel, ich denke, jedes Beispiel, das es erklärt und wir können mit dem Guten spielen, um es besser zu verstehen, ist großartig. Ich habe ein spezifisches Problem, das ich zu lösen versuche, aber ich dachte, es wäre vielleicht wertvoller, Code zu zeigen, von dem Leute lernen und sich auf ihre eigenen Probleme anwenden können (wenn es nicht akzeptabel ist, kann ich mein eigenes Problem veröffentlichen). Wenn es möglich ist, wäre es nett, es in Python (oder Java) zu haben.

Vielen Dank im Voraus!

    
Lostsoul 31.10.2011, 19:35
quelle

1 Antwort

11

Hier ist ein Code, den ich vor einigen Jahren für einen Kurs geschrieben habe, basierend auf der Präsentation in Jurafsky / Martin (2. Auflage, Kapitel 6, wenn Sie Zugriff auf das Buch haben). Es ist wirklich nicht sehr guter Code, benutzt numpy nicht, was es unbedingt tun sollte, und es macht etwas Mist, wenn die Arrays 1-indexiert werden anstatt nur die Formeln zu optimieren, die 0-indexiert werden sollen, aber, naja, vielleicht wird es das auch Hilfe. Baum-Welch wird im Code als "vorwärts-rückwärts" bezeichnet.

Die Beispiel- / Testdaten basieren auf Jason Eisners Tabelle , die einige HMM-bezogene Daten implementiert Algorithmen. Beachten Sie, dass die implementierte Version des Modells einen absorbierenden END-Zustand verwendet, für den andere Zustände Übergangswahrscheinlichkeiten haben, anstatt eine vorher existierende feste Sequenzlänge anzunehmen.

(Auch verfügbar als Kern , wenn Sie bevorzugen.)

hmm.py , von denen die Hälfte Code basierend auf den folgenden Dateien testet:

%Vor%

observations.txt , eine Folge von Beobachtungen zum Testen:

%Vor%

example.hmm , das zum Generieren der Daten verwendete Modell

%Vor%     
Dougal 01.11.2011, 05:12
quelle