업데이트 2021 : 설치 가능한 파이썬 패키지
일부 공통 연결주의 시간 분류 (CTC) 디코딩 알고리즘의 파이썬 구현. 최소한의 언어 모델이 제공됩니다.
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 Array, SoftMax 이미 적용)는 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 검색 디코더는 최상의 경로 디코딩으로 첫 번째 근사치를 계산합니다. 그런 다음 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 은 BATCH DIMENSION과 함께 TXBXC 모양을 갖습니다.mat = rnn_output[:, 0, :]권장 디코더 :
best_path : 모든 알고리즘 중 가장 빠른 가장 빠른 경로 (또는 욕심 많은) 디코더이지만 다른 디코더는 종종 더 잘 작동합니다.beam_search : 빔 검색 디코더는 exectionally language 모델을 선택적으로 통합하여 빔 폭 너비 매개 변수를 통해 조정할 수 있습니다.lexicon_search : Lexicon Search Decoder, 사전에서 최고의 점수를 반환합니다.내 경험에서 나온 다른 디코더는 실제 목적에 실제로 적합하지 않지만 실험이나 연구에 사용될 수 있습니다.
prefix_search : 접두사 검색 디코더token_passing : 토큰 전달 알고리즘extras/ Folder 참조)이 논문은 최상의 경로 디코딩, 빔 검색 디코딩 및 토큰 통과를 사용할 때 제안을합니다.