Was ist ein relativ einfacher Weg, um die Wahrscheinlichkeit zu bestimmen, dass ein Satz auf Englisch ist?

8

Ich habe eine Reihe von Zeichenfolgen (Zeichensätze), die Sätze in verschiedenen Sprachen darstellen, sagen wir:

  
    

Hallo, mein Name ist George.

         

Das Brot ist gut.

         

... usw.

  

Ich möchte jedem von ihnen Punkte (von 0 .. 1) zuweisen, die die Wahrscheinlichkeit angeben, dass sie englische Sätze sind. Gibt es einen akzeptierten Algorithmus (oder eine Python-Bibliothek), um dies zu tun?

Hinweis: Es ist mir egal, ob die Grammatik des englischen Satzes perfekt ist.

    
sdasdadas 08.02.2013, 04:23
quelle

3 Antworten

8

Ein Bayesian Classifier wäre eine gute Wahl für diese Aufgabe:

%Vor%     
Raymond Hettinger 08.02.2013, 04:25
quelle
6

Ich weiß, dass die Antwort akzeptiert wurde, aber normalerweise wird die Sprachidentifikation mit Charakter-N-Gramm-Modellen durchgeführt, nicht mit Bag-of-Word-Modellen, wie Raymond es vorschlägt. Dies ist nicht das Gleiche wie die Verwendung von N-Gram-Merkmalen in einem Klassifizierer (tatsächlich wird die Verwendung eines Klassifizierers normalerweise nicht durchgeführt oder ist wirklich notwendig, zumindest nicht im herkömmlichen Sinne). Der Grund dafür ist, dass oft nur ein paar Zeichen ausreichen können, um die Sprache zu identifizieren, während Bag-of-words-basierte Klassifikatoren (und mehr Bag-of-Ngrams) die gleichen Wörter oder Phrasen benötigen, wie sie in gesehen wurden Ausbildung. Charakterbasierte Modelle dagegen können mit wenig Training und fast ohne Daten verwendet werden, um die Identifikation zu machen.

So funktioniert es. Wir betrachten einen String als eine Folge der enthaltenen Zeichen (einschließlich der Leerzeichen und Interpunktionszeichen). Wir bauen ein N-Gramm-Sprachmodell dieser Zeichenfolgen auf, wobei n = 3 ausreichend sein sollte, aber Sie werden mehr Genauigkeit mit n = 5 oder n = 6 erhalten (auf Kosten der richtigen Glättung, die oder möglicherweise nicht einfach je nachdem, wie Sie dies tun)! Nehmen wir an, wir haben ein Zeichen-N-Gramm-Modell mit n = 3 für zwei Sprachen, Französisch und Englisch. Unter diesem Modell ist die Wahrscheinlichkeit einer Zeichenfolge:

c = c_1, c_2 ... c_n

wobei jedes c_i ein Zeichen ist (einschließlich Leerzeichen, Interpunktion usw.) ist:

p (c) = p (c_1) * p (c_2 | c_1) * p (c_3 | c_2, c_1) ... p (c_n | c_n-1, c_n-2)

Nun, wenn wir Modelle für Französisch und Englisch haben, bedeutet dies, dass es für jede Sprache eine Reihe von Parametern für diese Verteilung gibt. Dies sind wirklich nur Tabellen, die die bedingten Wahrscheinlichkeiten von c_i (c_i-1, c_i-2) angeben, für die der Maximum-Likelihood-Schätzer einfach ist:

count (c_i-2, c_i-1, c) / count (c_i-2, c_i-1)

Obwohl die Maximum-Likelihood-Schätzung für die Sprachmodellierung aufgrund des Problems, 0 Wahrscheinlichkeiten zu erhalten, grundsätzlich nicht erfolgt, spielt die obige Likelihood-Funktion eine große Rolle in den Parameterschätzungen (sie wird nur geglättet werden müssen).

Wenn Sie also lediglich entscheiden, in welcher Sprache sich die Zeichenfolge c befindet, bewerten Sie die Wahrscheinlichkeit unter den Sprachmodellen, die Sie für die Sprachen gelernt haben, an denen Sie interessiert sind, und beurteilen Sie die Zeichenfolge vom Modell sein und ihm die höchste Wahrscheinlichkeit zuweisen (dies entspricht einem Bayes'schen Klassifikator mit einem einheitlichen Prior bei Klassen, dh Sprachen, wobei die angenommene Verteilung jedoch die eines N-Gramm-Modells ist, nicht a Naive Bayes / multinomial).

Es gibt eine Menge von Orten, die Sie über die Sprachmodellierung lesen können: Ein sehr gutes Tutorial finden Sie in Josh Goodmans Epos (obwohl es ein bisschen ist nicht mehr aktuell, die Ideen bleiben unverändert und sind mehr als ausreichend für Ihre Zwecke). Sie können sich die Wikipedia-Seite ansehen, in der Sie sehen, dass das Unigramm-Modell einer multinomialen Verteilung entspricht.

Und schließlich, wenn Sie nach einer Python-Implementierung von Sprachmodellen suchen, ist das wahrscheinlich am häufigsten verwendete NLTK .

    
Ben Allison 11.02.2013 10:07
quelle
2

Sie finden einige Vorschläge für Python-Bibliotheken hier und hier .

Ein weiterer einfacher Algorithmus, wenn Sie ein Korpus für jede Sprache haben, können Sie die Satzsprache mit einer einfachen Suche in der Häufigkeitstabelle der Wörter erkennen.

    
iTech 08.02.2013 04:44
quelle

Tags und Links