sciedu-router-axenc

OpenArm SciEdu ๋Œ€ํ™” ๋ผ์šฐํ„ฐ(์ด์Šˆ #83)์˜ ํŠธ๋ž™ ๋‚˜: ํ•™์ƒยท์„ ์ƒ๋‹˜์˜ ํ•œ๊ตญ์–ด ๋ง ํ•˜๋‚˜๋ฅผ ์—ดํ•œ ๊ฐˆ๋ž˜๋กœ ๊ฐ€๋ฅด๋Š” ๋ถ„๋ฅ˜๊ธฐ๋‹ค. skt/A.X-Encoder-base(ModernBERT, 149M, Apache-2.0)์— ๋ถ„๋ฅ˜ ๋จธ๋ฆฌ๋ฅผ ๋‹ฌ์•„ ๋ฏธ์„ธ์กฐ์ •ํ–ˆ๋‹ค. CPU์—์„œ ๋ฌธ์žฅ ํ•˜๋‚˜๋ฅผ ์ˆ˜์‹ญ ms์— ์ฝ๋Š”๋‹ค(์•„๋ž˜ ์ง€์—ฐ ํ‘œ). ๋กœ๋ด‡์„ ์›€์ง์ด๋Š” ๊ฒฐ์ •์„ ํ˜ผ์ž ๋‚ด๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.

๋ผ์šฐํ„ฐ๋Š” ๋Œ€ํ™”์ธต์— ๊ธฐ๋ณธ๊ฐ’ ๊บผ ๋‘ ์œผ๋กœ ๋ถ™๋Š”๋‹ค. ๊บผ์ ธ ์žˆ์œผ๋ฉด ๋Œ€ํ™”์ธต์€ ์ง€๊ธˆ์ฒ˜๋Ÿผ ๋‚ฑ๋ง ๊ธธ๊ณผ ๋Œ€ํ™” ๋ชจ๋ธยท๊ฒฐ์ • ๋ชจ๋ธ๋งŒ ์“ด๋‹ค. ์ผœ๋ฉด ๋ฉˆ์ถค ๋น ๋ฅธ ๊ธธ์€ ๋‚ฑ๋ง ๋ชฉ๋ก๊ณผ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ๊ฑธ๋ ค๋„ ์„œ๊ณ , ์›€์ง์ž„์€ ๋Œ€ํ™” ๋ชจ๋ธ์˜ ๊ณ„ํš๊ณผ ์ด ๋ถ„๋ฅ˜๊ธฐ๊ฐ€ ๋‘˜ ๋‹ค ์›€์ง์ž„ ๊ฐˆ๋ž˜์ผ ๋•Œ๋งŒ ์›€์ง์ธ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ํ†ต๊ณผ ๊ธฐ์ค€์„ ์•„์ง ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ ์ผœ๊ธฐ ์ „์— ์ˆ˜์—… ๊ธฐ๋ก์œผ๋กœ ๋” ์žฌ์•ผ ํ•œ๋‹ค.

๊ฐˆ๋ž˜

pause(๋ฉˆ์ถฐ), stop(๊ทธ๋งŒ), proceed(๋‹ค์Œ), retry(๋‹ค์‹œ), start_switch(์‹คํ—˜ ์‹œ์ž‘ยท๋ฐ”๊พธ๊ธฐ), leaf_side(๋‚˜๋ญ‡์žŽ ์ชฝ), hands(์† ๋„ฃ๊ธฐ), question(์งˆ๋ฌธ), answer(๋Œ€๋‹ต), chitchat(์ผ๋ฐ˜ ๋Œ€ํ™”), unclear(์•Œ ์ˆ˜ ์—†์Œ). ์›€์ง์ž„ ๊ฐˆ๋ž˜๋Š” proceedยทretryยทstart_switchยทleaf_side, ๋ฉˆ์ถค ๊ฐˆ๋ž˜๋Š” pauseยทstop์ด๊ณ  unclear๋Š” ๋˜๋ฌป๊ธฐ๋‹ค. ์ •์˜์™€ ๊ฒฝ๊ณ„ ์ง์€ ์ €์žฅ์†Œ plan/dialogue-routing.md์— ์žˆ๋‹ค.

์ž…๋ ฅ

๋งฅ๋ฝ ์นธ ๋‹ค์„ฏ์„ ๋ง ์•ž์— ๊ธ€๋กœ ๋ถ™์ธ ํ•œ ์ค„์ด๋‹ค(dialogue/routing/schema.py์˜ render_input, ์นธ ์ˆœ์„œยท์ด๋ฆ„ ๊ณ ์ •). ์˜ˆ: ์žฅ๋ฉด=๋กœ๋ด‡ ์›€์ง์ด๋Š” ์ค‘ | ์‹คํ—˜=๊ฒ€์ „๊ธฐ | ๋‚˜๋ญ‡์žŽ ํ™œ๋™=์—†์Œ | AI ์ œ์•ˆ=์•„๋‹ˆ์˜ค | ๋งํ•œ ์‚ฌ๋žŒ=ํ•™์ƒ || ๋ฉˆ์ถฐ! ์นธ: ์žฅ๋ฉด(์‹คํ—˜ ์—†์Œยท์‹œ์ž‘ ์ „ยท๋กœ๋ด‡ ์›€์ง์ด๋Š” ์ค‘ยท๋‹ค์Œ ์ง€์‹œ ๊ธฐ๋‹ค๋ฆผยท์ ‘์ง€ ๊ธฐ๋‹ค๋ฆผยท์ผ์‹œ์ •์ง€ ์ค‘), ์‹คํ—˜(์‚ฐํ™”ํ™˜์›ยท๊ฒ€์ „๊ธฐยท๋‚˜๋ญ‡์žŽยท์—†์Œ), ๋‚˜๋ญ‡์žŽ ํ™œ๋™(ํ•™์ƒ์ด ๋ถ„๋ฅ˜ยท๊ธฐ์ค€ ๋งžํžˆ๊ธฐยท์—†์Œ), AI ์ œ์•ˆ(์žˆ์Œยท์•„๋‹ˆ์˜ค), ๋งํ•œ ์‚ฌ๋žŒ(ํ•™์ƒยท์„ ์ƒ๋‹˜). ํ† ํฐ์€ <s> โ€ฆ <\s>, ์ตœ๋Œ€ 128. ์ž…๋ ฅ ์นธ์€ router.json์˜ fields๋‹ค.

ํ™•์‹ ๋„ ๊ทœ์น™

router.json์˜ policies์— ์ด๋ฆ„ ๋ถ™์€ ๊ทœ์น™์ด ์žˆ๊ณ  policy๊ฐ€ ๊ธฐ๋ณธ(balanced)์ด๋‹ค. ์˜จ๋„ T๋กœ ๋กœ์ง“์„ ๋‚˜๋ˆˆ ์†Œํ”„ํŠธ๋งฅ์Šค์—์„œ: halt_min โ€” pause+stop ํ™•๋ฅ ์˜ ํ•ฉ์ด ์ด ๊ฐ’ ์ด์ƒ์ด๋ฉด ๋ฉˆ์ถ˜๋‹ค(ํฐ ์ชฝ์˜ ๊ฐˆ๋ž˜), move_min โ€” ์›€์ง์ž„ ๊ฐˆ๋ž˜๊ฐ€ ์ด ํ™•๋ฅ ๋ณด๋‹ค ๋‚ฎ์œผ๋ฉด unclear, other_min โ€” ์งˆ๋ฌธยท๋Œ€๋‹ตยท์ผ๋ฐ˜ ๋Œ€ํ™”ยท์† ๋„ฃ๊ธฐ๊ฐ€ ์ด ํ™•๋ฅ ๋ณด๋‹ค ๋‚ฎ์œผ๋ฉด unclear. ์˜จ๋„์™€ ๋ฌธํ„ฑ์€ ๊ฒ€์ฆ ์„ธํŠธ(428์ค„)๋กœ๋งŒ ์ •ํ–ˆ๋‹ค. ๋ชจ๋ธยท์”จ์•—(13ยท21ยท42 ๊ฐ€์šด๋ฐ)๋„ ๊ฒ€์ฆ์œผ๋กœ๋งŒ ๊ณจ๋ž๊ณ (๋งˆ์ง€๋ง‰ ํŒ์ •์„ ๋ณด๊ธฐ ์ „์— ์ •ํ–ˆ๋‹ค), ๋งˆ์ง€๋ง‰ ํŒ์ •์„ ๋ณด๊ณ  ๋‹ค์‹œ ๊ณ ๋ฅด๊ฑฐ๋‚˜ ํ•™์Šต์„ ๊ณ ์น˜์ง€ ์•Š์•˜๋‹ค.

๊ฒฐ๊ณผ

ํŒ์ •์€ ๋‘ ์กฐ๊ฐ์ด๋‹ค(์ฝ”๋””๋„ค์ดํ„ฐ ๊ฒฐ์ •): (๊ฐ€) ๋งˆ์ง€๋ง‰ ํŒ์ •์—์„œ ์†๋Œ€์ง€ ์•Š์€ ์ค„ 482๊ฐœ โ€” ์‹œ๋‚˜๋ฆฌ์˜ค ์˜ฎ๊น€๊ณผ ๋…๋ฆฝ ์‹œํ—˜(์ •์˜๋งŒ ๋ณด๊ณ  ๋‹ค๋ฅธ ์—์ด์ „ํŠธ๊ฐ€ ์“ด 123์ค„), ํ•™์Šต ๋ณด๊ฐ•์„ ๋งŒ๋“ค ๋•Œ ๋ณธ tuned ์ค„์€ ๋บ๋‹ค โ€” (๋‚˜) ์†๋Œ€์ง€ ์•Š์€ ๋ง๋ถ™์ž„ 508์ค„(์›€์ง์ž„ ๋‚ฑ๋ง์ด ๋“  ์ผ๋ฐ˜ ๋Œ€ํ™”์˜ ์˜คํƒ์„ ๋ณธ๋‹ค). ์œ„ํ—˜ํ•œ ํ‹€๋ฆผ: ์›€์ง์ž„์ด ์•„๋‹Œ ๋ง์„ ์›€์ง์ž„์œผ๋กœ ๊ณ ๋ฆ„(false_move) ยท ์ •๋‹ต์ด ๋ฉˆ์ถค์ธ๋ฐ ๋ฉˆ์ถค ๊ฐˆ๋ž˜๋กœ ๋‹ตํ•˜์ง€ ์•Š์Œ(missed_pause) ยท ์ •๋‹ต์ด ๊ทธ๋งŒ์ธ๋ฐ ๋ฉˆ์ถค ๊ฐˆ๋ž˜๋กœ ๋‹ตํ•˜์ง€ ์•Š์Œ(missed_stop). ๋ฉˆ์ถคโ†”๊ทธ๋งŒ์„ ๋ฐ”๊ฟ” ๋‹ตํ•œ ๊ฒƒ์€ ์œ„ํ—˜์ด ์•„๋‹ˆ๋‹ค(๋‘˜ ๋‹ค ์„ ๋‹ค).

ํ†ต๊ณผ ๊ธฐ์ค€(์ž ์ •: (๊ฐ€)ยท(๋‚˜) ์œ„ํ—˜ 0, (๊ฐ€) ๋งž์Œ 90% ์ด์ƒ)์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ๋‹ค: ๊ธฐ๋ณธ ๊ทœ์น™์˜ ์œ„ํ—˜์€ (๊ฐ€) 2๊ฐœยท(๋‚˜) 1๊ฐœ, (๊ฐ€) ๋งž์Œ 88.2%.

(๊ฐ€) ๋งˆ์ง€๋ง‰ ํŒ์ •, ์†๋Œ€์ง€ ์•Š์€ 482์ค„

๊ทœ์น™ ๊ฐ’ ๋งž์Œ ์œ„ํ—˜ํ•œ ํ‹€๋ฆผ ์ง„์งœ ์›€์ง์ž„ ๋ง์„ ๋ง‰์Œ
balanced T=1.89, haltโ‰ฅ0.6, moveโ‰ฅ0.95, otherโ‰ฅ0.0 88.2% 2 (๋†“์นœ ๋ฉˆ์ถค 2 ยท ๋†“์นœ ๊ทธ๋งŒ 0 ยท ์›€์ง์ž„ ์•„๋‹Œ ๋ง์„ ์›€์ง์ž„์œผ๋กœ 0) 47.7%
strict T=1.89, haltโ‰ฅ0.6, moveโ‰ฅ0.95, otherโ‰ฅ0.0 88.2% 2 (๋†“์นœ ๋ฉˆ์ถค 2 ยท ๋†“์นœ ๊ทธ๋งŒ 0 ยท ์›€์ง์ž„ ์•„๋‹Œ ๋ง์„ ์›€์ง์ž„์œผ๋กœ 0) 47.7%
argmax T=1.89, haltโ‰ฅ1.0, moveโ‰ฅ0.0, otherโ‰ฅ0.0 93.2% 6 (๋†“์นœ ๋ฉˆ์ถค 2 ยท ๋†“์นœ ๊ทธ๋งŒ 0 ยท ์›€์ง์ž„ ์•„๋‹Œ ๋ง์„ ์›€์ง์ž„์œผ๋กœ 5) 20.3%

๊ฐˆ๋ž˜๋ณ„(๊ธฐ๋ณธ ๊ทœ์น™ balanced, ์ •๋‹ต ์ค„ ๊ธฐ์ค€ ์žฌํ˜„์œจยท๋‹ต ๊ธฐ์ค€ ์ •๋ฐ€๋„):

๊ฐˆ๋ž˜ ์ •๋‹ต ์ค„ ์žฌํ˜„์œจ ์ •๋ฐ€๋„
pause(๋ฉˆ์ถฐ) 47 95.7% 100.0%
stop(๊ทธ๋งŒ) 28 100.0% 93.3%
proceed(๋‹ค์Œ) 68 35.3% 100.0%
retry(๋‹ค์‹œ) 17 94.1% 100.0%
start_switch(์‹คํ—˜ ์‹œ์ž‘ยท๋ฐ”๊พธ๊ธฐ) 16 81.2% 100.0%
leaf_side(๋‚˜๋ญ‡์žŽ ์ชฝ) 27 51.8% 100.0%
hands(์† ๋„ฃ๊ธฐ) 80 100.0% 95.2%
question(์งˆ๋ฌธ) 44 93.2% 83.7%
answer(๋Œ€๋‹ต) 48 79.2% 97.4%
chitchat(์ผ๋ฐ˜ ๋Œ€ํ™”) 10 100.0% 62.5%
unclear(์•Œ ์ˆ˜ ์—†์Œ) 97 97.9% 62.5%

(๋‚˜) ์†๋Œ€์ง€ ์•Š์€ ๋ง๋ถ™์ž„ 508์ค„

๊ทœ์น™ ๊ฐ’ ๋งž์Œ ์œ„ํ—˜ํ•œ ํ‹€๋ฆผ ์ง„์งœ ์›€์ง์ž„ ๋ง์„ ๋ง‰์Œ
balanced T=1.89, haltโ‰ฅ0.6, moveโ‰ฅ0.95, otherโ‰ฅ0.0 90.3% 1 (๋†“์นœ ๋ฉˆ์ถค 0 ยท ๋†“์นœ ๊ทธ๋งŒ 0 ยท ์›€์ง์ž„ ์•„๋‹Œ ๋ง์„ ์›€์ง์ž„์œผ๋กœ 1) 26.9%
strict T=1.89, haltโ‰ฅ0.6, moveโ‰ฅ0.95, otherโ‰ฅ0.0 90.3% 1 (๋†“์นœ ๋ฉˆ์ถค 0 ยท ๋†“์นœ ๊ทธ๋งŒ 0 ยท ์›€์ง์ž„ ์•„๋‹Œ ๋ง์„ ์›€์ง์ž„์œผ๋กœ 1) 26.9%
argmax T=1.89, haltโ‰ฅ1.0, moveโ‰ฅ0.0, otherโ‰ฅ0.0 94.5% 6 (๋†“์นœ ๋ฉˆ์ถค 0 ยท ๋†“์นœ ๊ทธ๋งŒ 0 ยท ์›€์ง์ž„ ์•„๋‹Œ ๋ง์„ ์›€์ง์ž„์œผ๋กœ 6) 5.9%

์ฐธ๊ณ (ํ†ต๊ณผ ํŒ์ •์— ์“ฐ์ง€ ์•Š๋Š”๋‹ค): ๋…๋ฆฝ ์‹œํ—˜ 123์ค„ ๋‹จ๋… ๊ธฐ๋ณธ ๊ทœ์น™ ๋งž์Œ 91.1%, ์œ„ํ—˜ 1. ์‹œํ—˜ ์„ธํŠธ 976์ค„(ํ•™์Šต ๋ณด๊ฐ•์„ ๋งŒ๋“ค ๋•Œ ๋ณธ tuned 109์ค„ ํฌํ•จ) ๊ธฐ๋ณธ ๊ทœ์น™: tuned ์ค„ ๋งž์Œ 98.2%(์œ„ํ—˜ 1), ์†๋Œ€์ง€ ์•Š์€ ์ค„ 867๊ฐœ ๋งž์Œ 89.0%(์œ„ํ—˜ 2). tuned ์ค„์€ ํ•™์Šต๊ณผ ๋–จ์–ด์ ธ ์žˆ์ง€ ์•Š์•„ ๋‚™๊ด€์ ์ด๋‹ค.

CPU ์ง€์—ฐ

๋ฌธ์žฅ ํ•˜๋‚˜์”ฉ(๋ฐฐ์น˜ 1), ๋งฅ๋ฝ ๊ธ€ ๋งŒ๋“ค๊ธฐ + ํ† ํฐ + ๋ชจ๋ธ + ๊ทœ์น™ ์ „์ฒด, Ryzen 5 7500F, ๋‹ค๋ฅธ ์ผ์ด ํ•จ๊ป˜ ๋„๋Š” PC(๋ถ€ํ•˜ ํ‰๊ท  7~9)๋ผ ์ƒํ•œ์— ๊ฐ€๊น๋‹ค:

๊ธธ ์Šค๋ ˆ๋“œ ์ค‘์•™(ms) p90 p99 ์ตœ๋Œ€ ์–ด๋””์„œ
torch fp32 4 44.68 48.71 52.6 53.89 ์ฑ„์  ํ‹€(์†๋Œ€์ง€ ์•Š์€ final 482์ค„)
onnxruntime fp32 4 24.39 26.89 29.79 33.59 ์ฑ„์  ํ‹€(์†๋Œ€์ง€ ์•Š์€ final 482์ค„)
torch fp32 1 100.65 109.48 116.12 124.05 bench(์‹œํ—˜ ์•ž 300์ค„)
torch fp32 4 45.65 53.27 59.99 63.92 bench(์‹œํ—˜ ์•ž 300์ค„)
torch fp32 6 48.14 53.1 58.68 66.16 bench(์‹œํ—˜ ์•ž 300์ค„)
onnxruntime fp32 1 75.66 85.59 92.5 98.38 bench(์‹œํ—˜ ์•ž 300์ค„)
onnxruntime fp32 4 27.24 31.2 35.46 62.68 bench(์‹œํ—˜ ์•ž 300์ค„)
onnxruntime fp32 6 28.59 34.47 38.15 38.78 bench(์‹œํ—˜ ์•ž 300์ค„)

ํ•™์Šต

  • ๊ธฐ๋ฐ˜ ๋ชจ๋ธ: skt/A.X-Encoder-base ์ปค๋ฐ‹ 9708f9c404ace91efd25c06fac2d73413616f4ef (๋ผ์ด์„ ์Šค Apache-2.0)
  • ์ž๋ฃŒ: ์ €์žฅ์†Œ LEAP-LAB-KUS/openarmsciedu-robot ๊ฐˆ๋ž˜ routing@414a698์˜ dialogue/routing/data/(ํ•™์Šต ๋•Œ ์ž‘์—… ํŠธ๋ฆฌ ์ปค๋ฐ‹ c75ddeeb1a74e0df44a28bc5b67e5bfb8a44cf24, ๋ธŒ๋žœ์น˜ routing-encoder)
    • train.jsonl sha256 933768cc1e770a22โ€ฆ
    • val.jsonl sha256 422a5fe179cc5b6eโ€ฆ
    • test.jsonl sha256 067b59afce0baee1โ€ฆ
    • test_indep.jsonl sha256 1578eaa84ea37da8โ€ฆ
  • ์ธ์ž: ํ•™์Šต๋ฅ  3e-05, ๋ฐฐ์น˜ 32, ์—ํฌํฌ 8.0(๊ฒ€์ฆ ์ตœ๊ณ  ์—ํฌํฌ 8.0), ์•ˆ์ „ ๊ฐˆ๋ž˜(pauseยทstop) ์†์‹ค ๊ฐ€์ค‘ 2.0, weight decay 0.01, ์›Œ๋ฐ์—… 0.1, ์”จ์•— 13, bf16 ํ˜ผํ•ฉ ์ •๋ฐ€๋„, ์„ ํ˜• ๊ฐ์‡ 
  • ์˜จ๋„ 1.8919, ๋ณด์ • ์ „ยทํ›„ ECE 0.0426 โ†’ 0.02

์“ฐ๋Š” ๋ฒ•

from dialogue.routing.axenc.model import AxRouter   # ์ €์žฅ์†Œ ์ฝ”๋“œ
router = AxRouter("leapshared/sciedu-router-axenc", revision="<์ด ์ €์žฅ์†Œ์˜ ์ปค๋ฐ‹>", threads=4)   # backend="onnx"๋ฉด onnx/model.onnx(torch ์—†์ด onnxruntime๋งŒ)
route = router("๋ฉˆ์ถฐ!", {"scene": "moving", "experiment": "electroscope", "leaf_activity": None, "ai_proposed": False, "speaker": "student"})
route.label, route.scores

ํ•œ๊ณ„

  • ํ•™์Šตยท์‹œํ—˜ ๋ง์€ ๋Œ€๋ถ€๋ถ„ ์†๊ณผ LLM์œผ๋กœ ์“ด ๊ฒƒ์ด๋‹ค. ์‹ค์ œ ์ˆ˜์—… ์Œ์„ฑ ๋ฐ›์•„์“ฐ๊ธฐ๋Š” ์ดฌ์˜ ๊ธฐ๋ก 45์ค„๋ฟ์ด๋‹ค.
  • ์‹œํ—˜์˜ ๋ง๋ถ™์ž„ ์ค„์€ ํ•™์Šต ์‹œ๋“œ์™€ ๊ฐ™์€ ์‚ฌ๋žŒ์ด ์ผ๋‹ค. ๋…๋ฆฝ ์‹œํ—˜์€ 123์ค„๋ฟ์ด๋ผ ๊ฐˆ๋ž˜๋ณ„ ์ˆซ์ž๋Š” ํ”๋“ค๋ฆฐ๋‹ค.
  • ํ™•์‹  ์žˆ๊ฒŒ ํ‹€๋ฆฌ๋Š” ๋ง์ด ๋‚จ๋Š”๋‹ค. ์œ„ํ—˜ 0๊ณผ ๋งž์Œ 90%๋ฅผ ๋ฌธํ„ฑ ํ•˜๋‚˜๋กœ ํ•จ๊ป˜ ์–ป์ง€ ๋ชปํ•œ๋‹ค: strict์ฒ˜๋Ÿผ ์œ„ํ—˜์„ ์ค„์ด๋ฉด ์ง„์งœ ์›€์ง์ž„ ๋ง์„ ๋˜๋ฌป๋Š” ๋ชซ์ด ํฌ๊ฒŒ ๋Š”๋‹ค.
  • ๋Œ€๋ณธ(์‹คํ—˜ ์ˆœ์„œ)์„ ๋ชจ๋ฅธ๋‹ค. ์ˆœ์„œ ๋ฐ– ์ง€์‹œ๋Š” ๊ณ„ํš๊ธฐยท์„œ๋น™์ด ๋ง‰๋Š”๋‹ค.
Downloads last month
19
Safetensors
Model size
0.1B params
Tensor type
F32
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for leapshared/sciedu-router-axenc

Quantized
(3)
this model