Wie berechnet man den BLEU-Score in Python?
Der BLEU-Score in Python ist eine Metrik, die die Güte von maschinellen Übersetzungsmodellen misst. Ursprünglich wurde er nur für Übersetzungsmodelle entwickelt, wird jedoch mittlerweile auch für andere Anwendungen der natürlichen Sprachverarbeitung verwendet. Der BLEU-Score vergleicht einen Satz mit einem oder mehreren Referenzsätzen und zeigt, wie gut der Kandidatensatz mit der Liste der Referenzsätze übereinstimmt. Das Ergebnis liegt zwischen 0 und 1. Ein BLEU-Score von 1 bedeutet, dass der Kandidatensatz perfekt mit einem der Referenzsätze übereinstimmt. Diese Metrik wird häufig zur Bewertung von Bildbeschreibungsmodellen verwendet. In diesem Tutorial verwenden wir die Funktion sentence_bleu()
aus der nltk-Bibliothek. Los geht’s!
Berechnung des BLEU-Scores in Python
Um den BLEU-Score zu berechnen, müssen wir die Referenz- und Kandidatensätze in Form von Token bereitstellen.
Wir lernen in diesem Abschnitt, wie das funktioniert und wie wir den Score berechnen. Beginnen wir mit dem Import der notwendigen Module.
from nltk.translate.bleu_score import sentence_bleu
Jetzt können wir die Referenzsätze in Form einer Liste eingeben. Außerdem müssen die Sätze in Tokens umgewandelt werden, bevor sie an die Funktion sentence_bleu()
übergeben werden.
1. Eingabe und Aufteilung 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 Funktion split
in Tokens 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 Tokenform aus. Jetzt können wir die Funktion sentence_bleu()
aufrufen, um den Score zu berechnen.
2. Berechnung des BLEU-Scores in Python
Um den Score 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 einen perfekten Score von 1, da der Kandidatensatz Teil der Referenzliste ist. Versuchen wir einen anderen Satz.
candidate = 'it is a dog'.split()
print('BLEU score -> {}'.format(sentence_bleu(reference, candidate)))
Ausgabe:
BLEU score -> 0.8408964152537145
Der Satz befindet sich in unserer Referenzliste, entspricht jedoch nicht exakt einem Referenzsatz. Deshalb erhalten wir einen Score von 0,84.
3. Vollständiger Code zur Berechnung des BLEU-Scores in Python
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 Abgleich von Sätzen können Sie festlegen, wie viele Wörter das Modell gleichzeitig abgleichen soll. Sie können beispielsweise Wörter einzeln (1-Gramm), paarweise (2-Gramm) oder in Dreiergruppen (3-Gramm) vergleichen.
In der Funktion sentence_bleu()
können Sie ein Argument mit Gewichten für die jeweiligen n-Gramme übergeben.
Beispiele für die Berechnung einzelner n-Gramme:
- Einzelnes 1-Gramm: (1, 0, 0, 0)
- Einzelnes 2-Gramm: (0, 1, 0, 0)
- Einzelnes 3-Gramm: (0, 0, 1, 0)
- Einzelnes 4-Gramm: (0, 0, 0, 1)
Python-Code für diese Berechnungen:
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 kumulativen 4-Gramm-BLEU-Score, auch BLEU-4 genannt. Die Gewichte für BLEU-4 sind:
(0.25, 0.25, 0.25, 0.25)
Hier ist der Code für BLEU-4:
score = sentence_bleu(reference, candidate, weights=(0.25, 0.25, 0.25, 0.25))
print(score)
Ausgabe:
0.8408964152537145
Das ist der gleiche Score, den wir ohne die zusätzlichen n-Gramm-Gewichte erhalten haben.
Fazit
In diesem Tutorial ging es um die Berechnung des BLEU-Scores in Python. Wir haben gelernt, was er ist und wie man einzelne und kumulative n-Gramm-BLEU-Scores berechnet. Wir hoffen, Sie hatten Spaß beim Lernen!