UPDATE 2021: Paket Python yang Dapat Diinstal
Implementasi Python dari beberapa algoritma decoding klasifikasi temporal (CTC) . Model bahasa minimalis disediakan.
pip install .tests/ dan jalankan pytest untuk memeriksa apakah instalasi berhasil Berikut adalah contoh yang dapat dieksekusi minimalis:
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 ) } "' ) mat keluaran (array numpy, softmax sudah diterapkan) dari jaringan saraf yang dilatih CTC diharapkan memiliki bentuk TXC dan dilewati sebagai argumen pertama untuk decoder. T adalah jumlah langkah waktu, dan C jumlah karakter (CTC-blank adalah elemen terakhir). Karakter yang dapat diprediksi oleh jaringan saraf dilewatkan sebagai string chars ke decoder. Decoders mengembalikan string yang diterjemahkan.
Menjalankan output kode:
Best path: ""
Beam search: "a"
Untuk melihat lebih banyak contoh tentang cara menggunakan decoder, silakan lihat skrip di tests/ folder.
Pencarian balok secara opsional dapat mengintegrasikan model bahasa tingkat karakter. Statistik teks (bigrams) digunakan oleh pencarian balok untuk meningkatkan akurasi membaca.
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 )Decoder pencarian leksikon menghitung perkiraan pertama dengan decoding jalur terbaik. Kemudian, ia menggunakan bk-tree untuk mengambil kata-kata yang sama, skornya dan akhirnya mengembalikan kata skor terbaik. BK-Tree dibuat dengan memberikan daftar kata-kata kamus. Parameter toleransi mendefinisikan jarak edit maksimum dari kata kueri ke kata kamus yang dikembalikan.
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 )Beberapa catatan:
rnn_output memiliki bentuk TXBXC, dengan B dimensi batchmat = rnn_output[:, 0, :]Decoder yang direkomendasikan:
best_path : Decoder Jalur Terbaik (atau Serakah), yang tercepat dari semua algoritma, namun, decoder lain sering berkinerja lebih baikbeam_search : Decoder pencarian balok, secara opsional mengintegrasikan model bahasa tingkat karakter, dapat disetel melalui parameter lebar baloklexicon_search : Decoder pencarian leksikon, mengembalikan kata penilaian terbaik dari kamusDecoder lain, dari pengalaman saya tidak benar -benar cocok untuk tujuan praktis, tetapi dapat digunakan untuk eksperimen atau penelitian:
prefix_search : Decoder pencarian awalantoken_passing : Algoritma Passing Tokenextras/ Folder)Makalah ini memberikan saran kapan harus menggunakan decoding jalur terbaik, decoding pencarian balok dan passing token.