Contents

RT Whisper 최적화

개요

  • RT Whisper에서 토큰 그룹화와 선택하는 방법을 변경했다.
  • 하이퍼파라미터 분석과 최적화 알고리즘을 통해 파라미터를 순차적으로 최적화 했다.
  • LibriSpeechASRcorpus 데이터셋에서는 Whisper와 Whisper Streaming 보다 더 높은 정확도와 레이턴시를 확인할 수 있었다.
  • ESIC 데이터셋에서는 Whisper와 Whisper Streaming 보다 더 낮은 정확도, Whisper Streaming 보다 아주 조금 빠른 레이턴시를 확인할 수 있었다.

RT Whisper 토큰 그룹화 및 선택 알고리즘 변경

기존 검색 방법

단어의 그룹화는 현재 청크에서 추론된 단어를 기반으로 수행된다. 먼저 현재 추론된 단어와 이전 청크에서 추론된 단어의 Overlap 된 시간대에 추론된 단어를 결정한다. 이때는 단어의 시작 시간을 기준으로 결정되며, 실제 Overlap된 청크의 시작시간과 끝시간을 기준으로 단어의 시작 시간이 이 구간에 포함되면 Overlap된 단어로 간주된다. 이때, 단어의 타임스탬프는 부정확하므로 tolerance를 주어 시작 시간과 끝 시간을 조금 확장해준다.

Overlap된 단어가 정해지면, 현재 추론된 단어를 기준으로 이전에 추론된 단어들과 그룹화를 한다. 이때 먼저 현재 추론된 단어를 기반으로 그룹이 만들어진다. 이 각 단어들은 각 그룹의 대표 단어가 된다. 이전에 추론된 단어들은 각 그룹의 대표 단어와 유사도를 탐색하고, 가장 높은 유사도를 가지는 그룹에 소속된다. 이때, 탐색하는 범위를 search-range(rg, sample rate 값이다)값으로 정해진다.

search-range(rg, sample rate 값이다.)값을 기반으로 검색한다. 예를 들어 rg 값이 16000이라면, 추론된 단어을 그룹화 할 때, 고려 대상으로 단어의 시작 시간을 기준으로 +-16000 범위 내의 단어를 검색한다. 이때, 자신의 이전 단어가 포함된 그룹부터 탐색을 시작한다. 즉 이전 단어가 포함된 그룹보다 앞선 시간대의 그룹과는 비교하지 않는다.

단어가 그룹을 탐색하며 대표 단어와 유사도를 비교한다. 유사도는 $ (\text{IoU} + \text{CosSim})/2 $ 이다. 탐색한 그룹의 대표 단어들과 유사도를 비교에서 값이 가장 높은 그룹에 속하게 된다. 이때, 유사도 값이 threshold 보다 낮다면, 현재 청크에서 인식되지 않고, 이전 청크에서만 인식된 단어로 간주 되며 추후 시간 순서에 맞게 추가된다. IoU를 연산 하는 과정에서, 단어들의 타임스탬프는 부정확하므로 Padding 을 추가한다.

그룹이 모두 정해지고 나면, 그룹내에서 가장 높은 probability (ASR의 확신도)를 가진 단어를 선택한다. 이 단어가 최종 단어가 된다.

해당 방법은 $ \text{IoU} $ 와 $ \text{CosSim} $ 을 혼합하여 유사도를 결정하는 방법과 추후 베스트 단어를 고를 때 probability를 선택하는 과정이 옳바르지 않은 방법이라 생각했다. 따라서 $ \text{IoU} $ 와 $ \text{CosSim} $ 을 분리하고 따로 활용 하는 방법으로 변경했다.

변경된 검색 방법

단어의 그룹화는 이전 청크에서 추론된 단어를 기반으로 수행된다. 이전 청크에서 추론된 단어는 모두 각각 그룹이 되며 각각 그룹을 대표하는 단어가 된다.

현재 청크에서 추론된 단어들은 각 그룹의 대표단어를 탐색해서 가장 높은 유사도를 가지는 그룹에 포함되어야 한다. 현재 청크에서 추론된 단어들은 바로 직전 단어가 소속된 그룹부터 시작하여 $ \text{IoU} $ 기반으로 탐색된다. 그룹의 대표 단어와 $ \text{IoU} $ 가 IoU_threshold 값 보다 낮다면 탐색 그룹에서 제외되며, 중지된다. 탐색된 그룹에서 각 대표 단어와 $ \text{CosSim} $ 을 비교한다. 가장 높은 유사도를 가진 그룹에 소속되며, 만약 $ \text{CosSim} $ 이 Cos_threshold 보다 작다면, 현재 청크에서 이전 청크에서 인식되지 않은 단어가 인식 되었다고 판단하며, 추후 시간순서에 맞게 추가된다.

그룹이 모두 정해지고 나면, 각 그룹 내의 단어들의 임베딩 벡터를 평균을 내며, 해당 평균 벡터와 유사도와 Probability의 곱이 가장 높은 단어를 최종 단어로 선택하게 된다.

이러한 과정을 통해 $ \text{IoU} $ 와 $ \text{CosSim} $ 을 명확히 분리하여 사용할 수 있게 된다.

하이퍼파라미터 최적화

하이퍼파라미터 설명

  • max_overlap_duration: 이전 청크와 overlap 되는 길이를 의미한다.
  • boundary: 청크의 끝부분에서 해당 범위에 단어의 타임스탬프 center 값이 포함되면, Probability를 감소시킨다.
    $$ \text{post\_probability} = \text{probability} \times \frac{\text{audio\_duration} - \text{word\_timestamp\_center}}{\text{boundary}} $$
  • df_z_thresh: 인식된 모든 단어의 character 당 발화 길이를 통계를 낸다. 이때, 이상치를 제거할 z-score 값이다.
  • df_min_dur: 인식된 모든 단어는 최소 min_dur 만큼의 발화 시간을 가져야 하며, 이보다 낮다면 제거된다.
  • pf_z_thresh: 인식된 모든 단어의 probability를 통계를 낸다. 이때, 이상치 제거에 사용되는 z-score 값이다.
  • min_prob: 인식된 모든 단어는 최소 min_prob 만큼의 정확도를 가져야 한다. 이보다 낮다면 제거된다.
  • iou_threshold: 그룹화에 사용되는 iou_threshold다.
  • cos_threshold: 그룹화에 사용되는 cos_threshold다.
  • padding: iou에서 사용되는 padding이다.

첫번째 최적화 20250721_study_16_batch

모든 하이퍼파라미터에 대해서 최적화를 하며, 배치는 16 사용했다. 총 6585번의 최적화를 수행했다.

(시작, 끝, 스탭)

  • max_overlap_duration: 16000, 112000, 16000
  • boundary: 0, 32000, 100
  • df_z_thresh: 0, 10.0, 0.1
  • df_min_dur: 0, 8000, 160
  • pf_z_thresh: 0, 10.0, 0.1
  • min_prob: 0, 1, 0.01
  • iou_threshold: 0, 1, 0.01
  • cos_threshold: 0, 1, 0.01
  • padding: 0, 32000, 100

결과

전체

(용량 문제로 링크로 대체)

wer20
wer15
wer10

결론

낮은 wer은 특정 범위에서 포착된다. 특히 overlap duration 같은 경우는 96000에서 집중되며, 다른 특성들도 특정구간에 집중되는 것을 알 수 있다. z_score 관련 하이퍼파라미터는 5이상의 값으로 집중되며, 즉 결과에 큰 영향을 못끼치는 것으로 판단했다. 또한 특정 하이퍼파라미터쌍은(ex: padding과 iou_threshold) 높은 상호 연관성을 가지기에, 최적 값을 찾기 위해 진동을 하는 것같은 느낌이 들었다. 또한 wer이 낮아질 수록 하이퍼파라미터의 범위가 정해지고 정확도에 영향을 끼치는 하이퍼파라미터가 바뀐다는 것을 알 수있다. 이를 통해, 특정 하이퍼파라미터를 고정하고 다른 하이퍼파라미터를 최적화하는 방향을 고려해봐야할 필요성을 알 수 있다.

두 번째 최적화 20250722_study_16_batch

배치 16, 6320번의 최적화를 수행했다. 20250721_study_16_batch의 결과를 기반으로 duration filter와 probability filter을 제거했다. 또한, 파라미터 탐색 범위를 더 좁혔다.

boundary 같은 경우, 이전 study 에서 높게 나왔는데, 20250721_study_16_batch 에서는 낮게 나와서 다시 확인 용으로 범위를 더 키웠다.

(시작, 끝, 스탭)

  • max_overlap_duration: 16000, 112000, 16000
  • boundary: 0, 64000, 100
  • df_min_dur: 0, 2080, 160
  • min_prob: 0, 0.6, 0.01
  • iou_threshold: 0.05, 0.5, 0.01
  • cos_threshold: 0.5, 0.85, 0.01
  • padding: 0, 3000, 100

결과

전체

(용량 문제로 링크로 대체)

wer20
wer15
wer10

결론

더 낮은 wer을 포착할 수 있었다. 이번에도 파라미터들이 특정 범위에서 집중적으로 낮은 wer을 보인다는 것을 알 수 있다.

세 번째 최적화 20250723_study_16_batch

배치 16, 9240번의 최적화를 수행했다. 20250722_study_16_batch의 결과를 기반으로 범위를 좁혀 최적화했다.

(시작, 끝, 스탭)

  • max_overlap_duration: 16000, 112000, 16000
  • boundary: 0, 20000, 100
  • df_min_dur: 320, 1440, 160
  • min_prob: 0.12, 0.5, 0.01
  • iou_threshold: 0.12, 0.3, 0.01
  • cos_threshold: 0.55, 0.77, 0.01
  • padding: 0, 1000, 100

결과

전체

(용량 문제로 링크로 대체)

wer20
wer15
wer10

결론

이전 최적화에서보다 더 낮은 wer이 포착되진 않았다. 아직도 특정 영역에 집중되는 파라미터가 있다. 이는 조금 더 최적화 할 수 있음을 알 수있다. 따라서 좀 더 최적화를 실행해보았다.

발견된 오류

수정 가능한 오류

아주 간단한 코드 오류로, 다음과 같은 상황이 발생한다.
이러한 문제는 코드 수정으로 간단하게 해결 가능하다.
four 문제

  Processing Selector
   Current:  in [678230-681430] the [681430-683350] 30s. [683350-693590] What [693590-706134] are [706134-709974] the [709974-713814] four [713814-717974] elements [717974-727574] of [727574-740374] trust [740374-747414] which [747414-769046] Roosevelt [769046-777686] won? [777686-785046] One [787606-794518] was [794518-800598]
   Previous:  crisis [663593-672553] in [672553-681193] the [681193-683433] 30s. [683433-693673] What [693673-706537] are [706537-710377] the [710377-713897] elements [717815-727735] of [727735-740215] trust? [740215-746295]
   Grouped tokens:
    crisis [663593-672553]
    in [672553-681193],  in [678230-681430]
    the [681193-683433],  the [681430-683350]
    30s. [683433-693673],  30s. [683350-693590]
    What [693673-706537],  What [693590-706134]
    are [706537-710377],  are [706134-709974]
    the [710377-713897],  the [709974-713814]
    elements [717815-727735],  elements [717974-727574]
    of [727735-740215],  of [727574-740374]
    trust? [740215-746295],  trust [740374-747414]
   Orphan tokens:  *four* [713814-717974] which [747414-769046] Roosevelt [769046-777686] won? [777686-785046] One [787606-794518] was [794518-800598]
   New tokens:  crisis [663593-672553] in [672553-681193] the [681193-683433] 30s. [683433-693673] What [693673-706537] are [706537-710377] the [710377-713897] *four* [713814-717974] elements [717815-727735] of [727735-740215] trust? [740215-746295] *four* [713814-717974] which [747414-769046] Roosevelt [769046-777686] won? [777686-785046] One [787606-794518] was [794518-800598]

대표적 오류 1

같은 단어이나, 타임스탬프 추론 문제로 멀리 떨어진 경우이다.
-> 그룹화할 때 그냥 마지막 단어를 제거했다.
a 문제

   Grouped tokens:
    We [148882-163858],  We [145460-162932]
    are [163858-166098],  are [162932-166452]
    in [166098-170578],  in [166452-170612]
    a [170578-172178],  a [170612-171892]
    system [172178-176978],  system [171892-177012]
    crisis, [176978-186258],  crisis [177012-184052]
    and [187858-195858],  and [184052-195252]
    this [195858-198098],  this [195252-198452]
    system [198098-204818],  system [198452-204852]
    crisis [204818-212178],  crisis [204852-211572]
    can [212178-221458],  can [211572-221492]
    quickly [221458-226258],  quickly [221492-226932]
    develop [226258-235538],  develop [226932-233972]
    into [235538-238418],  into [233972-242292]
    *a* [238418-240338]
   Orphan tokens:  *a* [242292-245492] societal [245492-251252] crisis. [251252-259252]
   New tokens:  We [148882-163858] are [163858-166098] in [166098-170578] a [170578-172178] system [172178-176978] crisis [177012-184052] and [187858-195858] this [195858-198098] system [198098-204818] crisis [204818-212178] can [212178-221458] quickly [221458-226258] develop [226258-235538] into [233972-242292] *a* [238418-240338] *a* [242292-245492] societal [245492-251252] crisis. [251252-259252]

대표적 오류 2

오류 1과 유사하다. 오류 1은 이전에 추론된 청크의 마지막단어에 대한 오류인 반면, 이번에는 첫 단에어 대한 오류이다.
-> 현재 추론된 단어에서 첫 단어를 그냥 제외했다.
Roosevelt 문제

   Grouped tokens:
    *Roosevelt* [830653-868605]
    heavily [868605-877245],  heavily [868668-877308]
    attacked [877245-885245],  attacked [877308-885628]
    the [885245-891005],  the [885628-891708]
    oligopolies, [891633-905393],  oligopolies, [891708-905148]
    the [905393-907313],  the [905148-907068]
    big [907313-910193],  big [907068-910268]
    companies [910193-917233],  companies [910268-917308]
    in [917233-922033],  in [917308-922428]
    US [922033-925553],  the [922428-923388],  US, [923388-927228]
    and [925553-937009],  and [930108-936828]
    re [937009-940849],  re [936828-940668]
   -regulated [940849-951729], -regulated [940668-950908]
   Orphan tokens:  *Roosevelt* [864188-868668] the [950908-954428] economy. [954428-959868] This [965308-972220] is [972220-976060] exactly [976060-982780] what [982780-988860] we [988860-991420] have [991420-994620] to [994620-998460] do [998460-1001980] as [1001980-1004860] nation. [1005180-1006780]
   New tokens:  *Roosevelt* [830653-868605] *Roosevelt* [864188-868668] heavily [868605-877245] attacked [877308-885628] the [885245-891005] oligopolies, [891708-905148] the [905148-907068] big [907313-910193] companies [910193-917233] in [917308-922428] US, [923388-927228] and [930108-936828] re [936828-940668]-regulated [940668-950908] the [950908-954428] economy. [954428-959868] This [965308-972220] is [972220-976060] exactly [976060-982780] what [982780-988860] we [988860-991420] have [991420-994620] to [994620-998460] do [998460-1001980] as [1001980-1004860] nation. [1005180-1006780]

대표적 오류 3

생성형 모델오류 이다. 없는 단어를 출력한 것 이다.
-> 마땅한 해결 방법이 없다.
a 문제

  Processing ASR
   Merged chunk: (43046,) + (47944,) = (90990,)
   Prompt:
   Segment tokens:  I [0-5440] think [5440-9600] that [9600-12160] only [12160-15680] history [15680-22080] will [22080-32320] judge [32320-38080] if [38080-45440] the [45440-48000] summit [48000-53120] of [53120-55360] last [55360-59520] week [59520-65280] was [65280-70400] *a* [70400-74880] big [74880-78400] summit. [78400-82560]

대표적 오류 4

선택 오류이다.
-> 이전 단어와의 연관성을 볼 수 있도록 수정할 수 있다.
-> 선택 알고리즘은 오직 이전 청크와만 비교하는 것을 가정하고 있지 않다. 그 이전의 청크와도 비교하는 것을 대비하여 구성했다. 이전 청크를 포함 해서 그 이전 청크까지 비교할 수도 있지만, 레이턴시 문제로 달갑진 않다.
.S. 문제

   Grouped tokens:
    companies [910193-917233]
    in [917308-922428],  in [918982-921862]
    US, [923388-927228], *.S.* [923782-929542]
    and [930108-936828],  and [929862-936646]
    re [936828-940668],  re [936646-941126]
   -regulated [940668-950908], -regulated [941126-950726]
    the [950908-954428],  the [950726-954246]
    economy. [954428-959868],  economy. [954246-960006]
    This [965308-972220],  This [965446-971910]
    is [972220-976060],  is [971910-976070]
    exactly [976060-982780],  exactly [976070-983110]
    what [982780-988860],  what [983110-988870]
    we [988860-991420],  we [988870-991750]
    have [991420-994620],  have [991750-994630]
    to [994620-998460],  to [994630-998470]
    do [998460-1001980],  do [998470-1001990]
    as [1001980-1004860],  as [1001990-1004550],  the [1004550-1006470]
   Orphan tokens:  G20 [1006470-1014790] in [1014790-1020230] London. [1020230-1026630]
   New tokens:  companies [910193-917233] in [918982-921862]*.S.* [923782-929542] and [930108-936828] re [936828-940668]-regulated [940668-950908] the [950908-954428] economy. [954428-959868] This [965308-972220] is [972220-976060] exactly [976060-982780] what [982780-988860] we [988860-991420] have [991750-994630] to [994620-998460] do [998460-1001980] as [1001990-1004550] G20 [1006470-1014790] in [1014790-1020230] London. [1020230-1026630]
Info
놀랍게도 여기서 .S.은 US 보다 Probability가 훨씬 높다.. 따라서 첫번째 해결방법을 사용했음에도, 해결할 수 없었다.

ESIC 결과

RT-Whisper의 하이퍼파라미터는 위의 발견된 오류를 수정하고, 다시 최적화 과정을 수행한 후 출력한 결과이다.

요약 통계 비교

항목RT-WhisperWhisper Streaming
문장 수 (num_sentences)190190
단어 수 (num_words)47,12047,120
정확도 (%) (correct_percent)91.7%91.6%
대체율 (%) (substitution_percent)4.2%4.1%
삭제율 (%) (deletion_percent)4.1%4.3%
삽입율 (%) (insertion_percent)1.2%1.4%
WER (%) (wer_percent)9.5%9.8%
문장 오류율 (%) (sentence_error_percent)100.0%100.0%

Transcribe Time 통계 비교

항목RT-WhisperWhisper Streaming
N (샘플 수)6,1796,179
평균 (mean)0.8242초0.6933초
표준편차 (std)1.5004초0.9137초
최소값 (min)0.1756초0.1803초
1사분위수 (Q1)0.3830초0.4155초
2사분위수 (Q2, median)0.4311초0.5192초
3사분위수 (Q3)0.5498초0.6499초
최대값 (max)14.9442초11.5950초
IQR0.1667초0.2344초
Skewness4.74097.2237
Kurtosis23.886661.8729

RT-Whisper Transcribe Time 히스토그램

구간 (초)비율 (%)
[0, 0.1756)93.04%
[0.1756, 1.6525)1.82%
[1.6525, 3.1293)1.19%
[3.1293, 4.6062)0.98%
[4.6062, 6.0830)1.29%
[6.0830, 7.5599)0.67%
[7.5599, 9.0368)0.56%
[9.0368, 10.5136)0.35%
[10.5136, 13.4673)0.01%
[13.4673, 14.9442)0.03%

90% 이상 1초 미만으로 처리된다. 그러나 일부 최대 13초까지 지연되는 것을 알 수 있다.

Whisper Streaming Transcribe Time 히스토그램

구간 (초)비율 (%)
[0.1803, 1.3218)95.42%
[1.3218, 2.4632)1.91%
[2.4632, 3.6047)0.89%
[3.6047, 4.7462)0.57%
[4.7462, 5.8876)0.29%
[5.8876, 7.0291)0.28%
[7.0291, 8.1706)0.23%
[8.1706, 9.3120)0.11%
[9.3120, 10.4535)0.13%
[10.4535, 11.5950)0.18%