Website-Suche

Wie berechnet man den BLEU-Score in Python?


Der Bleu-Score in Python ist ein Maß für die Qualität von maschinellen Übersetzungsmodellen. Ursprünglich wurde er nur für Übersetzungsmodelle entwickelt, wird jetzt jedoch auch für andere Anwendungen der Verarbeitung natürlicher Sprache verwendet.

Der BLEU-Score vergleicht einen Satz mit einem oder mehreren Referenzsätzen und zeigt an, wie gut der Kandidatensatz mit der Liste der Referenzsätze übereinstimmt. Er gibt eine Punktzahl zwischen 0 und 1 aus.

Ein BLEU-Score von 1 bedeutet, dass der Kandidatensatz perfekt mit einem der Referenzsätze übereinstimmt.

Dieses Maß ist eine gängige Metrik zur Messung von Bildbeschreibungsmodellen.

In diesem Tutorial werden wir die Funktion sentence_bleu() aus der NLTK-Bibliothek verwenden. Lassen Sie uns anfangen.

Den Bleu-Score in Python berechnen

Um den Bleu-Score zu berechnen, müssen wir die Referenz- und Kandidatensätze in Form von Tokens angeben.

Wir werden in diesem Abschnitt lernen, wie man das macht und die Punktzahl berechnet. Lassen Sie uns mit dem Import der notwendigen Module beginnen.

from nltk.translate.bleu_score import sentence_bleu

Jetzt können wir die Referenzsätze in Form einer Liste eingeben. Wir müssen auch Tokens aus den Sätzen erstellen, bevor wir sie an die Funktion sentence_bleu() übergeben.

1. Eingeben und Aufteilen der Sätze

Die Sätze in unserer Referenzliste sind:

    'this is a dog'
    'it is dog
    'dog it is'
    'a dog, it is'

Wir können sie mit der Split-Funktion in Token aufteilen.

reference = [
    'this is a dog'.split(),
    'it is dog'.split(),
    'dog it is'.split(),
    'a dog, it is'.split() 
]
print(reference)

Ausgabe :

[['this', 'is', 'a', 'dog'], ['it', 'is', 'dog'], ['dog', 'it', 'is'], ['a', 'dog,', 'it', 'is']]

So sehen die Sätze in Form von Token aus. Jetzt können wir die Funktion sentence_bleu() aufrufen, um den Score zu berechnen.

2. Berechnen Sie den BLEU-Score in Python

Um den Punktestand zu berechnen, verwenden Sie die folgenden Codezeilen:

candidate = 'it is dog'.split()
print('BLEU score -> {}'.format(sentence_bleu(reference, candidate)))

Ausgabe :

BLEU score -> 1.0

Wir erhalten eine perfekte Punktzahl von 1, da der Kandidatensatz zur Referenzgruppe gehört. Lassen Sie uns ein weiteres versuchen.

candidate = 'it is a dog'.split()
print('BLEU score -> {}'.format(sentence_bleu(reference, candidate)))

Ausgabe :

BLEU score -> 0.8408964152537145

Wir haben den Satz in unserem Referenzset, aber er ist keine exakte Übereinstimmung. Deshalb erhalten wir eine Punktzahl von 0,84.

3. Vollständiger Code zur Implementierung des BLEU-Scores in Python

Hier ist der komplette Code aus diesem Abschnitt.

from nltk.translate.bleu_score import sentence_bleu
reference = [
    'this is a dog'.split(),
    'it is dog'.split(),
    'dog it is'.split(),
    'a dog, it is'.split() 
]
candidate = 'it is dog'.split()
print('BLEU score -> {}'.format(sentence_bleu(reference, candidate )))

candidate = 'it is a dog'.split()
print('BLEU score -> {}'.format(sentence_bleu(reference, candidate)))

4. Berechnung des n-Gramm-Scores

Beim Abgleichen von Sätzen können Sie die Anzahl der Wörter wählen, die das Modell auf einmal abgleichen soll. Zum Beispiel können Sie wählen, dass Wörter einzeln (1-Gramm) abgeglichen werden. Alternativ können Sie auch wählen, Wörter in Paaren (2-Gramm) oder Triplets (3-Gramm) abzugleichen.

In diesem Abschnitt werden wir lernen, wie man diese n-Gramm-Punkte berechnet.

In der sentence_bleu() Funktion können Sie ein Argument mit Gewichten übergeben, die den einzelnen Grammen entsprechen.

Um beispielsweise die Grammwerte individuell zu berechnen, können Sie die folgenden Gewichte verwenden.

Individual 1-gram: (1, 0, 0, 0)
Individual 2-gram: (0, 1, 0, 0). 
Individual 3-gram: (1, 0, 1, 0). 
Individual 4-gram: (0, 0, 0, 1). 

Der Python-Code dafür ist unten angegeben:

from nltk.translate.bleu_score import sentence_bleu
reference = [
    'this is a dog'.split(),
    'it is dog'.split(),
    'dog it is'.split(),
    'a dog, it is'.split() 
]
candidate = 'it is a dog'.split()

print('Individual 1-gram: %f' % sentence_bleu(reference, candidate, weights=(1, 0, 0, 0)))
print('Individual 2-gram: %f' % sentence_bleu(reference, candidate, weights=(0, 1, 0, 0)))
print('Individual 3-gram: %f' % sentence_bleu(reference, candidate, weights=(0, 0, 1, 0)))
print('Individual 4-gram: %f' % sentence_bleu(reference, candidate, weights=(0, 0, 0, 1)))

Ausgabe :

Individual 1-gram: 1.000000
Individual 2-gram: 1.000000
Individual 3-gram: 0.500000
Individual 4-gram: 1.000000

Standardmäßig berechnet die Funktion sentence_bleu() den kumulierten 4-Gramm BLEU-Score, auch BLEU-4 genannt. Die Gewichte für BLEU-4 sind wie folgt:

(0.25, 0.25, 0.25, 0.25)

Sehen wir uns den BLEU-4-Code an:

score = sentence_bleu(reference, candidate, weights=(0.25, 0.25, 0.25, 0.25))
print(score)

Ausgabe :

0.8408964152537145

Das ist die genaue Punktzahl, die wir ohne die hinzugefügten n-Gramm-Gewichte erhalten haben.

Schlussfolgerung

Dieses Tutorial handelte von der Berechnung des BLEU-Scores in Python. Wir haben gelernt, was es ist und wie man individuelle und kumulative n-gram BLEU-Scores berechnet. Ich hoffe, du hattest Spaß beim Lernen mit uns!