Skip to content

Latest commit

ย 

History

10 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

CLAP-D : ๋งˆ๋น„๋ง์žฅ์•  ์–ธ์–ด ๊ธฐ๋Šฅ ์ž๋™ ํ‰๊ฐ€ ๋ชจ๋ธ ๊ฐœ๋ฐœ

๋‡Œ์กธ์ค‘ ํ›„ ์–ธ์–ด์žฅ์•  ์ง„๋‹จ์„ ์œ„ํ•œ ๋”ฅ๋Ÿฌ๋‹ ๊ธฐ๋ฐ˜ ์–ธ์–ด ๊ธฐ๋Šฅ ํ‰๊ฐ€ ์„œ๋น„์Šค โ€” ๋˜๋ฐ•๋˜๋ฐ• ๋งํ•˜๊ธฐ ํ•ญ๋ชฉ ๋‹ด๋‹น


ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

์‹ค์–ด์ฆ(Aphasia)ยท๋งˆ๋น„๋ง์žฅ์• (Dysarthria)๋Š” ๋‡Œ์กธ์ค‘, ์™ธ์ƒ์„ฑ ๋‡Œ์†์ƒ, ์‹ ๊ฒฝํ‡ดํ–‰์„ฑ ์งˆํ™˜์œผ๋กœ ์ธํ•ด ํ™˜์ž์˜ ์˜์‚ฌ์†Œํ†ต ๋Šฅ๋ ฅ๊ณผ ์‚ถ์˜ ์งˆ์— ์ค‘๋Œ€ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
ํ˜„์žฌ ์ž„์ƒ ํ‰๊ฐ€๋Š” ์–ธ์–ด์น˜๋ฃŒ์‚ฌยท์‹ ๊ฒฝ๊ณผ ์ „๋ฌธ์˜์˜ ์ฒญ์ง€๊ฐ์  ํŒ๋‹จ์— ์˜์กดํ•˜๋ฉฐ, ์ฃผ๊ด€์„ฑ ๊ฐœ์ž…, ์‹œ๊ฐ„/์ธ๋ ฅ ์†Œ๋ชจ, ์ •๋Ÿ‰์  ์ถ”์  ๋ถˆ๊ฐ€ ๋“ฑ์˜ ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ์Œ์„ฑ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜์˜ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ๋กœ ์ด ํ•œ๊ณ„๋ฅผ ๋ณด์™„ํ•˜๋Š” ์ž๋™ ํ‰๊ฐ€ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.


๋‹ด๋‹น ํ•ญ๋ชฉ : ๋˜๋ฐ•๋˜๋ฐ• ๋งํ•˜๊ธฐ

CLAP-D ๊ฒ€์‚ฌ๋Š” ๋งˆ๋น„๋ง์žฅ์• ๋ฅผ ์œ„ํ•œ 5๊ฐ€์ง€ ํ•ญ๋ชฉ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๊ทธ ์ค‘ ๋˜๋ฐ•๋˜๋ฐ• ๋งํ•˜๊ธฐ ํ•ญ๋ชฉ์„ ๋‹ด๋‹นํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ ๋‚ด์šฉ
๋˜๋ฐ•๋˜๋ฐ• ๋งํ•˜๊ธฐ ํ‰๊ฐ€์ž๊ฐ€ ์ œ์‹œํ•œ ๋‹จ์–ดยท๋ฌธ์žฅ์„ ๋˜๋ฐ•๋˜๋ฐ• ๋งํ•˜๋Š” ๊ฒ€์‚ฌ, 25๋ฌธํ•ญ
  • ๊ฒ€์‚ฌ์ž(ํ™˜์ž)์˜ ๋ฐœํ™” ์Œ์„ฑ + ํ‰๊ฐ€์ž์˜ ์ œ์‹œ ํ…์ŠคํŠธ, ๋‘ ์ž…๋ ฅ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌ
  • ๊ฐ ๋ฌธํ•ญ์˜ ์ ์ˆ˜๋ฅผ ์˜ˆ์ธกํ•˜์—ฌ ์ตœ์ข… ์ฑ„์  ์ ์ˆ˜(์ •์ˆ˜)๋ฅผ ์‚ฐ์ถœ
  • ์ตœ์ข… ํ‰๊ฐ€ ์ง€ํ‘œ: Accuracy ๋ฐ Pearson ์ƒ๊ด€๊ณ„์ˆ˜(r)

ํŒŒ์ผ ๊ตฌ์กฐ

CLAP_D/
โ”œโ”€โ”€ scr/
โ”‚   โ”œโ”€โ”€ data/
โ”‚   โ”‚   โ”œโ”€โ”€ preprocess.py          # ์Œ์„ฑโ†’๋ฉœ์ŠคํŽ™, ํ…์ŠคํŠธโ†’์ž๋ชจ ์ธ๋ฑ์Šค ์ „์ฒ˜๋ฆฌ
โ”‚   โ”‚   โ””โ”€โ”€ split.py               # ์ ์ˆ˜๋ณ„ ๊ณ„์ธต ๋ถ„๋ฆฌ ํ›„ train/valid/test ๋ถ„ํ• 
โ”‚   โ”œโ”€โ”€ models/
โ”‚   โ”‚   โ””โ”€โ”€               # Cross-Attention ๋ชจ๋ธ
โ”‚   โ”œโ”€โ”€ utils/
โ”‚   โ”‚   โ”œโ”€โ”€ augment_utils.py       # ํ”ผ์น˜ ์ด๋™ + ์†๋„ ๋ณ€ํ™˜ ์ฆ๊ฐ•
โ”‚   โ”‚   โ”œโ”€โ”€ data_utils_class.py    # ๋ฐ์ดํ„ฐ ๋กœ๋“œ, ์ฆ๊ฐ• ํ†ตํ•ฉ, reliable ์„ ํƒ
โ”‚   โ”‚   โ”œโ”€โ”€ train_utils.py         # ํ•™์Šต ๋ฃจํ”„, ์†์‹ค ๊ฐ€์ค‘์น˜ ์ ์šฉ
โ”‚   โ”‚   โ”œโ”€โ”€ wav_utils.py           # WAV โ†’ ๋ฉœ์ŠคํŽ™ํŠธ๋กœ๊ทธ๋žจ ๋ณ€ํ™˜
โ”‚   โ”‚   โ””โ”€โ”€ jamo_utils.py          # ํ•œ๊ตญ์–ด ์ž๋ชจ ๋ถ„๋ฆฌ ๋ฐ ์ •์ˆ˜ ์ธ์ฝ”๋”ฉ
โ”‚   โ”œโ”€โ”€ train/
โ”‚   โ”‚   โ””โ”€โ”€ train.py               # ์ „์ฒด ์‹คํ—˜ ์กฐํ•ฉ ๊ทธ๋ฆฌ๋“œ ์„œ์น˜ ์‹คํ–‰
โ”‚   โ””โ”€โ”€ evaluate/
โ”‚       โ””โ”€โ”€ test.py                # ๋ชจ๋ธ ๋กœ๋“œ โ†’ ์˜ˆ์ธก โ†’ accuracy/corr ์‚ฐ์ถœ โ†’ CSV ์ €์žฅ
โ”œโ”€โ”€ data/
โ”‚   โ”œโ”€โ”€ csv/                       # ๋ชจ๋ธ๋ณ„ score_df, compare_df ๊ฒฐ๊ณผ
โ”‚   โ”œโ”€โ”€ npy/                       # ์ „์ฒ˜๋ฆฌ๋œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ (โ€ป ๋ฏธํฌํ•จ)
โ”‚   โ””โ”€โ”€ wav_flie/                  # ์›๋ณธ ์Œ์„ฑ ๋ฐ์ดํ„ฐ (โ€ป ๋ฏธํฌํ•จ)
โ””โ”€โ”€ checkpoints/                   # ํ•™์Šต๋œ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜ (โ€ป ๋ฏธํฌํ•จ)

โ€ป data/npy, data/wav_flie: ์ €์ž‘๊ถŒ์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณต๋ฐ›์•„ ์‚ฌ์šฉํ•˜์˜€์œผ๋ฏ€๋กœ ์ €์žฅ์†Œ์— ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
โ€ป checkpoints: ๋ชจ๋ธ ํŒŒ์ผ(.keras)์˜ ์šฉ๋Ÿ‰์ด ์ปค ์ €์žฅ์†Œ์— ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


์ฝ”๋“œ ํ๋ฆ„

๋‹จ๊ณ„ ํŒŒ์ผ ํ•จ์ˆ˜ / ํด๋ž˜์Šค ์„ค๋ช… ์„ ํƒ์ง€
1. ์ „์ฒ˜๋ฆฌ wav_utils.py x_data_preprocess() wav ํŒŒ์ผ โ†’ ๋ฉœ ์ŠคํŽ™ํŠธ๋กœ๊ทธ๋žจ โ†’ x1_data.npy -
jamo_utils.py text_to_ctc_indices() ์ œ์‹œ ํ…์ŠคํŠธ โ†’ ์ž๋ชจ ์ธ์ฝ”๋”ฉ โ†’ x2_data.npy -
2. ๋ฐ์ดํ„ฐ ๋กœ๋“œ data_utils.py data_load() npy ํŒŒ์ผ ๋กœ๋“œ ๋ฐ ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ -
3. ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ data_utils.py make_list() ๋ฌธํ•ญ๋ณ„ ๋…๋ฆฝ ํ•™์Šต ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ no1 ~ no25
total_concat() ์ „์ฒด 25๋ฌธํ•ญ ๋ณ‘ํ•ฉ total
select_reliable_data() Target ๋ถ„์‚ฐ ์ƒ์œ„ 3๋ฌธํ•ญ ์„ ํƒ reliable
4. ๋ฐ์ดํ„ฐ ์ฆ๊ฐ• data_utils.py augment() Targetโ‰ 1 ์†Œ์ˆ˜ ์ƒ˜ํ”Œ๋งŒ ์„ ํƒํ•˜์—ฌ ์ฆ๊ฐ• aug / no aug
augment_utils.py speed_aug() ๋ฉœ ์ŠคํŽ™ํŠธ๋กœ๊ทธ๋žจ ์‹œ๊ฐ„์ถ• ์„ ํ˜• ๋ณด๊ฐ„ (์†๋„ ๋ณ€ํ™˜)
pitch_aug() ๋ฉœ ๋นˆ(bin) ๋‹จ์œ„ ์ฃผํŒŒ์ˆ˜ ์ถ• ์ด๋™ (ํ”ผ์น˜ ๋ณ€ํ™˜)
5. ๋ชจ๋ธ ์ƒ์„ฑ model_1D.py make_talk_clean_model() CNN โ†’ GRU โ†’ Attention ร— 6 โ†’ Dense(1) 1D / 2D, linear / relu
6. ๋ชจ๋ธ ํ•™์Šต train_utils.py model_train() Adam ยท MSE ยท EarlyStopping์œผ๋กœ ํ•™์Šต lossO / lossX
weight_return() ์ ์ˆ˜๋ณ„ ์—ญ์ˆ˜ ๊ฐ€์ค‘์น˜ ๊ณ„์‚ฐ (lossO ์ ์šฉ ์‹œ)
7. ํ‰๊ฐ€ test.py model.predict() ์˜ˆ์ธก๊ฐ’(0~1) ร— Score(Alloc) โ†’ round โ†’ Accuracy / Pearson r โ†’ CSV -

๊ธฐ์ˆ  ์Šคํƒ

Python TensorFlow/Keras NumPy Pandas Mel-Spectrogram Multi-Head Attention CNN Bidirectional GRU


๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ

ํ•ญ๋ชฉ ๋‚ด์šฉ
์ „์ฒด ์ƒ˜ํ”Œ ์ˆ˜ 1,500๊ฐœ (25๋ฌธํ•ญ ร— 60๊ฐœ)
์Œ์„ฑ ์ž…๋ ฅ (x1) ๋ฉœ ์ŠคํŽ™ํŠธ๋กœ๊ทธ๋žจ, shape (128, 312), ํŒจ๋”ฉ๊ฐ’ -80.0
ํ…์ŠคํŠธ ์ž…๋ ฅ (x2) ์ œ์‹œ ๋‹จ์–ด ์ž๋ชจ ๋ถ„๋ฆฌ ํ›„ ์ •์ˆ˜ ์ธ์ฝ”๋”ฉ, shape (12,)
์ •๋‹ต ๋ ˆ์ด๋ธ” Score(Refer) โ€” ํ‰๊ฐ€์ž๊ฐ€ ๋ถ€์—ฌํ•œ ์‹ค์ œ ์ฑ„์  ์ ์ˆ˜ (์ •์ˆ˜)
ํ•™์Šต ํƒ€๊ฒŸ Target = ๋“์  / ๋งŒ์  โ€” 0~1 ์‚ฌ์ด์˜ ์—ฐ์† ๋น„์œจ๊ฐ’

๋ชจ๋ธ์€ ๋“์  ๋น„์œจ(0~1)์„ ์˜ˆ์ธกํ•˜๊ณ , ์˜ˆ์ธก๊ฐ’์— ํ•ด๋‹น ๋ฌธํ•ญ์˜ ๋งŒ์ (Score(Alloc))์„ ๊ณฑํ•œ ๋’ค ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ ์ตœ์ข… ์ •์ˆ˜ ์ ์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ธก ํ๋ฆ„: ๋ชจ๋ธ ์ถœ๋ ฅ(0~1) ร— Score(Alloc) โ†’ ๋ฐ˜์˜ฌ๋ฆผ โ†’ ์ตœ์ข… ์ ์ˆ˜

ํ•ต์‹ฌ ๋ฌธ์ œ: ์‹ฌ๊ฐํ•œ ์ ์ˆ˜ ๋ถ„ํฌ ํŽธํ–ฅ

Target = 1 (๋งŒ์ )     :  ~74.46%  (๋Œ€๋‹ค์ˆ˜)
Target โ‰  1 (๊ฐ์ /0์ )  :  ~25.54%  (์†Œ์ˆ˜)

์ „์ฒด 25๋ฌธํ•ญ ๋ชจ๋‘ ๋งŒ์ (Target=1) ๋น„์œจ์ด ์••๋„์ ์œผ๋กœ ๋†’๊ณ  ์ ์ˆ˜ ๋ถ„์‚ฐ์ด ๋‚ฎ์Šต๋‹ˆ๋‹ค.
์ด๋Š” ๋‹จ์ˆœํžˆ ๋ชจ๋“  ์ƒ˜ํ”Œ์„ ๋งŒ์ ์œผ๋กœ ์˜ˆ์ธกํ•ด๋„ 74.46%์˜ accuracy๊ฐ€ ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด,
๋ชจ๋ธ์ด ์ ์ˆ˜ ๋ถ„ํฌ ํŽธํ–ฅ์— ์˜ํ•ด ํ•ญ์ƒ ๋งŒ์ ์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ˆ˜๋ ดํ•  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Image

๋ฐœํ™” ์Œ์„ฑ(Query)๊ณผ ์ œ์‹œ ํ…์ŠคํŠธ(Key) ๊ฐ„์˜ ์œ ์‚ฌ์„ฑ์„ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•ด
Cross Multi-Head Attention ๊ตฌ์กฐ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

[์Œ์„ฑ ์ž…๋ ฅ (128ร—312)]
        โ†“
  SequenceMask
        โ†“
  Conv1D ร— 2 + BatchNorm + HardTanh
        โ†“
  LayerNormalization
        โ†“
  Bidirectional GRU (64ร—2)            [ํ…์ŠคํŠธ ์ž…๋ ฅ (12,)]
        โ†“                                     โ†“
  Sinusoidal Positional Encoding       Embedding (55โ†’16)
        โ†“                                     โ†“
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚  Multi-Head Attention ร— 6 (Q=์Œ์„ฑ, K/V=ํ…์ŠคํŠธ)     โ”‚
  โ”‚  + Add & Norm + FFN (Dense 512โ†’128) + Add & Norm  โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
        โ†“
  GlobalAveragePooling1D + GlobalMaxPooling1D (concat)
        โ†“
  Dense (512, relu) โ†’ Dense (1, linear)
        โ†“
  ์˜ˆ์ธก๊ฐ’ ร— Score(Alloc) โ†’ round โ†’ ์ตœ์ข… ์ ์ˆ˜
๊ตฌ์„ฑ ์š”์†Œ ์„ธ๋ถ€ ๋‚ด์šฉ
ํŒจ๋”ฉ ๋งˆ์Šคํฌ ์œ ํšจ ์Œ์„ฑ ๊ธธ์ด ์ถ”์ถœ, ํŒจ๋”ฉ ์ œ์™ธ
CNN Conv1D(512, kernel=11, stride=2) or Conv1D(512, kernel=11, stride=1)
ํ™œ์„ฑํ™” HardTanh (clip [-20, 20])
RNN Bidirectional GRU(64), dropout=0.1
์œ„์น˜ ์ธ์ฝ”๋”ฉ Sinusoidal Positional Encoding
Attention MultiHeadAttention(heads=16, key_dim=32, dropout=0.1) ร— 6
์ถœ๋ ฅ์ธต Dense(1, activation=out) โ€” relu ๋˜๋Š” linear
ํ•™์Šต Adam(lr=0.001), loss=MSE, EarlyStopping(patience=10)
๋ฐฐ์น˜ ํฌ๊ธฐ 64, ์ตœ๋Œ€ 100 epoch

์‹คํ—˜ ์กฐํ•ฉ

์ด 8๊ฐ€์ง€ ๋ชจ๋ธ ร— 25๋ฌธํ•ญ + total + reliable + aug ๋ฒ„์ „ = ๋Œ€๊ทœ๋ชจ ๊ทธ๋ฆฌ๋“œ ์„œ์น˜
(itertools.product๋กœ ๋ชจ๋“  ์กฐํ•ฉ ์ž๋™ ์ƒ์„ฑ)

๋ณ€์ˆ˜ ์„ ํƒ์ง€ ๋น„๊ณ 
ํ•™์Šต ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ no1~no25, total, reliable ๋‹จ์ผ ํ•ญ๋ชฉ์˜ ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šต๋œ ๋ชจ๋ธ์ด ์ „์ฒด ํ•ญ๋ชฉ์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์„์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ ํ•ญ๋ชฉ๋ณ„๋กœ๋„ ํ•™์Šต์„ ์ง„ํ–‰
CNN ์ฐจ์› 1D / 2D 312์˜ ์‹œ๊ฐ„์ถ•์— 128์˜ ํŠน์„ฑ์„ ์ง€๋‹Œ 1D, ๊ฐ€๋กœ ์„ธ๋กœ ํ‘๋ฐฑ์˜ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ง„ 2D ๋‘ ๊ฐ€์ง€ ๊ด€์ ์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ง„ํ–‰
์ถœ๋ ฅ ํ™œ์„ฑํ™” relu / linear ํ•™์Šต ํƒ€๊ฒŸ(๋“์  ๋น„์œจ)์˜ ๋ฒ”์œ„๊ฐ€ 0~1 ์ž„์„ ๊ณ ๋ ค ์˜ˆ์ธก๊ฐ’์ด ์Œ์ˆ˜๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ReLU๋ฅผ ์‹œ๋„
์†์‹ค ๊ฐ€์ค‘์น˜ lossO (์žˆ์Œ) / lossX (์—†์Œ) ๋ฐ์ดํ„ฐ ๋ถˆ๊ท ํ˜•์œผ๋กœ ์ธํ•ด ์ƒ๊ธฐ๋Š” ์˜ˆ์ธกํŽธํ–ฅ์ด ์†์‹ค ๊ฐ€์ค‘์น˜๋กœ ํ•ด๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ง„ํ–‰
๋ฐ์ดํ„ฐ ์ฆ๊ฐ• aug ์ ์šฉ / ๋ฏธ์ ์šฉ ๋ฏธ๋งŒ์  ํ•ญ๋ชฉ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ๊ฐ•์„ ํ†ตํ•ด ๋ชจ๋ธ์˜ ์ •ํ™•๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์„์ง€ ํ™•์ธ์„ ์œ„ํ•ด ์ง„ํ–‰

์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•œ ์‹œ๋„

์ ์ˆ˜ ๋ถ„ํฌ ํŽธํ–ฅยท์ผ๋ฐ˜ํ™” ์„ฑ๋Šฅ ๋ถ€์กฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ 5๊ฐ€์ง€ ์ถ•์œผ๋กœ ์‹คํ—˜์„ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


25๊ฐœ ๋ฌธํ•ญ์„ ์–ด๋–ป๊ฒŒ ์กฐํ•ฉํ•ด ํ•™์Šตํ• ์ง€๋„ ๋ณ€์ˆ˜๋กœ ์‹คํ—˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ๋‚ด์šฉ
no1 ~ no25 ๊ฐ ๋ฌธํ•ญ๋ณ„ ๋…๋ฆฝ ๋ชจ๋ธ ํ•™์Šต
total 25๋ฌธํ•ญ ์ „์ฒด๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ ํ•™์Šต
reliable ์ ์ˆ˜ ๋ถ„์‚ฐ์ด ๊ฐ€์žฅ ๋†’์€ ์ƒ์œ„ 3๊ฐœ ๋ฌธํ•ญ๋งŒ ์„ ํƒํ•˜์—ฌ ํ•™์Šต
# reliable: Target ํ‘œ์ค€ํŽธ์ฐจ ๊ธฐ์ค€ ์ƒ์œ„ 3๋ฌธํ•ญ ์„ ํƒ
temp_list = d_2_csv.groupby('QUESTION_NO')['Target'].describe()[['std']] \
              .sort_values('std', ascending=False).index[:3]
Image

์˜๋„: ๋ถ„์‚ฐ์ด ๋‚ฎ์€ ๋ฌธํ•ญ(๋Œ€๋ถ€๋ถ„ ๋งŒ์ )์€ ๋ชจ๋ธ์ด "ํ•ญ์ƒ ๋งŒ์  ์ถœ๋ ฅ"์„ ํ•™์Šตํ•˜๋„๋ก ์œ ๋„ํ•˜๋ฏ€๋กœ ์ œ์™ธํ•˜๊ณ ,
์ƒ๋Œ€์ ์œผ๋กœ ์ ์ˆ˜ ๋‹ค์–‘์„ฑ์ด ๋†’์€ ๋ฌธํ•ญ๋งŒ ์„ ๋ณ„ํ•˜์—ฌ ํ•™์Šต์˜ ์งˆ์„ ๋†’์ด๊ณ ์ž ํ•จ
๊ฒฐ๊ณผ: reliable๋„ total๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ์ค€์„  ์ˆ˜์ค€์„ ๋ฒ—์–ด๋‚˜์ง€ ๋ชปํ•จ. ๋ฌธํ•ญ ์ˆ˜ ์ž์ฒด๊ฐ€ ์ค„์–ด ๋ฐ์ดํ„ฐ ๋ถ€์กฑ ์‹ฌํ™”.


2. CNN ์ž…๋ ฅ ์ฐจ์› ๋ณ€๊ฒฝ: 1D โ†’ 2D

๊ตฌ๋ถ„ ๋ฐฉ์‹
1D (baseline) ๋ฉœ ์ŠคํŽ™ํŠธ๋กœ๊ทธ๋žจ์„ (์‹œ๊ฐ„, ์ฃผํŒŒ์ˆ˜) ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ ํ›„ Conv1D ์ฒ˜๋ฆฌ
2D (128, 312, 1) ์›๋ณธ ํ˜•ํƒœ ๊ทธ๋Œ€๋กœ Conv2D ์ฒ˜๋ฆฌ ํ›„ Reshape
# 1D: (B, 128, 312, 1) โ†’ Permute โ†’ (B, 312, 128) โ†’ Conv1D
# 2D: (B, 128, 312, 1) โ†’ Conv2D(32, (41,11), stride=(2,2)) โ†’ Conv2D(32, (21,11), stride=(2,1))

์˜๋„: 2D CNN์ด ์ฃผํŒŒ์ˆ˜-์‹œ๊ฐ„ ์ถ•์˜ 2์ฐจ์› ํŒจํ„ด(ํฌ๋งŒํŠธ ๊ตฌ์กฐ ๋“ฑ)์„ ๋” ์ž˜ ํฌ์ฐฉํ•  ๊ฒƒ์ด๋ผ ๊ธฐ๋Œ€
๊ฒฐ๊ณผ: ๋™์ผ ์กฐ๊ฑด(linear, lossX)์—์„œ total accuracy ๋™๋“ฑ(0.5793), aug ๋ฐ์ดํ„ฐ corr์—์„œ 2D๊ฐ€ ์†Œํญ ์šฐ์„ธ(0.5160 vs 0.4646)


3. ์ถœ๋ ฅ ํ™œ์„ฑํ™” ํ•จ์ˆ˜ ๋ณ€๊ฒฝ: ReLU โ†’ Linear

ํ•™์Šต ํƒ€๊ฒŸ(๋“์  ๋น„์œจ)์€ 0~1 ๋ฒ”์œ„์ด๋ฏ€๋กœ, ์˜ˆ์ธก๊ฐ’์ด ์Œ์ˆ˜๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ReLU๋ฅผ ์‹œ๋„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ตฌ๋ถ„ ์ถœ๋ ฅ์ธต ํ™œ์„ฑํ™” ์˜๋„
relu Dense(1, activation='relu') ์˜ˆ์ธก๊ฐ’ โ‰ฅ 0 ๋ณด์žฅ
linear (baseline) Dense(1, activation='linear') ์ œ์•ฝ ์—†์ด ํ•™์Šต

๊ฒฐ๊ณผ: ReLU ๋ชจ๋ธ์€ ํ•™์Šต ์ค‘ ์ถœ๋ ฅ์ด 0์œผ๋กœ ์™„์ „ํžˆ ์ˆ˜๋ ดํ•˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ถœ๋ ฅ์ธต์— ReLU๋ฅผ ์ ์šฉํ•˜๋ฉด, ๋‰ด๋Ÿฐ์˜ ์ž…๋ ฅ๊ฐ’์ด ์Œ์ˆ˜๊ฐ€ ๋  ๊ฒฝ์šฐ ์ถœ๋ ฅ์ด 0์œผ๋กœ ๊ณ ์ •๋˜๊ณ  ์—ญ์ „ํŒŒ ๊ธฐ์šธ๊ธฐ๋„ 0์ด ๋ฉ๋‹ˆ๋‹ค (Dying ReLU ํ˜„์ƒ). MSE ์†์‹ค ํ™˜๊ฒฝ์—์„œ ์ด ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ๊ฐ€์ค‘์น˜๊ฐ€ ๋” ์ด์ƒ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•„ ๋ชจ๋ธ์ด ๋ชจ๋“  ์ƒ˜ํ”Œ์— ๋Œ€ํ•ด 0์ (์˜ˆ์ธก๊ฐ’=0)์„ ์ถœ๋ ฅํ•˜๋Š” ์ƒํƒœ๋กœ ๊ณ ์ฐฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์‹ค์ œ ์ •๋‹ต์ด 0์ ์ธ ์ƒ˜ํ”Œ๋งŒ ๋งžํžˆ๊ฒŒ ๋˜์–ด accuracy โ‰ˆ 14.13%์— ๋จธ๋ฌผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด linear ํ™œ์„ฑํ™”๋Š” ์ด๋Ÿฐ ์ˆ˜๋ ด ๋ฌธ์ œ ์—†์ด ์ •์ƒ์ ์œผ๋กœ ํ•™์Šต์ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค.


weight_return ํ•จ์ˆ˜์—์„œ ์ƒ˜ํ”Œ ๊ฐ€์ค‘์น˜๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ํ•™์Šต์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

# lossO: ์ ์ˆ˜๋ณ„ ์ƒ˜ํ”Œ ๋นˆ๋„์˜ ์—ญ์ˆ˜(์ œ๊ณฑ๊ทผ)๋ฅผ ๊ฐ€์ค‘์น˜๋กœ ๋ถ€์—ฌ
weight[score] = sqrt(total / (num_unique_scores ร— count[score]))

# lossX: ๋ชจ๋“  ์ƒ˜ํ”Œ ๊ฐ€์ค‘์น˜ = 1 (๊ฐ€์ค‘์น˜ ์—†์Œ)
๊ตฌ๋ถ„ ๋‚ด์šฉ
lossO (baseline) ๋งŒ์ (Target=1) ์™ธ ์†Œ์ˆ˜ ์ƒ˜ํ”Œ์— ๋” ๋†’์€ ์†์‹ค ๊ฐ€์ค‘์น˜ ๋ถ€์—ฌ
lossX ๊ฐ€์ค‘์น˜ ์—†์ด ๊ท ๋“ฑ ํ•™์Šต

์˜๋„: ๋งŒ์ (Target=1) ์™ธ ์†Œ์ˆ˜ ์ƒ˜ํ”Œ์— ๋†’์€ ๊ฐ€์ค‘์น˜๋ฅผ ์ค˜ ๋ชจ๋ธ์ด ๋งŒ์ ๋งŒ ์˜ˆ์ธกํ•˜์ง€ ์•Š๋„๋ก ์œ ๋„
๊ฒฐ๊ณผ: ์—ญ์„ค์ ์œผ๋กœ lossX(๊ฐ€์ค‘์น˜ ์—†์Œ)์˜ total accuracy๊ฐ€ ๋” ๋†’์Œ(0.5793 vs 0.2593).
lossO๋Š” ์†Œ์ˆ˜ ์ƒ˜ํ”Œ์— ๊ณผํ•œ ๊ฐ€์ค‘์น˜๊ฐ€ ๋ถ€์—ฌ๋˜์–ด ์˜คํžˆ๋ ค ์ „์ฒด ์˜ˆ์ธก์ด ๋ถˆ์•ˆ์ •ํ•ด์ง. ์ผ๋ถ€ ๋ฌธํ•ญ(no14)์—์„œ๋Š” corr์ด ์†Œํญ ๋†’์•„์ง(r=0.6398).


๋งŒ์ (Target=1) ์™ธ ์†Œ์ˆ˜ ์ƒ˜ํ”Œ์˜ ์ ˆ๋Œ€๋Ÿ‰์ด ๋ถ€์กฑํ•˜์—ฌ ์Œ์„ฑ ์ฆ๊ฐ•์„ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

# ์†๋„ ๋ณ€ํ™˜: ์›๋ณธ ๋ฐœํ™”์˜ ์žฌ์ƒ ์†๋„๋ฅผ ๋ฌด์ž‘์œ„ ๋ณ€๊ฒฝ (๊ฐ์†/๊ฐ€์†)
speed = random(slow_range) or random(fast_range)
# โ†’ ๋ฉœ ์ŠคํŽ™ํŠธ๋กœ๊ทธ๋žจ์˜ ์‹œ๊ฐ„์ถ•์„ ์„ ํ˜• ๋ณด๊ฐ„์œผ๋กœ ๋ฆฌ์ƒ˜ํ”Œ๋ง

# ํ”ผ์น˜ ์ด๋™: ๋ฉœ ๋นˆ(bin)์„ ์œ„์•„๋ž˜๋กœ ๋ฌด์ž‘์œ„ ์ด๋™
shift_bins = random(-max_pitch_bins, +max_pitch_bins)
# min_pitch_bins=5, max_pitch_bins=10 (5~10 bin ๋ฒ”์œ„ ๊ฐ•์ œ)
์ฆ๊ฐ• ๊ธฐ๋ฒ• ๊ตฌํ˜„
์†๋„ ๋ณ€ํ™˜ augment_utils.py / speed_aug() โ€” ๋ฉœ ์ŠคํŽ™ํŠธ๋กœ๊ทธ๋žจ ์‹œ๊ฐ„์ถ• ์„ ํ˜• ๋ณด๊ฐ„ ๋ฆฌ์ƒ˜ํ”Œ๋ง
ํ”ผ์น˜ ์ด๋™ augment_utils.py / pitch_aug() โ€” ๋ฉœ ๋นˆ(bin) ๋‹จ์œ„ ์ฃผํŒŒ์ˆ˜ ์ถ• ์ด๋™
๋ฐ์ดํ„ฐ ๋ณ‘ํ•ฉ augment_utils.py / make_aug_dataset_pitch_speed() โ€” ์†๋„/ํ”ผ์น˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ ์ฆ๊ฐ•
์†Œ์ˆ˜ ์ƒ˜ํ”Œ ์„ ํƒ data_utils.py / augment() โ€” idx_0/idx_1 ๋ถ„๋ฆฌ โ€” Targetโ‰ 1 ์ƒ˜ํ”Œ๋งŒ ์„ ํƒํ•˜์—ฌ ์ฆ๊ฐ•

์˜๋„: ์†Œ์ˆ˜ ์ƒ˜ํ”Œ์„ ๋Š˜๋ ค ์ ์ˆ˜ ๋ถ„ํฌ ํŽธํ–ฅ ์™„ํ™”
๊ฒฐ๊ณผ: aug ์ ์šฉ ์‹œ ์ผ๋ถ€ ๋ฌธํ•ญ์—์„œ ๊ฐœ์„ . ํŠนํžˆ 1D_relu_lossX์˜ no4_aug๊ฐ€ corr=0.7001๋กœ ์ „์ฒด ์ตœ๊ณ  ์ƒ๊ด€๊ณ„์ˆ˜ ๋‹ฌ์„ฑ. ๋‹จ, ์ด๋Š” ํŠน์ • ๋ฌธํ•ญ + aug ์กฐํ•ฉ์—์„œ์˜ ์ด๋ก€์  ํ˜„์ƒ์œผ๋กœ, total/reliable ์˜ˆ์ธก์—์„œ๋Š” ๊ฐœ์„ ๋˜์ง€ ์•Š์•„ ์‹ ๋ขฐํ•˜๊ธฐ ์–ด๋ ค์›€.


์‹คํ—˜ ๊ฒฐ๊ณผ ์š”์•ฝ

ํ•ต์‹ฌ ์ง€ํ‘œ (total ์˜ˆ์ธก ๊ธฐ์ค€)

๋ชจ๋ธ total acc total corr ์œ ํšจ ๋ฌธํ•ญ ์ˆ˜ (acc>0.30 / ๊ฐœ๋ณ„ 25๋ฌธํ•ญ+๋ณ‘ํ•ฉ๋ฌธํ•ญ+๋ถ„์‚ฐ๋ฌธํ•ญ)
1D_linear_lossX 0.5793 0.4748 16 / 27
2D_linear_lossX 0.5793 0.4748 17 / 27
1D_linear_lossO 0.2593 0.5129 4 / 27
2D_linear_lossO 0.2593 0.5129 2 / 27
1D_relu_lossO 0.1413 N/A 4 / 27
2D_relu_lossO 0.1413 N/A 1 / 27
1D_relu_lossX 0.1413 N/A 0 / 27
2D_relu_lossX 0.1413 N/A 0 / 27
Image ---

ํ•ต์‹ฌ ๋ฐœ๊ฒฌ: Accuracy์˜ ํ•จ์ •

๊ฐ€์žฅ ์ข‹์•„ ๋ณด์ด๋Š” ๋ฌธํ•ญ(no1)์˜ accuracy 0.7447์€ ์‹ค์ œ ํ•™์Šต์˜ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ธก ๋ถ„ํฌ ๋ถ„์„ (no1, 1D_linear_lossX)

              ์‹ค์ œ=0  ์‹ค์ œ=1  ์‹ค์ œ=2  ์‹ค์ œ=3
  ์˜ˆ์ธก=1 (300)   65     235      0       0
  ์˜ˆ์ธก=2 (780)  102      99    579       0
  ์˜ˆ์ธก=3 (420)   45      17     55     303

  ์ ์ˆ˜ 0 ์ •๋‹ต๋ฅ :  0 / 212 =  0.0%   โ† ํ•œ ๋ฒˆ๋„ ๋งžํžˆ์ง€ ๋ชปํ•จ
  ์ ์ˆ˜ 1 ์ •๋‹ต๋ฅ : 235 / 351 = 66.9%
  ์ ์ˆ˜ 2 ์ •๋‹ต๋ฅ : 579 / 634 = 91.3%
  ์ ์ˆ˜ 3 ์ •๋‹ต๋ฅ : 303 / 303 = 100%

  ์ „์ฒด accuracy: 1117 / 1500 = 74.47%
Image

๋ฌธ์ œ์ : 0์  ์˜ˆ์ธก์„ ์ „ํ˜€ ํ•˜์ง€ ๋ชปํ•˜๊ณ , ํŠน์ • ์ ์ˆ˜๊ฐ’์œผ๋กœ ํŽธํ–ฅ๋œ ์˜ˆ์ธก์„ ํ•จ. ์ด๋Š” ์‹ค์ œ ๋ชจ๋ธ์ด ์˜ˆ์ธกํ•œ ๊ฐ’์ด Target์˜ 1๊ฐ’์ธ ๋งŒ์ ์„ ์˜ˆ์ธกํ–ˆ๊ณ , 74.46%๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ์ง€๋ฐฐ์  ์ ์ˆ˜(๋งŒ์ =Target=1)์˜ ๋น„์œจ ๊ทธ ์ž์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ์‹คํ—˜์—์„œ ๋†’์€ accuracy๋ฅผ ๋ณด์ธ ๋ชจ๋ธ๋“ค์€ ๊ณตํ†ต์ ์œผ๋กœ
์ง€๋ฐฐ์ ์ธ ์ ์ˆ˜๊ฐ’(๋งŒ์ =Target=1)๋งŒ ์˜ˆ์ธกํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์ ์ˆ˜ ์กฐํ•ฉ์—์„œ ์šฐ์—ฐํžˆ ๋†’์€ ์ •ํ™•๋„๋ฅผ ๊ธฐ๋กํ•˜๋Š”
์ ์ˆ˜ ๋ถ„ํฌ ํŽธํ–ฅ๋œ ํ•™์Šต์˜ ๊ฒฐ๊ณผ์˜€์œผ๋ฉฐ, ์‹ค์ œ๋กœ ์–ธ์–ด์žฅ์•  ์ง„๋‹จ์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์˜ ์ผ๋ฐ˜ํ™” ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•˜์ง€ ๋ชปํ•˜์˜€์Šต๋‹ˆ๋‹ค. Image

Accuracy vs ์ƒ๊ด€๊ณ„์ˆ˜

์ง€ํ‘œ ์˜๋ฏธ ๊ตฌํ˜„ ํ•œ๊ณ„
Accuracy ์˜ˆ์ธก๊ฐ’ == ์ •๋‹ต์ธ ๋น„์œจ np.mean(process_score == correct_y) ์ ์ˆ˜ ๋ถ„ํฌ ํŽธํ–ฅ ์‹œ ์ง€๋ฐฐ์  ์ ์ˆ˜ ์˜ˆ์ธก๋งŒ์œผ๋กœ๋„ ๋†’๊ฒŒ ๋‚˜์˜ด
Pearson r ์˜ˆ์ธก๊ฐ’๊ณผ ์‹ค์ œ๊ฐ’์˜ ์„ ํ˜• ์ƒ๊ด€ np.corrcoef(...) ์‹ค์ œ ์ž„์ƒ์  ์œ ์šฉ์„ฑ์„ ๋” ์ž˜ ๋ฐ˜์˜

์•ˆ์ •์ ์ธ ์กฐ๊ฑด(linear + lossX)์—์„œ์˜ corr์€ ์•ฝ 0.47~0.51 ์ˆ˜์ค€์— ๋จธ๋ฌผ๋ €์Šต๋‹ˆ๋‹ค.


ํ”„๋กœ์ ํŠธ ํ•œ๊ณ„ ๋ฐ ํšŒ๊ณ 

๋ฌธ์ œ ๋‚ด์šฉ
์ ์ˆ˜ ๋ถ„ํฌ ํŽธํ–ฅ ์ „์ฒด 25๋ฌธํ•ญ ๋ชจ๋‘ ๋งŒ์  ๋น„์œจ ~74%. ์†์‹ค ๊ฐ€์ค‘์น˜ยท์ฆ๊ฐ•์„ ์‹œ๋„ํ–ˆ์œผ๋‚˜ ๊ทผ๋ณธ์  ํ•ด๊ฒฐ ๋ถˆ๊ฐ€
๋ฐ์ดํ„ฐ ๋ถ€์กฑ ๋ฌธํ•ญ๋‹น ์•ฝ 60๊ฐœ ์ƒ˜ํ”Œ์œผ๋กœ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์˜ ์ผ๋ฐ˜ํ™”์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Œ
ํ‰๊ฐ€ ์ง€ํ‘œ ์˜ค๋ฅ˜ Accuracy๊ฐ€ ์ ์ˆ˜ ๋ถ„ํฌ ํŽธํ–ฅ ์ƒํ™ฉ์„ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•ด, ํ•™์Šต ์‹คํŒจ๋ฅผ ์„ฑ๊ณต์œผ๋กœ ์˜ค์ธํ•  ๋ป”ํ•จ
ReLU ์ˆ˜๋ ด ๋ฌธ์ œ MSE ์†์‹ค + ReLU ์ถœ๋ ฅ์ธต ์กฐํ•ฉ์—์„œ Dying ReLU ํ˜„์ƒ์œผ๋กœ ์˜ˆ์ธก๊ฐ’์ด 0์œผ๋กœ ๊ณ ์ฐฉ
์ง‘๊ณ„(total) ์—ญํšจ๊ณผ ๊ฐœ๋ณ„ ๋ฌธํ•ญ๋ณด๋‹ค ์ „์ฒด ์•™์ƒ๋ธ”(total)์ด ์˜คํžˆ๋ ค ์•ฝํ•จ โ€” ํŠน์ • ์ ์ˆ˜ ์˜ˆ์ธก ๋Šฅ๋ ฅ์ด ํ‰๊ท ํ™” ๊ณผ์ •์—์„œ ์†์‹ค

์ฒ˜์Œ๋ถ€ํ„ฐ ํ•™์Šตํ•œ ๋ชจ๋ธ(Zerobase)๋งŒ์œผ๋กœ๋Š” ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ ๋‹ฌ์„ฑ์— ํ•œ๊ณ„๊ฐ€ ์žˆ์–ด, ์ถ”ํ›„ ์˜คํ”ˆ์†Œ์Šค STT ๋ชจ๋ธ์„ ํ™œ์šฉํ•˜์—ฌ ์ž๋ชจ ๋‹จ์œ„ ์Œ์„ฑ ์ธ์‹ ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์ด๋ฅผ ์ ์šฉํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

About

A deep learning project for automated speech and language assessment in post-stroke aphasia and dysarthria.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages