Update 2021: Installierbares Python -Paket
Python -Implementierung einiger gemeinsamer verbindungsorientierter zeitlicher Klassifizierungsalgorithmen (CTC) . Ein minimalistisches Sprachmodell wird bereitgestellt.
pip install .tests/ und führen Sie pytest aus, um zu überprüfen, ob die Installation funktioniert Hier ist ein minimalistisch ausführbares Beispiel:
import numpy as np
from ctc_decoder import best_path , beam_search
mat = np . array ([[ 0.4 , 0 , 0.6 ], [ 0.4 , 0 , 0.6 ]])
chars = 'ab'
print ( f'Best path: " { best_path ( mat , chars ) } "' )
print ( f'Beam search: " { beam_search ( mat , chars ) } "' ) Es wird erwartet, dass die mat (Numpy Array, Softmax, die bereits angewendet wurde) des von CTC ausgebildeten neuronalen Netzwerks, eine Form von TXC aufweist und als erstes Argument an die Decoder übergeben wird. T ist die Anzahl der Zeitschritte und c die Anzahl der Zeichen (die CTC-Blank ist das letzte Element). Die Charaktere, die vom neuronalen Netzwerk vorhergesagt werden können, werden als chars -String an den Decoder übergeben. Decoder geben die dekodierte Zeichenfolge zurück.
Ausführen der Codeausgänge:
Best path: ""
Beam search: "a"
Weitere Beispiele zur Verwendung der Decoder sehen Sie sich die Skripte in den tests/ den Ordner an.
Die Strahlsuche kann optional ein Sprachmodell auf Zeichenebene integrieren. Textstatistiken (BigRams) werden durch Strahlsuche verwendet, um die Lesegenauigkeit zu verbessern.
from ctc_decoder import beam_search , LanguageModel
# create language model instance from a (large) text
lm = LanguageModel ( 'this is some text' , chars )
# and use it in the beam search decoder
res = beam_search ( mat , chars , lm = lm )Der Lexikon -Search -Decoder berechnet eine erste Näherung mit dem besten Pfaddecodieren. Anschließend wird ein BK-Baum verwendet, um ähnliche Wörter abzurufen, sie zu bewerten und schließlich das beste Bewertungswort zurückzugeben. Der BK-Baum wird erstellt, indem eine Liste von Wörterbuchwörtern bereitgestellt wird. Ein Toleranzparameter definiert den maximalen Bearbeitungsabstand vom Abfragewort bis zu den zurückgegebenen Wörterbuchwörtern.
from ctc_decoder import lexicon_search , BKTree
# create BK-tree from a list of words
bk_tree = BKTree ([ 'words' , 'from' , 'a' , 'dictionary' ])
# and use the tree in the lexicon search
res = lexicon_search ( mat , chars , bk_tree , tolerance = 2 )Einige Notizen:
rnn_output TXBXC mit b der Stapelabmessung Formmat = rnn_output[:, 0, :]Empfohlene Decoder:
best_path : Bester Pfad (oder gieriger) Decoder, der schnellste aller Algorithmen, aber andere Decoder funktionieren oft besserbeam_search : Strahlsuchdecoder, integriert optional ein Sprachmodell auf Zeichenebene, kann über den Parameter der Strahlbreite abgestimmt werdenlexicon_search : Lexicon -Suchdecoder, gibt das beste Bewertungswort aus einem Wörterbuch zurückAndere Decoder, aus meiner Erfahrung, die nicht wirklich für praktische Zwecke geeignet sind, sondern für Experimente oder Forschung verwendet werden können:
prefix_search : Präfix -Suchdecodertoken_passing : Token -Passing -Algorithmusextras/ Ordner)Dieses Papier gibt Vorschläge, wann Sie die beste Pfaddecodierung, die Strahlsuche und das Token -Pass verwenden können.