CTCDecoder
1.0.0
更新2021:インストール可能なPythonパッケージ
いくつかの一般的なコネクショニストの時間的分類(CTC)デコードアルゴリズムのPython実装。最小言語モデルが提供されます。
pip install .tests/ pytestを実行して、インストールが機能するかどうかを確認しますこれが最小限の実行可能な例です。
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 ) } "' ) CTCトレーニングされたニューラルネットワークの出力mat (numpyアレイ、既に適用されている)は、形状TXCを持つと予想され、デコーダへの最初の引数として渡されます。 Tはタイムステップ数であり、C文字の数(CTCブランクが最後の要素です)。ニューラルネットワークによって予測できる文字は、 chars文字列としてデコーダーに渡されます。デコーダはデコードされた文字列を返します。
コード出力の実行:
Best path: ""
Beam search: "a"
デコーダの使用方法に関する例をもっと見るには、 tests/フォルダーのスクリプトをご覧ください。
ビーム検索は、オプションで文字レベルの言語モデルを統合できます。テキスト統計(BIGRAMS)は、ビーム検索で使用されて読みの精度を向上させます。
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 )Lexicon Search Decoderは、最適なパスデコードを使用した最初の近似を計算します。次に、BK-Treeを使用して同様の単語を取得し、スコアリングし、最終的に最高の得点単語を返します。 BK-Treeは、辞書の単語のリストを提供することにより作成されます。許容範囲パラメーターは、クエリ単語から返された辞書ワードまでの最大編集距離を定義します。
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 )いくつかのメモ:
rnn_outputの出力にはTXBXCの形状があり、Bはバッチディメンションを備えていますmat = rnn_output[:, 0, :]推奨デコーダ:
best_path :すべてのアルゴリズムの中で最速であるベストパス(または貪欲な)デコーダーですが、他のデコーダーはパフォーマンスが良くなることがよくありますbeam_search :beam searchデコーダーは、オプションで文字レベルの言語モデルを統合し、ビーム幅パラメーターを介して調整できますlexicon_search :lexicon search decoder、辞書から最高のスコアリングワードを返します私の経験からの他のデコーダーは、実際には実用的な目的には適していませんが、実験や研究に使用される場合があります。
prefix_search :プレフィックス検索デコーダーtoken_passing :トークン通過アルゴリズムextras/フォルダーを参照)このホワイトペーパーでは、最適なパスデコード、ビーム検索デコード、トークンの通過を使用する時期を提案します。