사전 및 LM(언어 모델)을 갖춘 연결주의 시간 분류(CTC) 디코더입니다.
pip install .
tests/
로 이동하여 pytest
실행하여 설치가 작동했는지 확인하세요. 다음 장난감 예는 단어 빔 검색을 사용하는 방법을 보여줍니다. 가상 모델(예: 텍스트 인식 모델)은 "a", "b" 및 " "(공백)의 3가지 문자를 인식할 수 있습니다. 해당 장난감 예제의 단어에는 "a" 및 "b" 문자가 포함될 수 있습니다(단, 단어 구분 기호인 " "는 포함되지 않음). 언어 모델은 "a"와 "ba"라는 두 단어만 포함하는 텍스트 코퍼스에서 학습됩니다.
이 코드 조각에서는 단어 빔 검색 인스턴스가 생성되고 TxBx(C+1) 모양의 numpy 배열이 디코딩됩니다.
import numpy as np
from word_beam_search import WordBeamSearch
corpus = 'a ba' # two words "a" and "ba", separated by whitespace
chars = 'ab ' # the characters that can be recognized (in this order)
word_chars = 'ab' # characters that form words
# RNN output
# 3 time-steps and 4 characters per time time ("a", "b", " ", CTC-blank)
mat = np . array ([[[ 0.9 , 0.1 , 0.0 , 0.0 ]],
[[ 0.0 , 0.0 , 0.0 , 1.0 ]],
[[ 0.6 , 0.4 , 0.0 , 0.0 ]]])
# initialize word beam search (only do this once in your code)
wbs = WordBeamSearch ( 25 , 'Words' , 0.0 , corpus . encode ( 'utf8' ), chars . encode ( 'utf8' ), word_chars . encode ( 'utf8' ))
# compute label string
label_str = wbs . compute ( mat )
디코더는 각 배치 요소에 대해 디코딩된 레이블 문자열이 포함된 목록을 반환합니다. 마지막으로 문자열을 얻으려면 각 레이블을 해당 문자에 매핑하십시오.
char_str = [] # decoded texts for batch
for curr_label_str in label_str :
s = '' . join ([ chars [ label ] for label in curr_label_str ])
char_str . append ( s )
예:
tests/test_word_beam_search.py
에서 찾을 수 있습니다. WordBeamSearch
클래스 생성자의 매개변수:
0<len(wordChars)<len(chars)
. 단일 단어만 감지해야 하는 경우 구분 문자가 필요하지 않으므로 두 매개변수가 동일할 수도 있습니다. 0<len(wordChars)<=len(chars)
WordBeamSearch.compute
메서드에 입력:
워드빔 검색은 CTC 디코딩 알고리즘입니다. 필기 텍스트 인식이나 자동 음성 인식과 같은 시퀀스 인식 작업에 사용됩니다.
단어빔 검색의 네 가지 주요 속성은 다음과 같습니다.
다음 샘플은 5개의 서로 다른 디코더에서 제공되는 결과와 함께 단어 빔 검색의 일반적인 사용 사례를 보여줍니다. 최상의 경로 디코딩 및 바닐라 빔 검색은 이러한 디코더가 광학 모델의 잡음이 있는 출력만 사용하기 때문에 잘못된 단어를 얻습니다. 문자 수준 LM으로 바닐라 빔 검색을 확장하면 가능한 문자 시퀀스만 허용하여 결과가 향상됩니다. 토큰 전달은 사전과 단어 수준 LM을 사용하므로 모든 단어를 올바르게 가져옵니다. 단, 숫자 등 임의의 문자열은 인식할 수 없습니다. 워드빔 검색은 사전을 이용하여 단어를 인식할 수 있지만, 단어가 아닌 문자도 정확하게 식별할 수 있습니다.
추가 정보:
extras/prototype/
extras/tf/
연구에 워드빔 검색을 사용하고 있다면 다음 논문을 인용해 주세요.
@inproceedings{scheidl2018wordbeamsearch,
title = {Word Beam Search: A Connectionist Temporal Classification Decoding Algorithm},
author = {Scheidl, H. and Fiel, S. and Sablatnig, R.},
booktitle = {16th International Conference on Frontiers in Handwriting Recognition},
pages = {253--258},
year = {2018},
organization = {IEEE}
}