Skip to content

Commit

Permalink
Merge pull request #94 from gabrielwithappy/translation_ko_chap3
Browse files Browse the repository at this point in the history
🌐 [i18n-KO] docs: ko: Chap3 Transformer architectures for audio
  • Loading branch information
MKhalusova authored Jul 24, 2023
2 parents bbf2fb4 + 16f1485 commit bd8083b
Show file tree
Hide file tree
Showing 7 changed files with 491 additions and 1 deletion.
18 changes: 17 additions & 1 deletion chapters/ko/_toctree.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,23 @@
- local: chapter2/hands_on
title: μ‹€μŠ΅ 과제

- title: 3단원. μ˜€λ””μ˜€μš© 트랜슀포머 μ•„ν‚€ν…μ²˜
sections:
- local: chapter3/introduction
title: 트랜슀퍼λͺ¨λΈ λŒμ•„λ³΄κΈ°
- local: chapter3/ctc
title: CTC μ•„ν‚€ν…μ²˜
- local: chapter3/seq2seq
title: Seq2Seq μ•„ν‚€ν…μ²˜
- local: chapter3/classification
title: μ˜€λ””μ˜€ λΆ„λ₯˜ μ•„ν‚€ν…μ²˜
- local: chapter3/quiz
title: ν€΄μ¦ˆ
quiz: 3
- local: chapter3/supplemental_reading
title: 보좩자료 및 λ¦¬μ†ŒμŠ€

- title: μ½”μŠ€ 이벀트
sections:
- local: events/introduction
title: 라이브 μ„Έμ…˜κ³Ό μ›Œν¬μƒ΅
title: 라이브 μ„Έμ…˜κ³Ό μ›Œν¬μƒ΅
35 changes: 35 additions & 0 deletions chapters/ko/chapter3/classification.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# μ˜€λ””μ˜€ λΆ„λ₯˜ μ•„ν‚€ν…μ²˜[[audio-classification-architectures]]

μ˜€λ””μ˜€ λΆ„λ₯˜μ˜ λͺ©ν‘œλŠ” μ˜€λ””μ˜€ μž…λ ₯에 λŒ€ν•œ 클래슀 λ ˆμ΄λΈ”μ„ μ˜ˆμΈ‘ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λͺ¨λΈμ€ 전체 μž…λ ₯ μ‹œν€€μŠ€λ₯Ό ν¬κ΄„ν•˜λŠ” 단일 클래슀 λ ˆμ΄λΈ”μ„ μ˜ˆμΈ‘ν•˜κ±°λ‚˜ λͺ¨λ“  μ˜€λ””μ˜€ ν”„λ ˆμž„(일반적으둜 μž…λ ₯ μ˜€λ””μ˜€μ˜ 20λ°€λ¦¬μ΄ˆλ§ˆλ‹€)에 λŒ€ν•œ λ ˆμ΄λΈ”μ„ μ˜ˆμΈ‘ν•  수 있으며, 이 경우 λͺ¨λΈμ˜ 좜λ ₯은 클래슀 λ ˆμ΄λΈ” ν™•λ₯ μ˜ μ‹œν€€μŠ€μž…λ‹ˆλ‹€. μ „μžμ˜ μ˜ˆλ‘œλŠ” μ–΄λ–€ μƒˆκ°€ νŠΉμ • μ†Œλ¦¬λ₯Ό λ‚΄λŠ”μ§€ κ°μ§€ν•˜λŠ” 것을 λ“€ 수 있고, ν›„μžμ˜ μ˜ˆλ‘œλŠ” νŠΉμ • μˆœκ°„μ— μ–΄λ–€ ν™”μžκ°€ λ§ν•˜λŠ”μ§€ μ˜ˆμΈ‘ν•˜λŠ” ν™”μž ꡬ뢄(speaker diarization)을 λ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

## μŠ€νŽ™νŠΈλ‘œκ·Έλž¨μ„ μ‚¬μš©ν•œ λΆ„λ₯˜[[classification-using-spectrograms]]

μ˜€λ””μ˜€ λΆ„λ₯˜λ₯Ό μˆ˜ν–‰ν•˜λŠ” κ°€μž₯ μ‰¬μš΄ 방법 쀑 ν•˜λ‚˜λŠ” 이미지 λΆ„λ₯˜ 문제인 κ²ƒμ²˜λŸΌ κ°€μ •ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€!

μŠ€νŽ™νŠΈλ‘œκ·Έλž¨μ€ `(주파수, μ‹œν€€μŠ€ 길이)` λͺ¨μ–‘μ˜ 2차원 ν…μ„œλΌλŠ” 것을 κΈ°μ–΅ν•˜μ„Έμš”. [μ˜€λ””μ˜€ 데이터 챕터](../chapter1/audio_data)μ—μ„œ μ΄λŸ¬ν•œ μŠ€νŽ™νŠΈλ‘œκ·Έλž¨μ„ μ΄λ―Έμ§€λ‘œ κ·Έλ €λ³΄μ•˜μŠ΅λ‹ˆλ‹€. μ—¬λŸ¬λΆ„ μ•„μ‹œλ‚˜μš”? 말 κ·ΈλŒ€λ‘œ μŠ€νŽ™νŠΈλ‘œκ·Έλž¨μ„ μ΄λ―Έμ§€λ‘œ μ·¨κΈ‰ν•˜κ³  ResNetκ³Ό 같은 일반 CNN λΆ„λ₯˜κΈ° λͺ¨λΈμ— μ „λ‹¬ν•˜λ©΄ 맀우 쒋은 예츑 κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. 더 쒋은 방법은 ViT와 같은 이미지 트랜슀포머 λͺ¨λΈμ„ μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

이것이 λ°”λ‘œ **μ˜€λ””μ˜€ μŠ€νŽ™νŠΈλ‘œκ·Έλž¨ 트랜슀포머**κ°€ ν•˜λŠ” μΌμž…λ‹ˆλ‹€. 이 λͺ¨λΈμ€ ViT λ˜λŠ” λΉ„μ „ 트랜슀포머 λͺ¨λΈμ„ μ‚¬μš©ν•˜λ©°, 일반 이미지 λŒ€μ‹  μŠ€νŽ™νŠΈλ‘œκ·Έλž¨μ„ μž…λ ₯으둜 μ „λ‹¬ν•©λ‹ˆλ‹€. 트랜슀포머의 μ…€ν”„ μ–΄ν…μ…˜ λ ˆμ΄μ–΄ 덕뢄에 이 λͺ¨λΈμ€ CNN보닀 κΈ€λ‘œλ²Œ μ»¨ν…μŠ€νŠΈλ₯Ό 더 잘 포착할 수 μžˆμŠ΅λ‹ˆλ‹€.

ViT와 λ§ˆμ°¬κ°€μ§€λ‘œ AST(Audio Spectrogram Transformer) λͺ¨λΈμ€ μ˜€λ””μ˜€ μŠ€νŽ™νŠΈλ‘œκ·Έλž¨μ„ 16Γ—16ν”½μ…€μ˜ λΆ€λΆ„μ μœΌλ‘œ κ²ΉμΉ˜λŠ” 이미지 패치 μ‹œν€€μŠ€λ‘œ λΆ„ν• ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ 이 패치 μ‹œν€€μŠ€λŠ” 일련의 μž„λ² λ”©μœΌλ‘œ 투영되고, 이 μž„λ² λ”©μ€ ν‰μ†Œμ™€ 같이 트랜슀포머 인코더에 μž…λ ₯으둜 μ œκ³΅λ©λ‹ˆλ‹€. ASTλŠ” 인코더 μ „μš© 트랜슀포머 λͺ¨λΈμ΄λ―€λ‘œ 좜λ ₯은 16Γ—16 μž…λ ₯ νŒ¨μΉ˜λ§ˆλ‹€ ν•˜λ‚˜μ”© μˆ¨κ²¨μ§„ μƒνƒœ μ‹œν€€μŠ€μž…λ‹ˆλ‹€. μ—¬κΈ°μ—λŠ” 은닉 μƒνƒœλ₯Ό λΆ„λ₯˜ ν™•λ₯ μ— λ§€ν•‘ν•˜κΈ° μœ„ν•΄ μ‹œκ·Έλͺ¨μ΄λ“œ ν™œμ„±ν™”κ°€ ν¬ν•¨λœ κ°„λ‹¨ν•œ λΆ„λ₯˜ 계측이 μžˆμŠ΅λ‹ˆλ‹€.

<div class="flex justify-center">
<img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/ast.png" alt="μ˜€λ””μ˜€ μŠ€νŽ™νŠΈλ‘œκ·Έλž¨ νŠΈλžœμŠ€ν¬λ¨ΈλŠ” μŠ€νŽ™νŠΈλ‘œκ·Έλž¨μ—μ„œ κ°€μ Έμ˜¨ 일련의 νŒ¨μΉ˜μ—μ„œ μž‘λ™ν•©λ‹ˆλ‹€.">
</div>

λ…Όλ¬Έ [AST: μ˜€λ””μ˜€ μŠ€νŽ™νŠΈλ‘œκ·Έλž¨ 트랜슀포머](https://arxiv.org/pdf/2104.01778.pdf)μ—μ„œ κ°€μ Έμ˜¨ 이미지

<Tip>
πŸ’‘ μ—¬κΈ°μ„œλŠ” μŠ€νŽ™νŠΈλ‘œκ·Έλž¨μ΄ 이미지와 λ™μΌν•˜λ‹€κ³  κ°€μ •ν•˜μ§€λ§Œ, μ€‘μš”ν•œ 차이점이 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ΄λ―Έμ§€μ˜ λ‚΄μš©μ„ μœ„μ•„λž˜λ‘œ 이동해도 일반적으둜 이미지에 ν¬ν•¨λœ λ‚΄μš©μ˜ μ˜λ―ΈλŠ” λ³€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μŠ€νŽ™νŠΈλ‘œκ·Έλž¨μ„ μœ„μ•„λž˜λ‘œ μ΄λ™ν•˜λ©΄ μ†Œλ¦¬μ— ν¬ν•¨λœ μ£ΌνŒŒμˆ˜κ°€ λ³€κ²½λ˜μ–΄ μ†Œλ¦¬μ˜ 성격이 μ™„μ „νžˆ λ‹¬λΌμ§‘λ‹ˆλ‹€. μ΄λ―Έμ§€λŠ” λ³€ν™˜ μ‹œμ—λ„ λ³€ν•˜μ§€ μ•Šμ§€λ§Œ μŠ€νŽ™νŠΈλ‘œκ·Έλž¨μ€ 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€. μŠ€νŽ™νŠΈλ‘œκ·Έλž¨μ„ μ΄λ―Έμ§€λ‘œ μ·¨κΈ‰ν•˜λŠ” 것은 μ‹€μ œλ‘œλŠ” 맀우 잘 μž‘λ™ν•  수 μžˆμ§€λ§Œ μ‹€μ œλ‘œλŠ” 같은 것이 μ•„λ‹ˆλΌλŠ” 점을 λͺ…μ‹¬ν•˜μ„Έμš”.
</Tip>

## λͺ¨λ“  νŠΈλžœμŠ€ν¬λ¨ΈλŠ” λΆ„λ₯˜κΈ°κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.[[any-transformer-can-be-a-classifier]]

[이전 μ„Ήμ…˜](ctc)μ—μ„œ CTCκ°€ 인코더 μ „μš© 트랜슀포머λ₯Ό μ‚¬μš©ν•˜μ—¬ μžλ™ μŒμ„± 인식을 μˆ˜ν–‰ν•˜λŠ” 데 효율적인 κΈ°μˆ μ΄λΌλŠ” 것을 μ‚΄νŽ΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ CTC λͺ¨λΈμ€ 이미 토큰화 μ–΄νœ˜μ—μ„œ 클래슀 λ ˆμ΄λΈ”μ— λŒ€ν•œ ν™•λ₯ μ„ μ˜ˆμΈ‘ν•˜λŠ” λΆ„λ₯˜κΈ°μž…λ‹ˆλ‹€. 라벨을 λ³€κ²½ν•˜κ³  νŠΉμˆ˜ν•œ CTC 손싀 λŒ€μ‹  크둜슀 μ—”νŠΈλ‘œν”Ό 손싀 ν•¨μˆ˜λ‘œ ν›ˆλ ¨ν•˜λ©΄ CTC λͺ¨λΈμ„ λ²”μš© μ˜€λ””μ˜€ λΆ„λ₯˜κΈ°λ‘œ μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, HF νŠΈλžœμŠ€ν¬λ¨Έμ—λŠ” `Wav2Vec2ForCTC` λͺ¨λΈλΏλ§Œ μ•„λ‹ˆλΌ `Wav2Vec2ForSequenceClassification` 및 `Wav2Vec2ForAudioFrameClassification` λͺ¨λΈλ„ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ λͺ¨λΈμ˜ μ•„ν‚€ν…μ²˜ κ°„μ˜ μœ μΌν•œ 차이점은 λΆ„λ₯˜ κ³„μΈ΅μ˜ 크기와 μ‚¬μš©λ˜λŠ” 손싀 ν•¨μˆ˜μž…λ‹ˆλ‹€.

μ‹€μ œλ‘œ λͺ¨λ“  인코더 μ „μš© μ˜€λ””μ˜€ 트랜슀포머 λͺ¨λΈμ€ 은닉 μƒνƒœ μ‹œν€€μŠ€ μœ„μ— λΆ„λ₯˜ λ ˆμ΄μ–΄λ₯Ό μΆ”κ°€ν•˜μ—¬ μ˜€λ””μ˜€ λΆ„λ₯˜κΈ°λ‘œ μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (λΆ„λ₯˜κΈ°μ—λŠ” 일반적으둜 트랜슀포머 디코더가 ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.)

전체 μ‹œν€€μŠ€μ— λŒ€ν•œ 단일 λΆ„λ₯˜ 점수λ₯Ό μ˜ˆμΈ‘ν•˜κΈ° μœ„ν•΄ λͺ¨λΈ(Wav2Vec2ForSequenceClassification)μ—μ„œλŠ” μˆ¨κ²¨μ§„ μƒνƒœμ˜ 평균을 κ΅¬ν•˜μ—¬ λΆ„λ₯˜ λ ˆμ΄μ–΄μ— μž…λ ₯ν•©λ‹ˆλ‹€. 좜λ ₯은 단일 ν™•λ₯  λΆ„ν¬μž…λ‹ˆλ‹€.

각 μ˜€λ””μ˜€ ν”„λ ˆμž„μ— λŒ€ν•΄ λ³„λ„μ˜ λΆ„λ₯˜λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄, λΆ„λ₯˜κΈ°(Wav2Vec2ForAudioFrameClassification)λŠ” 은닉 μƒνƒœμ˜ μ‹œν€€μŠ€μ—μ„œ μ‹€ν–‰λ˜λ―€λ‘œ λΆ„λ₯˜κΈ°μ˜ 좜λ ₯도 μ‹œν€€μŠ€μž…λ‹ˆλ‹€.
111 changes: 111 additions & 0 deletions chapters/ko/chapter3/ctc.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
# CTC μ•„ν‚€ν…μ²˜ [[ctc-architectures]]

μ—°κ²°μ£Όμ˜ μ‹œκ°„ λΆ„λ₯˜(CTC, Connectionist Temporal Classification)λŠ” μžλ™ μŒμ„± 인식을 μœ„ν•œ 인코더 μ „μš© 트랜슀포머 λͺ¨λΈμ— μ‚¬μš©λ˜λŠ” κΈ°λ²•μž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ λͺ¨λΈμ˜ μ˜ˆλ‘œλŠ” **Wav2Vec2**, **HuBERT** 및 **M-CTC-T**κ°€ μžˆμŠ΅λ‹ˆλ‹€.

인코더 μ „μš© νŠΈλžœμŠ€ν¬λ¨ΈλŠ” λͺ¨λΈμ˜ 인코더 λΆ€λΆ„λ§Œ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— κ°€μž₯ κ°„λ‹¨ν•œ μ’…λ₯˜μ˜ νŠΈλžœμŠ€ν¬λ¨Έμž…λ‹ˆλ‹€. μΈμ½”λ”λŠ” μž…λ ₯ μ‹œν€€μŠ€(μ˜€λ””μ˜€ νŒŒν˜•)λ₯Ό 읽고 이λ₯Ό 좜λ ₯ μž„λ² λ”©μ΄λΌκ³ λ„ ν•˜λŠ” 은닉 μƒνƒœ μ‹œν€€μŠ€λ‘œ λ§€ν•‘ν•©λ‹ˆλ‹€.

CTC λͺ¨λΈμ„ μ‚¬μš©ν•˜λ©΄ 은닉 μƒνƒœ μ‹œν€€μŠ€μ— μΆ”κ°€ μ„ ν˜• 맀핑을 μ μš©ν•˜μ—¬ 클래슀 λ ˆμ΄λΈ” μ˜ˆμΈ‘μ„ μ–»μŠ΅λ‹ˆλ‹€. 클래슀 λ ˆμ΄λΈ”μ€ **μ•ŒνŒŒλ²³ 문자**(a, b, c, ...)μž…λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ–΄νœ˜κ°€ 26μžμ™€ λͺ‡ 개의 특수 ν† ν°μœΌλ‘œλ§Œ μ‘΄μž¬ν•˜λ©΄ 되기 λ•Œλ¬Έμ— μž‘μ€ λΆ„λ₯˜ ν—€λ“œλ‘œ λŒ€μƒ μ–Έμ–΄μ˜ λͺ¨λ“  단어λ₯Ό μ˜ˆμΈ‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

<div class="flex justify-center">
<img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/wav2vec2-ctc.png" alt="Transformer encoder with a CTC head on top">
</div>

μ§€κΈˆκΉŒμ§€λŠ” NLPμ—μ„œ BERT와 같은 λͺ¨λΈμ„ μ‚¬μš©ν•˜λŠ” 것과 맀우 μœ μ‚¬ν•©λ‹ˆλ‹€. 인코더 μ „μš© 트랜슀포머 λͺ¨λΈμ΄ ν…μŠ€νŠΈ 토큰을 인코더 μˆ¨κ²¨μ§„ μƒνƒœ μ‹œν€€μŠ€μ— λ§€ν•‘ν•œ λ‹€μŒ μ„ ν˜• 맀핑을 μ μš©ν•˜μ—¬ 각 μˆ¨κ²¨μ§„ μƒνƒœμ— λŒ€ν•΄ ν•˜λ‚˜μ˜ 클래슀 λ ˆμ΄λΈ” μ˜ˆμΈ‘μ„ μ–»μŠ΅λ‹ˆλ‹€.

μŒμ„±μ—μ„œλŠ” μ˜€λ””μ˜€ μž…λ ₯κ³Ό ν…μŠ€νŠΈ 좜λ ₯의 'μ •λ ¬(alignment)'을 μ•Œ 수 μ—†λ‹€λŠ” 점이 λ¬Έμ œμž…λ‹ˆλ‹€. μŒμ„±μ΄ λ§ν•˜λŠ” μˆœμ„œμ™€ ν…μŠ€νŠΈλ₯Ό 필사(transcribe)ν•˜λŠ” μˆœμ„œκ°€ κ°™λ‹€λŠ” 것은 μ•Œμ§€λ§Œ(μ†Œμœ„ λ‹¨μ‘°λ‘œμš΄ μ •λ ¬μ˜ 경우), ν•„μ‚¬ν•˜λŠ” ν…μŠ€νŠΈμ˜ λ¬Έμžκ°€ μ˜€λ””μ˜€μ™€ μ–΄λ–»κ²Œ μΌμΉ˜ν•˜λŠ”μ§€λŠ” μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€. λ°”λ‘œ 이 λΆ€λΆ„μ—μ„œ CTC μ•Œκ³ λ¦¬μ¦˜μ΄ λ“±μž₯ν•©λ‹ˆλ‹€.

<Tip>
πŸ’‘ NLP λͺ¨λΈμ—μ„œ μ–΄νœ˜λŠ” 일반적으둜 κ°œλ³„ 문자뿐만 μ•„λ‹ˆλΌ λ‹¨μ–΄μ˜ 일뢀 λ˜λŠ” μ™„μ „ν•œ 단어λ₯Ό μ„€λͺ…ν•˜λŠ” 수천 개의 ν† ν°μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ CTC의 경우 μž‘μ€ μ–΄νœ˜κ°€ κ°€μž₯ 효과적이며 일반적으둜 50자 미만으둜 μœ μ§€ν•˜λ €κ³  λ…Έλ ₯ν•©λ‹ˆλ‹€. νŠΈμœ„ν„°μ—μ„œλŠ” κΈ€μžμ˜ λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ λŒ€λ¬Έμž(λ˜λŠ” μ†Œλ¬Έμž)만 μ‚¬μš©ν•΄λ„ μΆ©λΆ„ν•©λ‹ˆλ‹€. μˆ«μžλŠ” 철자둜 ν‘œκΈ°ν•©λ‹ˆλ‹€(예: `"20"`은 `"twenty"`κ°€ λ©λ‹ˆλ‹€). 문자 외에도 μ΅œμ†Œν•œ 단어 ꡬ뢄 토큰(곡백)κ³Ό νŒ¨λ”© 토큰이 ν•„μš”ν•©λ‹ˆλ‹€. νŒ¨λ”© 토큰은 μžμ—°μ–΄ 처리 λͺ¨λΈκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ μ—¬λŸ¬ 개의 μ˜ˆλ¬Έμ„ μΌκ΄„μ μœΌλ‘œ κ²°ν•©ν•  수 있게 ν•΄μ£Όμ§€λ§Œ, λͺ¨λΈμ΄ λ¬΄μŒμ„ μ˜ˆμΈ‘ν•  λ•Œ μ‚¬μš©ν•˜λŠ” 토큰이기도 ν•©λ‹ˆλ‹€. μ˜μ–΄μ—μ„œλŠ” `'` 문자λ₯Ό μœ μ§€ν•˜λŠ” 것도 μœ μš©ν•©λ‹ˆλ‹€. `it`s`와 `its`λŠ” 맀우 λ‹€λ₯Έ 의미λ₯Ό κ°–κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.
</Tip>

## 정렬을 μ–΄λ–»κ²Œ ν™•μΈν•˜μ§€?[[dude-wheres-my-alignment]]

μžλ™ μŒμ„± 인식(ASR)은 μ˜€λ””μ˜€λ₯Ό μž…λ ₯으둜 λ°›μ•„ ν…μŠ€νŠΈλ₯Ό 좜λ ₯으둜 μƒμ„±ν•©λ‹ˆλ‹€. ν…μŠ€νŠΈλ₯Ό μ˜ˆμΈ‘ν•˜λŠ” λ°©λ²•μ—λŠ” λͺ‡ 가지 선택지가 μžˆμŠ΅λ‹ˆλ‹€:

- κ°œλ³„ 문자둜 인식
- μŒμ†Œ(phonemes)둜 인식
- 단어 ν† ν°μœΌλ‘œ 인식

μžλ™ μŒμ„± 인식 λͺ¨λΈμ€ `(μ˜€λ””μ˜€, ν…μŠ€νŠΈ)` 쌍으둜 κ΅¬μ„±λœ 데이터 셋에 λŒ€ν•΄ ν•™μŠ΅λ˜λ©°, ν…μŠ€νŠΈλŠ” μ˜€λ””μ˜€ 파일의 μ‚¬λžŒμ΄ λ§Œλ“  ν•„μ‚¬λ³Έμž…λ‹ˆλ‹€. 일반적으둜 데이터 μ…‹μ—λŠ” μ˜€λ””μ˜€ νŒŒμΌμ—μ„œ μ–΄λ–€ λ‹¨μ–΄λ‚˜ 음절이 어디에 λ‚˜μ˜€λŠ”μ§€ μ•Œλ €μ£ΌλŠ” 타이밍 정보가 ν¬ν•¨λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν›ˆλ ¨ 쀑에 타이밍 정보에 μ˜μ‘΄ν•  수 μ—†κΈ° λ•Œλ¬Έμ— μž…λ ₯κ³Ό 좜λ ₯ μˆœμ„œλ₯Ό μ–΄λ–»κ²Œ μ •λ ¬ν•΄μ•Ό ν•˜λŠ”μ§€ μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€.

μž…λ ₯이 1초짜리 μ˜€λ””μ˜€ 파일이라고 κ°€μ •ν•΄ λ΄…μ‹œλ‹€. **Wav2Vec2** λͺ¨λΈμ—μ„œλŠ” λ¨Όμ € CNN ν”Όμ²˜ 인코더λ₯Ό μ‚¬μš©ν•˜μ—¬ μ˜€λ””μ˜€ μž…λ ₯을 더 짧은 은닉 μƒνƒœ μ‹œν€€μŠ€λ‘œ λ‹€μš΄μƒ˜ν”Œλ§ν•˜λŠ”λ°, μ—¬κΈ°μ—λŠ” μ˜€λ””μ˜€ 20λ°€λ¦¬μ΄ˆλ‹Ή ν•˜λ‚˜μ˜ 은닉 μƒνƒœ 벑터가 μžˆμŠ΅λ‹ˆλ‹€. μ˜€λ””μ˜€ 1μ΄ˆμ— λŒ€ν•΄ 50개의 은닉 μƒνƒœ μ‹œν€€μŠ€λ₯Ό 트랜슀포머 μΈμ½”λ”λ‘œ μ „λ‹¬ν•©λ‹ˆλ‹€. (μž…λ ₯ μ‹œν€€μŠ€μ—μ„œ μΆ”μΆœλœ μ˜€λ””μ˜€ μ„Έκ·Έλ¨ΌνŠΈλŠ” λΆ€λΆ„μ μœΌλ‘œ κ²ΉμΉ˜λ―€λ‘œ 20λ°€λ¦¬μ΄ˆλ§ˆλ‹€ ν•˜λ‚˜μ˜ 은닉 μƒνƒœ 벑터가 좜λ ₯λ˜μ§€λ§Œ 각 은닉 μƒνƒœλŠ” μ‹€μ œλ‘œ 25λ°€λ¦¬μ΄ˆμ˜ μ˜€λ””μ˜€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.)

트랜슀포머 μΈμ½”λ”λŠ” μ΄λŸ¬ν•œ μˆ¨κ²¨μ§„ μƒνƒœ 각각에 λŒ€ν•΄ ν•˜λ‚˜μ˜ νŠΉμ§• ν‘œν˜„μ„ μ˜ˆμΈ‘ν•˜λ―€λ‘œ νŠΈλžœμŠ€ν¬λ¨Έλ‘œλΆ€ν„° 50개의 좜λ ₯ μ‹œν€€μŠ€λ₯Ό μˆ˜μ‹ ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 각 좜λ ₯의 차원은 768μž…λ‹ˆλ‹€. λ”°λΌμ„œ 이 μ˜ˆμ œμ—μ„œ 트랜슀포머 μΈμ½”λ”μ˜ 좜λ ₯ μ‹œν€€μŠ€λŠ” `(768, 50)` λͺ¨μ–‘을 κ°–μŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 각 μ˜ˆμΈ‘μ€ μŒμ†Œ 지속 μ‹œκ°„λ³΄λ‹€ 짧은 25ms의 μ‹œκ°„μ„ ν¬ν•¨ν•˜λ―€λ‘œ 전체 단어가 μ•„λ‹Œ κ°œλ³„ μŒμ†Œ λ˜λŠ” 문자λ₯Ό μ˜ˆμΈ‘ν•˜λŠ” 것이 ν•©λ¦¬μ μž…λ‹ˆλ‹€. CTCλŠ” μž‘μ€ μ–΄νœ˜μ—μ„œ κ°€μž₯ 잘 μž‘λ™ν•˜λ―€λ‘œ 문자λ₯Ό μ˜ˆμΈ‘ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

<div class="flex justify-center">
<img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/cnn-feature-encoder.png" alt="The audio waveform gets mapped to a shorter sequence of hidden-states">
</div>

ν…μŠ€νŠΈ μ˜ˆμΈ‘μ„ μœ„ν•΄ 768차원 인코더 좜λ ₯ 각각을 μ„ ν˜• λ ˆμ΄μ–΄("CTC ν—€λ“œ")λ₯Ό μ‚¬μš©ν•˜μ—¬ 문자 λ ˆμ΄λΈ”μ— λ§€ν•‘ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ λͺ¨λΈμ€ 둜그λ₯Ό ν¬ν•¨ν•˜λŠ” `(50, 32)` ν…μ„œ(μ—¬κΈ°μ„œ 32λŠ” μ–΄νœ˜μ˜ 토큰 수)λ₯Ό μ˜ˆμΈ‘ν•©λ‹ˆλ‹€. μ‹œν€€μŠ€μ˜ 각 νŠΉμ§•μ— λŒ€ν•΄ ν•˜λ‚˜μ˜ μ˜ˆμΈ‘μ„ μˆ˜ν–‰ν•˜λ―€λ‘œ μ˜€λ””μ˜€μ˜ 각 μ΄ˆμ— λŒ€ν•΄ 총 50개의 문자λ₯Ό μ˜ˆμΈ‘ν•˜κ²Œ λ©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ λ‹¨μˆœνžˆ 20msλ§ˆλ‹€ ν•œ 문자λ₯Ό μ˜ˆμΈ‘ν•œλ‹€λ©΄ 좜λ ₯ μ‹œν€€μŠ€λŠ” λ‹€μŒκ³Ό 같이 보일 수 μžˆμŠ΅λ‹ˆλ‹€:

```text
BRIIONSAWWSOMEETHINGCLOSETOPANICONHHISOPPONENT'SSFAACEWHENTHEMANNFINALLLYRREECOGGNNIIZEDHHISSERRRRORR ...
```

μžμ„Ένžˆ 보면 μ˜μ–΄μ™€ λ‹€μ†Œ λΉ„μŠ·ν•˜μ§€λ§Œ λ§Žμ€ λ¬Έμžκ°€ μ€‘λ³΅λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” λͺ¨λΈμ΄ μž…λ ₯ μ‹œν€€μŠ€μ˜ μ˜€λ””μ˜€ 20λ°€λ¦¬μ΄ˆλ§ˆλ‹€ *μ–΄λ–€ 것*을 좜λ ₯ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ΄λ©°, ν•œ λ¬Έμžκ°€ 20λ°€λ¦¬μ΄ˆλ³΄λ‹€ κΈ΄ 기간에 걸쳐 λΆ„μ‚°λ˜μ–΄ 있으면 좜λ ₯에 μ—¬λŸ¬ 번 λ‚˜νƒ€λ‚˜κ²Œ λ©λ‹ˆλ‹€. 특히 ν›ˆλ ¨ μ€‘μ—λŠ” λŒ€λ³Έμ˜ 타이밍을 μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ— 이λ₯Ό ν”Όν•  방법이 μ—†μŠ΅λ‹ˆλ‹€. CTCλŠ” μ΄λŸ¬ν•œ 쀑볡을 ν•„ν„°λ§ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

(μ‹€μ œλ‘œ 예츑된 μ‹œν€€μŠ€μ—λŠ” λͺ¨λΈμ΄ μ†Œλ¦¬κ°€ 무엇을 λ‚˜νƒ€λ‚΄λŠ”μ§€ 잘 λͺ¨λ₯Ό λ•Œλ‚˜ 문자 μ‚¬μ΄μ˜ 빈 곡간을 μœ„ν•œ λ§Žμ€ νŒ¨λ”© 토큰도 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λͺ…확성을 μœ„ν•΄ μ˜ˆμ œμ—μ„œ μ΄λŸ¬ν•œ νŒ¨λ”© 토큰을 μ œκ±°ν–ˆμŠ΅λ‹ˆλ‹€. μ˜€λ””μ˜€ μ„Έκ·Έλ¨ΌνŠΈκ°€ λΆ€λΆ„μ μœΌλ‘œ κ²ΉμΉ˜λŠ” 것도 좜λ ₯μ—μ„œ λ¬Έμžκ°€ μ€‘λ³΅λ˜λŠ” 또 λ‹€λ₯Έ μ΄μœ μž…λ‹ˆλ‹€.)

## CTC μ•Œκ³ λ¦¬μ¦˜[[the-ctc-algorithm]]

CTC μ•Œκ³ λ¦¬μ¦˜μ˜ 핡심은 ν”νžˆ **곡백 토큰**이라고 λΆˆλ¦¬λŠ” 특수 토큰을 μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이것은 λͺ¨λΈμ΄ μ˜ˆμΈ‘ν•˜λŠ” 또 λ‹€λ₯Έ 토큰이며 μ–΄νœ˜μ˜ μΌλΆ€μž…λ‹ˆλ‹€. 이 μ˜ˆμ‹œμ—μ„œ 빈 토큰은 `_`둜 ν‘œμ‹œλ©λ‹ˆλ‹€. 이 특수 토큰은 문자 κ·Έλ£Ή κ°„μ˜ μ—„κ²©ν•œ 경계 역할을 ν•©λ‹ˆλ‹€.

CTC λͺ¨λΈμ˜ 전체 좜λ ₯은 λ‹€μŒκ³Ό 같을 수 μžˆμŠ΅λ‹ˆλ‹€:

```text
B_R_II_O_N_||_S_AWW_|||||_S_OMEE_TH_ING_||_C_L_O_S_E||TO|_P_A_N_I_C_||_ON||HHI_S||_OP_P_O_N_EN_T_'SS||_F_AA_C_E||_W_H_EN||THE||M_A_NN_||||_F_I_N_AL_LL_Y||||_RREE_C_O_GG_NN_II_Z_ED|||HHISS|||_ER_RRR_ORR||||
```

토큰 `|`λŠ” 단어 ꡬ뢄 λ¬Έμžμž…λ‹ˆλ‹€. 이 μ˜ˆμ—μ„œλŠ” 곡백 λŒ€μ‹  `|`λ₯Ό μ‚¬μš©ν•˜μ—¬ 단어 λ‚˜λˆ„κΈ° μœ„μΉ˜λ₯Ό 더 μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆλ„λ‘ ν–ˆμ§€λ§Œ λ™μΌν•œ μš©λ„λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

CTC 곡백 문자λ₯Ό μ‚¬μš©ν•˜λ©΄ 쀑볡 문자λ₯Ό 필터링할 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 예츑된 μ‹œν€€μŠ€μ˜ λ§ˆμ§€λ§‰ 단어인 `_ER_RRR_ORR`을 μ‚΄νŽ΄λ΄…μ‹œλ‹€. CTC 곡백 토큰이 μ—†μœΌλ©΄ 이 λ‹¨μ–΄λŠ” λ‹€μŒκ³Ό 같이 λ³΄μž…λ‹ˆλ‹€:

```text
ERRRRORR
```

λ‹¨μˆœνžˆ μ€‘λ³΅λœ 문자λ₯Ό μ œκ±°ν•˜λ©΄ `EROR`이 λ©λ‹ˆλ‹€. μ΄λŠ” λΆ„λͺ… μ˜¬λ°”λ₯Έ μ² μžκ°€ μ•„λ‹™λ‹ˆλ‹€. ν•˜μ§€λ§Œ CTC 빈 토큰을 μ‚¬μš©ν•˜λ©΄ 각 κ·Έλ£Ήμ—μ„œ 쀑볡을 μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ:

```text
_ER_RRR_ORR
```

λŠ” μ•„λž˜μ™€ 같이 λ³€κ²½λ©λ‹ˆλ‹€.:

```text
_ER_R_OR
```

이제 `_` 빈 토큰을 μ œκ±°ν•˜μ—¬ μ΅œμ’… 단어λ₯Ό μ–»μŠ΅λ‹ˆλ‹€:

```text
ERROR
```

이 논리λ₯Ό `|`λ₯Ό ν¬ν•¨ν•œ 전체 ν…μŠ€νŠΈμ— μ μš©ν•˜κ³  남은 `|` 문자λ₯Ό 곡백으둜 λ°”κΎΈλ©΄ μ΅œμ’… CTC λ””μ½”λ”©λœ 좜λ ₯은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

```text
BRION SAW SOMETHING CLOSE TO PANIC ON HIS OPPONENT'S FACE WHEN THE MAN FINALLY RECOGNIZED HIS ERROR
```

μš”μ•½ν•˜μžλ©΄, λͺ¨λΈμ€ μž…λ ₯ νŒŒν˜•μ—μ„œ (λΆ€λΆ„μ μœΌλ‘œ κ²ΉμΉ˜λŠ”) μ˜€λ””μ˜€μ˜ 20msλ§ˆλ‹€ ν•˜λ‚˜μ˜ 토큰(문자)을 μ˜ˆμΈ‘ν•©λ‹ˆλ‹€. 이둜 인해 λ§Žμ€ 쀑볡이 λ°œμƒν•©λ‹ˆλ‹€. CTC 빈 토큰 덕뢄에 λ‹¨μ–΄μ˜ μ˜¬λ°”λ₯Έ 철자λ₯Ό νŒŒκ΄΄ν•˜μ§€ μ•Šκ³ λ„ μ΄λŸ¬ν•œ 쀑볡을 μ‰½κ²Œ μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 좜λ ₯ ν…μŠ€νŠΈλ₯Ό μž…λ ₯ μ˜€λ””μ˜€μ™€ μ •λ ¬ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 맀우 κ°„λ‹¨ν•˜κ³  νŽΈλ¦¬ν•œ λ°©λ²•μž…λ‹ˆλ‹€.

<Tip>
πŸ’‘ μ‹€μ œ Wav2Vec2 λͺ¨λΈμ—μ„œ CTC 빈 토큰은 νŒ¨λ”© 토큰 `<pad>`와 λ™μΌν•©λ‹ˆλ‹€. 이 λͺ¨λΈμ€ 예λ₯Ό λ“€μ–΄ ν˜„μž¬ 20ms의 μ˜€λ””μ˜€μ— λŒ€ν•΄ μ˜ˆμΈ‘ν•  λͺ…ν™•ν•œ λ¬Έμžκ°€ μ—†λŠ” κ²½μš°μ™€ 같이 μ΄λŸ¬ν•œ `<pad>` 토큰을 많이 μ˜ˆμΈ‘ν•©λ‹ˆλ‹€. νŒ¨λ”©μ— CTC 곡백(blanking)κ³Ό λ™μΌν•œ 토큰을 μ‚¬μš©ν•˜λ©΄ λ””μ½”λ”© μ•Œκ³ λ¦¬μ¦˜μ΄ λ‹¨μˆœν™”λ˜κ³  μ–΄νœ˜λ₯Ό μž‘κ²Œ μœ μ§€ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.
</Tip>

μΈμ½”λ”μ˜ 좜λ ₯ μ‹œν€€μŠ€κ°€ μ–΄νœ˜μ— 음ν–₯ νŠΉμ§•μ„ νˆ¬μ˜ν•˜λŠ” μ„ ν˜• λ ˆμ΄μ–΄λ‘œ μ΄λ™ν•˜κΈ° λ•Œλ¬Έμ— 트랜슀포머 인코더 λͺ¨λΈμ— CTCλ₯Ό μΆ”κ°€ν•˜λŠ” 것은 κ°„λ‹¨ν•©λ‹ˆλ‹€.λͺ¨λΈμ€ νŠΉμˆ˜ν•œ CTC μ†μ‹€λ‘œ ν›ˆλ ¨λ©λ‹ˆλ‹€.

CTC의 ν•œ 가지 단점은 'μ†Œλ¦¬'λŠ” μ •ν™•ν•˜μ§€λ§Œ '철자'λŠ” μ •ν™•ν•˜μ§€ μ•Šμ€ 단어λ₯Ό 좜λ ₯ν•  수 μžˆλ‹€λŠ” μ μž…λ‹ˆλ‹€.κ²°κ΅­ CTC ν—€λ“œλŠ” μ™„μ „ν•œ 단어가 μ•„λ‹Œ κ°œλ³„ 문자만 κ³ λ €ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. μ˜€λ””μ˜€ νŠΈλžœμŠ€ν¬λ¦½μ…˜μ˜ ν’ˆμ§ˆμ„ κ°œμ„ ν•˜λŠ” ν•œ 가지 방법은 μ™ΈλΆ€ μ–Έμ–΄ λͺ¨λΈμ„ μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이 μ–Έμ–΄ λͺ¨λΈμ€ 기본적으둜 CTC 좜λ ₯ μœ„μ— λ§žμΆ€λ²• 검사기 역할을 ν•©λ‹ˆλ‹€.

## Wav2Vec2, HuBERT, M-CTC-T, ...의 차이점은 λ¬΄μ—‡μΈκ°€μš”?[[whats-the-difference-between-wav2vec2-hubert-mctct]]

λͺ¨λ“  트랜슀포머 기반 CTC λͺ¨λΈμ€ 맀우 μœ μ‚¬ν•œ μ•„ν‚€ν…μ²˜λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. 트랜슀포머 인코더(λ””μ½”λ”λŠ” μ•„λ‹˜)λ₯Ό μ‚¬μš©ν•˜λ©° κ·Έ μœ„μ— CTC ν—€λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€. μ•„ν‚€ν…μ²˜ μΈ‘λ©΄μ—μ„œ 보면 λ‹€λ₯Έ μ λ³΄λ‹€λŠ” λΉ„μŠ·ν•œ 점이 더 λ§ŽμŠ΅λ‹ˆλ‹€.

Wav2Vec2와 M-CTC-T의 ν•œ 가지 차이점은 μ „μžλŠ” μ›μ‹œ μ˜€λ””μ˜€ νŒŒν˜•μ—μ„œ μž‘λ™ν•˜λŠ” 반면 ν›„μžλŠ” 멜 μŠ€νŽ™νŠΈλ‘œκ·Έλž¨μ„ μž…λ ₯으둜 μ‚¬μš©ν•œλ‹€λŠ” μ μž…λ‹ˆλ‹€. λ˜ν•œ 두 λͺ¨λΈμ€ μ„œλ‘œ λ‹€λ₯Έ λͺ©μ μœΌλ‘œ ν›ˆλ ¨λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, M-CTC-TλŠ” λ‹€κ΅­μ–΄ μŒμ„± 인식을 μœ„ν•΄ ν›ˆλ ¨λ˜μ—ˆκΈ° λ•Œλ¬Έμ— λ‹€λ₯Έ μ•ŒνŒŒλ²³ 외에 ν•œμžλ₯Ό ν¬ν•¨ν•˜λŠ” 비ꡐ적 큰 CTC ν—€λ“œλ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€.

Wav2Vec2와 HuBERTλŠ” μ™„μ „νžˆ λ™μΌν•œ μ•„ν‚€ν…μ²˜λ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ 맀우 λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ ν•™μŠ΅λ©λ‹ˆλ‹€. Wav2Vec2λŠ” μ˜€λ””μ˜€μ˜ 마슀크된 뢀뢄에 λŒ€ν•œ μŒμ„± λ‹¨μœ„λ₯Ό μ˜ˆμΈ‘ν•˜μ—¬ BERT의 마슀크된 μ–Έμ–΄ λͺ¨λΈλ§κ³Ό 같이 사전 ν•™μŠ΅λ©λ‹ˆλ‹€. HuBERTλŠ” BERTμ—μ„œ ν•œ 걸음 더 λ‚˜μ•„κ°€ ν…μŠ€νŠΈ λ¬Έμž₯의 토큰과 μœ μ‚¬ν•œ 'κ°œλ³„ μŒμ„± λ‹¨μœ„'λ₯Ό μ˜ˆμΈ‘ν•˜λŠ” 방법을 ν•™μŠ΅ν•˜μ—¬ κΈ°μ‘΄ NLP κΈ°μˆ μ„ μ‚¬μš©ν•˜μ—¬ μŒμ„±μ„ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

μ—¬κΈ°μ„œ κ°•μ‘° ν‘œμ‹œλœ λͺ¨λΈλ§Œ 트랜슀포머 기반 CTC λͺ¨λΈμ΄ μ•„λ‹ˆλΌλŠ” 점을 λΆ„λͺ…νžˆ λ§μ”€λ“œλ¦½λ‹ˆλ‹€. λ‹€λ₯Έ λͺ¨λΈλ„ 많이 μžˆμ§€λ§Œ λͺ¨λ‘ λΉ„μŠ·ν•œ λ°©μ‹μœΌλ‘œ μž‘λ™ν•œλ‹€λŠ” 것을 λ°°μ› μŠ΅λ‹ˆλ‹€.
Loading

0 comments on commit bd8083b

Please sign in to comment.