MF_BERT โ 119 ๊ตฌ๊ธ๋-๋ณ์ ํตํ ์ ๋ณด ์ถ์ถ ๋ชจ๋ธ
119 ๊ตฌ๊ธ๋์ ๋ณ์ ์๊ธ์ค ์ฌ์ด์ ํตํ ํ ์คํธ๋ฅผ ๋ฃ์ผ๋ฉด, ์ด์ก ๋ฌธ์์ ํ์ํ ์ ๋ณด๋ฅผ ์ ํด์ง JSON(v2 ์คํค๋ง)์ผ๋ก ๋ฝ๋ ๋ค์ค๊ณผ์ ๋ชจ๋ธ์ ๋๋ค. KTAS ๋ฑ๊ธ, ์ฃผ์ฆ์(Pre-KTAS ๋๋ถ๋ฅยท์๋ถ๋ฅ), ์ฆ์(ํ์ธ/๋ถ์ ), ์์(๋ถ์ยท์ ํยท์ข์ฐ), ์ฒ์น, ์ฌ๊ณ ์ ํ, ์ง๋ณ๋ถ๋ฅ, ์์(AVPU), ์ฑ๋ณ, ๋ณต์ฉ์ฝ, ๊ทธ๋ฆฌ๊ณ ํ๋ ฅ์งํยท๋์ดยท๋ฐ์ ์์ ยท์์ฌ ์ง๋จยท๋ณต์ฉ์ฝ ๊ตฌ๊ฐ์ ํ ๋ฒ์ ๋ ๋๋ค.
- ์ธ์ฝ๋:
klue/roberta-large(์ ์ฒด ๋ฏธ์ธ์กฐ์ ). 512ํ ํฐ๋ณด๋ค ๊ธด ํตํ๋ 128ํ ํฐ์ฉ ๊ฒน์น๊ฒ ๋๋ ์ธ์ฝ๋ฉํฉ๋๋ค. - ์ถ๋ ฅ์ธต: ๋จ์ผ ์ ํ ํค๋ 8๊ฐ, ๋ค์ค ์ ํ ํค๋ 7๊ฐ(๋ณด๊ธฐ๋ง๋ค ์๊ธฐ ๊ทผ๊ฑฐ ํ ํฐ์ ์ฐพ๋ ๋ณด๊ธฐ๋ณ ์ดํ ์ ), ํ ํฐ ๊ตฌ๊ฐ ํ๊ฑฐ
- ์๋: RTX 5080์์ ํตํ 1๊ฑด ์ฝ 0.013์ด
ํ๋จ ๋ณด์กฐ์ฉ์ ๋๋ค. ํฉ์ฑ ๋ฐ์ดํฐ์ AI ๋ผ๋ฒจ๋ก ํ์ตยทํ๊ฐํ๊ณ , KTAS ์ ํ๋๊ฐ 70%๋์ ๋๋ค. ์ค์ ์ด์ก ๊ฒฐ์ ์ ์๋์ผ๋ก ์ฐ์ง ๋ง์ธ์.
๋ฒ์
| revision | ๋ ์ง | ๋ด์ฉ |
|---|---|---|
main |
2026-10-02 | ์ด ๋ชจ๋ธ. ๋ณด๊ธฐ๋ณ ์ดํ ์ , ๋ค์ค ์ ํ ์์ฑ ๊ฐ์ค์น, 2์ธต ํค๋, KTAS ๊ธฐ๋ ๋น์ฉ ์์ค, ์ธต๋ณ ํ์ต๋ฅ ๊ฐ์. ๋ถ์ ์ฆ์ ๋ผ๋ฒจ์ ๋ณด๊ฐํ ๋ฐ์ดํฐ |
v1-2026-09-30 |
2026-09-30 | ์ฒซ ๊ณต๊ฐ ๋ชจ๋ธ |
์ฌ์ฉ๋ฒ
๋ชจ๋ธ ์ฝ๋(mf_bert ํจํค์ง: ๋ชจ๋ธ ๊ตฌ์กฐยท์กฐ๊ฐ ๋๋๊ธฐยท๋์ฝ๋ฉ)๋ ์ด ์ ์ฅ์์ ๋ค์ด ์์ง ์์ต๋๋ค. ์ ํ๋ก์ ํธ์ BERT/mf_bert ํด๋๋ฅผ import ๊ฒฝ๋ก์ ๋๊ณ ์คํํฉ๋๋ค.
from pathlib import Path
import torch
from huggingface_hub import snapshot_download
from transformers import AutoTokenizer
from mf_bert.model import CallExtractor
from mf_bert.infer import predict
d = Path(snapshot_download("podongchip/MF_BERT")) # best.pt, tokenizer/
tokenizer = AutoTokenizer.from_pretrained(d / "tokenizer")
ckpt = torch.load(d / "best.pt", map_location="cpu", weights_only=False)
a = ckpt["args"]
model = CallExtractor(a["encoder"], dropout=a["dropout"], last_n_layers=a["last_n_layers"],
layer_dropout=a["layer_dropout"], label_attention=a.get("label_attention", False),
head_layers=a.get("head_layers", 1), head_hidden_size=a.get("head_hidden_size"),
pretrained=False)
model.load_state_dict(ckpt["model"])
print(predict(model.eval(), tokenizer, ["119 ๊ตฌ๊ธ๋์
๋๋ค\n58์ธ ๋จ์๋ถ ๊ฐ์ด ํต์ฆ์ผ๋ก ์ด์ก ๋ฌธ์๋๋ฆฝ๋๋ค"])[0])
- ์ด ์ฝ๋๋
main๊ณผv1-2026-09-30์ฒดํฌํฌ์ธํธ๋ฅผ ๋ชจ๋ ๋ถ๋ฌ์ต๋๋ค. ์ด์ ๋ชจ๋ธ์snapshot_download("podongchip/MF_BERT", revision="v1-2026-09-30")๋ก ๋ฐ์ต๋๋ค. - ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ๋
klue/roberta-large์ ์ค์ ํ์ผ์ ํจ๊ป ๋ฐ์ต๋๋ค. ๋ฐ๋ ํ์ผ์ ์ฝ 1.5GB์ ๋๋ค.
์ถ๋ ฅ ํ์
ํตํ๋ง๋ค dict ํ๋: call_type, ktas_level, ktas_evidence, chief_complaint, suspected_diagnosis, vitals, consciousness, symptoms, onset, incidents, disease_category, injuries, treatments, age, sex, medications, notes, meta. ๋ชจ๋ธ์ด ๋ฐฐ์ฐ์ง ์๋ call_type, ktas_evidence, notes๋ ํญ์ null์
๋๋ค.
ํ์ต ๋ฐ์ดํฐ
- AI Hub ใ์๊ธ์ํฉ ์์ฑ/์ํฅ (๊ณ ๋ํ) - 119 ์ง๋ฅํ ์ ๊ณ ์ ์ ์์ฑ ์ธ์ ๋ฐ์ดํฐใ๋ฅผ ๋ฐํ์ผ๋ก ๋ง๋ ํฉ์ฑ ํตํ 8,082๊ฑด์ ๋๋ค. ํตํ ํ ์คํธ์ ๋ผ๋ฒจ์ ๋ชจ๋ Claude ๊ณ์ด ๋ชจ๋ธ๋ก ๋ง๋ค์๊ณ ์ฌ๋ ๊ฒ์๋ ๊ฑฐ์น์ง ์์์ต๋๋ค. ์ค์ ํตํ ์๋ฌธ์ด๋ STT ๊ฒฐ๊ณผ๋ ๋ค์ด ์์ง ์์ต๋๋ค.
- ๊ณต๊ฐ ๋ฐ์ดํฐ์ podongchip/119-call-transcript-synthetic-labels๋ ์ ์ ์ 8,990๊ฑด ๋ฒ์ ์ด๊ณ , ์ด ๋ชจ๋ธ์ ๊ทธ ๋ค ์ ์ ยท์ฌ๋ผ๋ฒจ๋ง(์ฆ์ยท์ฒ์นยท์์ Claude Sonnet ์ฌ๋ผ๋ฒจ, ๊ดํ ๊ท์น ๋ณด์ , ๋น ์ง ๋ถ์ ์ฆ์ 1,913๊ฐ ๋ณด๊ฐ)์ ๊ฑฐ์น ๋ฐ์ดํฐ๋ก ํ์ตํ์ต๋๋ค.
- ๋ถํ : ๋ชจ๋ ํค๋์ ๋ผ๋ฒจ ๊ตฌ์ฑ์ด ํ์ต๊ณผ ๊ฒ์ฆ์์ ๋น์ทํ๋๋ก ๊ณ ๋ฅธ 9:1 ๋ถํ (ํ์ต 7,188 / ๊ฒ์ฆ 894), 10์ํญ, ๊ฒ์ฆ ์ ์๊ฐ ๊ฐ์ฅ ๋์ 9์ํญ ์ฒดํฌํฌ์ธํธ
ํ๊ฐ
ํ์ต ๋ฐ์ดํฐ์ ๊ฒน์น์ง ์๊ฒ ์๋ก ๋ง๋ ํฉ์ฑ ๋ฒค์น๋งํฌ 100๊ฑด(KTAS 1~5 ๊ฐ 20๊ฑด, ์ ๋ต์ Claude Opus ๋ผ๋ฒจ๋ฌ 3๋ช ์ ๋ ๋ฆฝ ๋ผ๋ฒจ์ ํ์ ํด ๋ง๋ฆ)์ผ๋ก ํ๊ฐํ์ต๋๋ค. ๋จ์ผ ์ ํ์ ์ ํ๋, ๋ค์ค ์ ํ์ micro F1, ๊ตฌ๊ฐ์ ๊ธ์ ์์น๊ฐ ์ ํํ ๊ฐ์์ผ ๋ง๋ F1์ ๋๋ค.
| ์งํ | v1-2026-09-30 |
main (์ด ๋ชจ๋ธ) |
|---|---|---|
| KTAS ์ ํ๋ | 72% | 71% |
| KTAS ยฑ1 ์ผ์น | - | 100% |
| KTAS ๊ณผ์ ๋ถ๋ฅ(์ ๋ต๋ณด๋ค ๊ฐ๋ณ๊ฒ) | 9% | 18% |
| ์ฃผ์ฆ์ ๋๋ถ๋ฅ / ์๋ถ๋ฅ | 92% / 88% | 95% / 91% |
| ์ฃผ ์ฌ๊ณ ์ ํ / ์ง๋ณ๋ถ๋ฅ | 95% / 80% | 95% / 87% |
| AVPU / ๋ณต์ฉ์ฝ ์ํ | 94% / 96% | 93% / 96% |
| ์ฌ๊ณ ์ ํ F1 | 92.8 | 93.0 |
| ์ฒ์น / ์ฒ์น ์ธ๋ถ F1 | 72.3 / 71.3 | 84.4 / 75.1 |
| ์ฆ์ F1 | 50.7 | 68.4 |
| ์์ / ์์ ์ข์ฐ F1 | 30.2 / 21.7 | 68.1 / 52.6 |
| ๊ตฌ๊ฐ F1 | 61.3 | 60.1 |
- ๋ค์ค ์ ํ(์ฆ์ยท์์ยท์ฒ์น)์ด ํฌ๊ฒ ์ข์์ก์ต๋๋ค. ํนํ "๊ตฌํ ๋ ์์ด์" ๊ฐ์ ๋ถ์ ์ฆ์์ ์ฌํ์จ์ด ์ฝ 60%๋ก ์ฌ๋์ต๋๋ค.
- KTAS ๊ณผ์ ๋ถ๋ฅ๋ 18%๋ก ์ด์ ๋ชจ๋ธ๋ณด๋ค ๋์ต๋๋ค. KTAS ์ค์ฐจ๋ ๋ชจ๋ ยฑ1๋ฑ๊ธ ์์ด์ง๋ง, ์ค์ ์ ์กฐ๊ธ์ฉ ๋ฐ๊ฟ ๋ค์ ํ์ตํ ๋๋ง๋ค KTAS ์ ํ๋๊ฐ 70~82%๋ก ํ๋ค๋ ธ์ต๋๋ค.
- ๋ฒค์น๋งํฌ๊ฐ 100๊ฑด์ด๋ผ ์งํ์ ๋ฐ๋ผ ๋ช ํฌ์ธํธ์ ํ๋ค๋ฆผ์ด ์์ต๋๋ค.
ํ๊ณ
- ๋ฐ์ดํฐยท๋ผ๋ฒจยท๋ฒค์น๋งํฌ ์ ๋ต์ด ๋ชจ๋ AI๊ฐ ๋ง๋ ๊ฒ์ ๋๋ค. ์ ์๋ "์ด ๋ผ๋ฒจ ๊ธฐ์ค๊ณผ์ ์ผ์น๋"์ด๊ณ , ์ค์ ํตํ๋ ์ค์ STT ์ถ๋ ฅ์ผ๋ก๋ ๊ฒ์ฆํ์ง ์์์ต๋๋ค.
- ํ์ต ๋ฐ์ดํฐ์ KTAS ๋ผ๋ฒจ์ ๋ฑ๊ธ ๊ฒฝ๊ณ ์ฌ๋ก๋ฅผ ๊ฐ๋ณ๊ฒ ๋งค๊ธฐ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ๊ณผ์ ๋ถ๋ฅ๊ฐ ์ํํ ์ฉ๋๋ผ๋ฉด ์ฌ๋์ด ๋ฐ๋์ ํ์ธํด์ผ ํฉ๋๋ค.
- ํ๊ตญ์ด 119 ๊ตฌ๊ธ๋-๋ณ์(์ผ๋ถ ๋ณ์-๋ณ์) ํตํ ํ์์ ๋ง์ถฐ์ ธ ์์ต๋๋ค.
Model tree for podongchip/MF_BERT
Base model
klue/roberta-large