AIFlow Math Ink 0.6 โ ํ๋ ๋ฌธ๋งฅ ๋ชจ๋ธ ์ ํ ๋ณด๊ณ ์
๊ฒฐ๋ก
0.6์ ๋จ์ ์ ํ๋๋ ๊ณ ๋ฆฝ ๊ธฐํธ ๋ถ๋ฅ๊ธฐ๋ง ๋ ํ์ตํด์ ํด๊ฒฐ๋์ง ์๋๋ค. ๋์ผํ ๊ต์ฐจํ์ด x, X, \times๊ฐ ๋ ์ ์๊ณ , ๋์ผํ ๋๋ฌธ์๋ ๋ถ์ยท๋ถ๋ชจยท์ฒจ์์ฒ๋ผ ์ถ์๋ ์์ ์ฌ๋กฏ์์๋ ์ ์ ์ฒด ๋์ด์ ๋น๊ตํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ ๋ค์ ์ฑ ์ ๋ถ๋ฆฌ๋ฅผ ์ฑํํ๋ค.
- trajectory/raster ์ ๊ฒฝ๋ง์ ํํ ํ๋ณด top-k์ ํ๋ฅ ์ ๋ง๋ ๋ค.
- Trayยท๊ด๊ณ ๋ ์ด์ด๋ ๋ถ์ยท๋ถ๋ชจยท์ฒจ์ยทํผ๊ฐํญ ๋ฑ ๋ก์ปฌ ์ขํ๊ณ๋ฅผ ๋ง๋ ๋ค.
- ํ๋ ๋ฌธ๋งฅ ๋ ์ด์ด๋ ํ ํ๋, ๋ก์ปฌ ํฌ๊ธฐ, ์ด์ ํ๋ณด, ๊ฐ๊ฒฉ, Tray ์ญํ ์ ์ฌ์ฉํด ๊ฐ์ ํํ๊ตฐ ์์ ์๋ฏธ๋ง ์ฌ์ ์ํํ๋ค.
- ์์ gate์ LaTeX ๋ฌธ๋ฒ์ ๊ทธ ๋ค์์ ์๋ํ๋ค.
- ํ๋ ์ฆ๊ฑฐ๊ฐ ๋ถ์กฑํ๋ฉด ์๋ top-k๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋ค.
touch / raster
โ 128ร128 ์ ๊ทํยทtrajectory encoder
โ ๊ธฐํธ top-k
โ segmentation latticeยทTrayยท2D relation
โ ํ๋ ๋ฌธ๋งฅ ๋ชจ๋ธ
โโ ๋ก์ปฌ ์ฌ๋กฏ๋ณ ๋์๋ฌธ์
โโ x / X / \times ์๋ฏธ ์ญํ
โโ O / o / 0 ๋ฑ hard-family ํ๋ณด ๋ณด์กด
โ math/non-math gate
โ Formula ExpertยทLaTeX
ํ๋ ๋ชจ๋ธ์ glyph ์ธ์๊ธฐ๋ฅผ ๋ฎ์ด์ฐ๋ ์ OCR์ด ์๋๋ค. ์ ๊ฒฝ๋ง์ด ๋ณด์กดํ ํ๋ณด๊ตฐ ์์์ ์ฌ์ฉ์๊ฐ ๊ทธ ๊ธฐํธ๋ฅผ ์ด๋ค ์ญํ ๋ก ๋ฐฐ์นํ๋์ง ์ถ์ ํ๋ ์์ ํ๋จ ๋ชจ๋ธ์ด๋ค.
์ง๊ธ๊น์ง ํ์ธ๋ ์ฐ๊ตฌ ๊ฒฐ๊ณผ
Online/shared encoder
- ์น์ธ HWRTยทUJI Pen v1/v2ยทPendigits ๊ธฐ๋ฐ 128-stepยท19-channel ๊ฒฝ๋ก๋ฅผ ๊ตฌ์ถํ๋ค.
- seed 17ยท31ยท47 paired test ํ๊ท ์ exact top-1
83.00%, top-597.78%, family top-191.37%๋ค. - logit ensemble์ exact
83.82%, top-598.04%, casefold90.93%, shape-family93.02%๋ค. - exact ์ค๋ฅ์
43.95%๊ฐ ๋์๋ฌธ์๋ง ๋ค๋ฅธ ์ค๋ฅ์ด๊ณ56.86%๊ฐ ๊ฐ์ shape family ์์ ์ค๋ฅ๋ค. - ์ด๋ ํํ ํ๋ณด๋ ์๋น ๋ถ๋ถ ์ด์ ์์ผ๋ ์ต์ข ์๋ฏธ ๋ฐฐ์ ์ด ๋ณ๋ชฉ์ด๋ผ๋ ๊ทผ๊ฑฐ๋ค.
Rasterโvirtual stroke
- top-4 virtual stroke์ shared encoder ์ฌ์ ๋ ฅ ๊ฒฝ๋ก๋ฅผ ๊ตฌํํ๋ค.
- ํ๋ณด ๋ค์์ฑ์ ๊ฐ์ ๋์ง๋ง ์ต์ข raster ์ ํ๋๋ release gate์ ํฌ๊ฒ ๋ฏธ๋ฌํ๋ค.
- 3-seed ์ฐจ์ด๊ฐ ์์ seed variance๋ณด๋ค vectorizer์ online feature ๋ถํฌ ์ ๋ ฌ์ด ์ฃผ ๋ณ๋ชฉ์ด๋ค.
- ๋ฐ๋ผ์ ํ๋ ๋ฌธ๋งฅ์ raster vectorizer ๋ณ๋ชฉ์ ๊ฐ์ถ๋ ๋์ฒด๋ฌผ์ด ์๋๋ฉฐ, ๋ ๋ฌธ์ ๋ฅผ ๋ณ๋ gate๋ก ์ธก์ ํด์ผ ํ๋ค.
๋์๋ฌธ์ ๋ฌธ๋งฅ
k/p/y์ฒ๋ผ ํ ์์ฒด๊ฐ ๋ค๋ฅธ ์์ exact head๊ฐ ๋ด๋นํ๋ค.c/o/s/u/v/w/x/z์ฒ๋ผ ์ฃผ ์ฐจ์ด๊ฐ ์๋ ๋์ด์ธ ์๋ง context head๊ฐ ๋ด๋นํ๋ค.- ๊ธฐ์กด ํ ์ ์ฒด ๊ธฐ์ค proxy๋ validation
70.31โ72.14%, test62.19โ67.34%๋ก ๊ฐ์ ๋์ง๋ง, ์ฐ์ ์์ P ๋ฐ์ดํฐ์ ์ ํ ๊ทผ๊ฑฐ๋ ์๋๋ค. - ํ ์ ์ฒด ๊ธฐ์ค์ ์ถ์๋ ๋ถ์ยท์ฒจ์ ์์ ๋๋ฌธ์๋ฅผ ์๋ฌธ์๋ก ๋ด๋ฆด ์ ์์ผ๋ฏ๋ก ์ด๋ฒ ๊ตฌํ์์ ๋ก์ปฌ ์ฌ๋กฏ ๊ธฐ์ค์ผ๋ก ๊ต์ฒดํ๋ค.
๊ตฌ์กฐยทTray
- ๋ถ์์ ์ ์์ฑ๋ ๋ถ์ยท๋ถ๋ชจ๊ฐ ์์ ๋๋ง
FRACTIONTray๋ฅผ ๋ง๋ ๋ค. - ๊ทผํธ๋ radicand์ ์ ํ์ degree, ์ ๋ถ์ integrand์ ์ ํ์ upper/lower/differential์ ๋ถ๋ฆฌํ๋ค.
=์ธ์์ ์ข์ฐ ์์ ์์ฑ ์ฌ๋ถ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ณด์กดํ๋ค.- Tray๋ ๊ธฐํธ ์ด๋ฆ์ ๊ฒฐ์ ํ์ง ์๊ณ ๊ธฐํธ๊ฐ ๋์ธ ์ํ์ ์ฌ๋กฏ๊ณผ ๋ก์ปฌ ๊ธฐ์ค์ ๋ง ์ ๊ณตํ๋ค.
x, X, \times ํ๋จ
2 ? 3์ด๋ผ๋ ์ด์ ์ ๋ณด๋ง์ผ๋ก ๊ฐ์ด๋ฐ๋ฅผ ๊ณฑํ๊ธฐ๋ก ํ์ ํ ์ ์๋ค. ์ฌ์ฉ์๊ฐ ๋ณ์ x ๋๋ ๋ฌธ์ X๋ฅผ ์ซ์ ์ฌ์ด์ ์ธ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๋ชจํธ์ฑ์ ๋ฌธ๋ฒ๋ง์ผ๋ก ์์ ํ ์ ๊ฑฐํ ์ ์๋ค.
ํ์ฌ ํ๋ ๋ ์ด์ด๋ ๋ค์ ์์น์ ์ ์ฉํ๋ค.
- ์์ ์ซ์๋ ๋ณด์กฐ feature๋ก๋ง ์ฌ์ฉํ๋ค.
- ๊ต์ฐจํ ์๊ฐ ํ๋ฅ , infix ์ ์ , ์ฐ์ฐ์ํ ๊ฐ๊ฒฉ, ๋ช ์์ operator context ์ค ํ๋ ์ด์์ ๊ตฌ์กฐ ์ฆ๊ฑฐ๊ฐ ์์ผ๋ฉด no-op์ด๋ค.
- ์กฐ๊ฑด์ ํต๊ณผํด๋
x/X/\timesfamily์ ์ด logit ์ง๋์ ๋ณด์กดํ ์ฑ\timesprior๋ง ๋ํ๋ค. - ์ ์ ๊ฒฝ๋ง์
X์ฆ๊ฑฐ๊ฐ ์ถฉ๋ถํ ๊ฐํ๋ฉด ํ๋ prior๊ฐ ๋ค์ง์ง ๋ชปํ๋ค. - ๋ณธ์ง์ ์ผ๋ก ๋ชจํธํ ์ ๋ ฅ์ top-k์ ๋ฎ์ confidence๋ก ๋ฐํํ๋ฉฐ ๊ฑฐ์ง ํ์ ์ ํ์ง ์๋๋ค.
ํฅํ ํ์ต feature๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ ์ ๊ฒฝ๋ง์ family logits์ entropy
- ์๋ค token์ digit/identifier/operator ํ๋ฅ ์ง๋
- ์ข์ฐ ๊ฐ๊ฒฉ, ์ค์ฌ์ ์ ๋ ฌ, ๋ก์ปฌ ๋์ด๋น
- ๊ต์ฐจํ์ ๋ฐฉํฅยทํ์์ยทpen-upยท์๋ยท์๊ฐ ๊ฐ๊ฒฉ
- segmentation lattice์ infix ์ ์
- Tray IDยทslotยท๊ด๊ณ edge
- observed/canonical timestamp์ missing mask
ํ์ต target์ ์ glyph ์ด๋ฆ ํ๋๊ฐ ์๋๋ผ identifier_lower, identifier_upper, multiply_operator, other/abstain ์๋ฏธ ์ญํ ๋ก ๋๋ค.
๋ถ์ยท์ฒจ์ ์์ ๋์๋ฌธ์
๋๋ฌธ์ ์ฌ๋ถ๋ ์ ์ ์ฒด canvas ๋์ด์ ๋น๊ตํ์ง ์๋๋ค.
- main row
- fraction numerator
- fraction denominator
- superscript/subscript
- root degree/radicand
- integral upper/lower/integrand
๊ฐ ์ฌ๋กฏ์ ๋ณ๋์ local_context_id๋ก ๋ฌถ๊ณ , ๊ฐ์ ์ฌ๋กฏ์ ์ ๋ขฐ ๊ฐ๋ฅํ ์ซ์ยทํํ ๋ฌธ์๋ง ๋์ด anchor๋ก ์ฌ์ฉํ๋ค. ์ฌ๋กฏ์ anchor๊ฐ ์์ผ๋ฉด case logits๋ฅผ ๋ณด์กดํ๋ค. ์ด ์์น์ ์์ ๋ถ์ ์์ X๋ฅผ main row๋ณด๋ค ์๋ค๋ ์ด์ ๋ก x๋ก ๊ฐ๋ฑํ๋ ์ค๋ฅ๋ฅผ ๋ง๋๋ค.
๊ตฌํ
behavior_context06.py๋ฅผ ์ถ๊ฐํ๊ณ math_context_layer.py ์๋จ์ ์ฐ๊ฒฐํ๋ค.
๊ณต๊ฐ ์ ๋ ฅ ๊ณ์ฝ์ record๋ณ ๋ค์ ์ ํ feature๋ฅผ ์ฌ์ฉํ๋ค.
{
"behavior_context": {
"local_context_id": "fraction:f1:numerator",
"cross_visual_probability": 0.91,
"infix_occupancy": 0.94,
"operator_spacing_score": 0.82,
"explicit_operator_context": 0.0
}
}
Tray๊ฐ ์์ผ๋ฉด tray_id + tray_slot, ์ผ๋ฐ ํ์ด๋ฉด baseline_group, ์๋ฌด ์ ๋ณด๋ ์์ผ๋ฉด main์ ์ฌ์ฉํ๋ค. FRACTION.numerator/denominator์ ๊ตฌ์กฐ ๊ด๊ณ์ SUPERSCRIPT/SUBSCRIPT/ABOVE/BELOW/CONTAINS๋ ๋ณ๋ ์์์
์์ด ๋ก์ปฌ context๋ก ์๋ ๋ณํํ๋ค.
ํ๊ท ๊ฒ์ฆ์ ๋ค์ ๋ค ํญ๋ชฉ์ ๊ณ ์ ํ๋ค.
- ์ถ์๋ ๋ถ์ ์์
X๋ณด์กด - ์ซ์ ์ด์๋ง์ผ๋ก
\times๊ฐ์ ๊ธ์ง - ํยทinfixยท๊ฐ๊ฒฉ ์ฆ๊ฑฐ๊ฐ ๊ฒน์น ์ ๋งคํ ๊ต์ฐจํ์ ์ํํธ
\times์ ํ๊ณผ family ์ง๋ ๋ณด์กด - ๊ฐํ ์๋ณธ
Xlogit ๋ณด์กด
๊ด๋ จ context ํ๊ท ํ
์คํธ๋ 15/15, ์ ์ฒด Python ํ๊ท ํ
์คํธ๋ 264/264 ํต๊ณผํ๋ค.
ํ๋ ๋ชจ๋ธ ํ์ธํ๋ ๊ณํ
๋จ๊ณ A โ shadow feature ์์ง
๊ธฐ์กด ๋ชจ๋ธ weight๋ ๊ณ ์ ํ๊ณ ๊ฐ ๊ธฐํธ์ top-k, geometry, stroke behavior, Tray slot์ ๋ถ์ฌ ์ ์ฅํ๋ค. ์ด๋ฏธ์ง๋ ์ stroke๋ฅผ ์๋ฒ๋ก ๋ณด๋ด์ง ์๋ ์จ๋๋ฐ์ด์ค ์์น์ ์ ์งํ๋ค. ์ฐ๊ตฌ ๋ฐ์ดํฐ์๋ ์๋ณธ provenance์ writer/source/device split์ ๋ณด์กดํ๋ค.
๋จ๊ณ B โ ์์ role head
ํ๋ head๋ ๋ชจ๋ฐ์ผ student์ ๋ถ์ผ ์ ์๋ ์์ TCN/MLP๋ก ์์ํ๋ค. pixel encoder๋ฅผ ๋ค์ ํฌ๊ฒ ํ์ตํ์ง ์๊ณ ๋ค์ multi-task๋ฅผ ์ฌ์ฉํ๋ค.
- cross semantic role CE
- local case role CE
- Tray slot consistency loss
- ์ family logit ๋ณด์กด KL
- abstain/calibration loss
์ด๊ธฐ loss weight๋ validation sweep ๋์์ด๋ฉฐ ์์ง ๋ฐฐํฌ ์์๋ก ๊ณ ์ ํ์ง ์๋๋ค.
๋จ๊ณ C โ ์ค์ ์์ ๊ฒ์ฆ
ํฉ์ฑ ์กฐํฉ์ ๋ฐ์ดํฐ ์ฆ๊ฐ์ผ๋ก๋ง ์ฌ์ฉํ๋ค. ์ต์ข ์ ํ์ writer/device/source-disjoint ์ฐ์ ์์์์ ์ํํ๋ค.
x/X/\timesrole top-1ยทtop-k์ confusion matrix- local slot๋ณ case exact
- unchanged-safe rate: ํ๋ ์ฆ๊ฑฐ๊ฐ ์๋ ํ๋ณธ์ ์ top-1 ๋ณด์กด์จ
- family oracle ๋๋น ํ์์จ
- ECE์ abstain coverage/accuracy
- main/numerator/denominator/script slice ์ต์ ์ฑ๋ฅ
๋น์์ฉยท์ฉ๋ ์ ํ ๋ฐ์ดํฐ๋ ์ฐ๊ตฌ ํ๊ฐ์๋ง ์ฌ์ฉํ๊ณ ๋ฐฐํฌ checkpoint ํ์ต์๋ ํฌํจํ์ง ์๋๋ค.
ํ์ฌ ํ๋จ
- ํ๋ ๋ชจ๋ธ ๋ฐฉํฅ ์ฑํ: ์
- ๊ธฐ์กด case layer๋ฅผ ๋ก์ปฌ ์ฌ๋กฏ ํ๋ layer๋ก ๊ต์ฒด: ์
x/X/\timeshard rewrite: ์๋์ค- CROHME R-track ์กฐ๊ฑด๋ถ ์ญํ ์ ํ๋ ์์น ํ์ธ: ์
- ์ด๋ฅผ ์ ํ ์์น๋ก ์ฃผ์ฅ: ์๋์ค
- 0.6 ์์ฉ ์นด๋๋ฆฌ: ์์ง ์๋์ค
์ฒซ GPU ํ๋ํ์ต ๊ฒฐ๊ณผ
๊ธฐ์กด 3-seed glyph teacher๋ฅผ ๊ฐ๊ฐ ๋๊ฒฐํ๊ณ 128ร19 stroke TCN + 49์ฐจ ๋ฌธ๋งฅ MLP ํ๋ head๋ฅผ GTX 1650 CUDA์์ ํ์ตํ๋ค. CROHME 2012 trainData๋ writer ๊ธฐ์ค fit 1,063์/validation 275์์ผ๋ก ๋๋ด๊ณ testDataGT 488์์ ๊ณต์ held-out์ผ๋ก๋ง ํ ๋ฒ ํ๊ฐํ๋ค.
์ญํ ๋ถ๋ชจ๋ ๋ค์๊ณผ ๊ฐ๋ค.
| split | lower identifier | upper identifier | multiply operator |
|---|---|---|---|
| fit | 1,573 | 99 | 177 |
| validation | 401 | 22 | 44 |
| official test | 568 | 31 | 36 |
head ์ ๋ ฅ์๋ ๋ค์์ ์ฌ์ฉํ๋ค.
- seed๋ณ frozen 0.6 teacher์ lower/upper/times logits
- target ์๋ณธ stroke์ ์์ยท๋ฐฉํฅยทpen-up์ ๋ณด์กดํ 128ร19 sequence
- ์ข์ฐ ์ด์์ ์ ๋ต label์ด ์๋ teacher ์์ธก ์ญํ ํ๋ฅ
- bbox, ๊ฐ๊ฒฉ, ์ค์ฌ์ , ๋ก์ปฌ ๋์ดยทํญ ๋น์จ
- 19๊ฐ cross visual feature์ stroke/point ์
| ์งํ | seed 17 | seed 31 | seed 47 | ํ๊ท ยฑ ํ์คํธ์ฐจ |
|---|---|---|---|---|
| teacher role accuracy | 74.33% | 60.79% | 60.94% | 65.35 ยฑ 6.35%p |
| behavior role accuracy | 93.07% | 93.86% | 93.07% | 93.33 ยฑ 0.37%p |
| behavior macro-F1 | 76.64% | 77.17% | 75.42% | 76.41 ยฑ 0.73%p |
| lower recall | 95.07% | 96.30% | 95.60% | 95.66 ยฑ 0.50%p |
| upper recall | 61.29% | 51.61% | 54.84% | 55.91 ยฑ 4.02%p |
| multiply recall | 88.89% | 91.67% | 86.11% | 88.89 ยฑ 2.27%p |
| ECE | 4.73% | 5.09% | 4.82% | 4.88 ยฑ 0.15%p |
ํ๊ท accuracy ์ด๋์ +27.98%p์ด๊ณ seed ๊ฐ ํธ์ฐจ๋ ์์ ํ๋ ๋ฌธ๋งฅ ๋ฐฉํฅ์ ์ ํจํ๋ค. ํนํ frozen teacher๊ฐ ์ธ seed ๋ชจ๋ \times๋ฅผ 0% ํ์ํ๋ ์กฐ๊ฑด์์ ํ๋ head๋ 86.11~91.67%๋ฅผ ํ์ํ๋ค.
๊ทธ๋ฌ๋ ๋ค์ ํ๊ณ ๋๋ฌธ์ ์ ํ ์น๊ฒฉ์ ๊ธ์งํ๋ค.
- ์ ๋ต symbol grouping ์ดํ์ ์กฐ๊ฑด๋ถ ์ญํ ํ๊ฐ๋ค. segmentation ์ค๋ฅ๋ ๋ถ๋ชจ์ ์๋ค.
- CROHME R-track weight๋ผ ์์ฉ checkpoint์ ๋ณํฉํ ์ ์๋ค.
- official test์ ๋๋ฌธ์ ๋ถ๋ชจ๋ 31๊ฐ๋ฟ์ด๋ฉฐ recall ํ๊ท ๋ 55.91%๋ค.
- ๋ถ์ยท์ฒจ์ ๋ก์ปฌ case์ ์ค์ device-disjoint ์ ํ ๋ถ๋ชจ๊ฐ ์๋๋ค.
- ์ธ teacher๋ณ head๋ ์ฝ 75.8KB์ง๋ง distillation/์จ๋๋ฐ์ด์ค ๋ณํ ๋จ๊ณ๋ก ๋๊ธฐ์ง ์๋๋ค.
๋ฐ๋ผ์ ์ฒซ ํ์ต ๊ฒฐ๋ก ์ x/X/\times ์๋ฏธ ์ญํ head ์ฑํ, ๋๋ฌธ์ ๋ฐ์ดํฐ ํ์ฅ, predicted grouping end-to-end ์ฌํ๊ฐ๋ค. ์ ํ์ฉ ๋ค์ ํ์ต์ ์น์ธ๋ trajectory๋ฅผ ์ํ ๋ฐฐ์น๋ก ํฉ์ฑํ ์ฝํ P-compatible proxy์ ์ค์ ์์ฉ ํ์ฉ ์ฐ์์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถํด ์ฌ์ฉํด์ผ ํ๋ค.
ํ์ ๋ฃจํ โ ํฉ์ฑ ๋๋ฌธ์์ predicted grouping
์น์ธ trajectory ๋ถ๋ชจ
HWRTยทUJI Pen v1/v2์ writer-disjoint training split์๋ ์๋ํฌ๊ธฐ๊ตฐ ๊ฐ ๋ยท์๋ฌธ์๊ฐ ์ฝ 90~111๊ฐ์ฉ ์๋ค. ์ด๋ฅผ ์ค์ stroke ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ ์์ ํ์ ๋์ดยท์ข์ฐ ์ซ์ anchor๋ง ํฉ์ฑํ P-compatible proxy๋ฅผ ๋ง๋ค์๋ค.
์ฒซ ํ๋ณด๋ 8๊ฐ case family 1,590๊ฐ๋ฅผ loss weight 0.35๋ก ์ถ๊ฐํ๋ค. ๋ ๋ฒ์งธ ํ๋ณด๋ ์ค์ CROHME fit ์ ๊ทํ ํต๊ณ๋ฅผ ๊ณ ์ ํ๊ณ c/x/z family์ ๋๋ฌธ์ 284๊ฐ์ ์๋ฌธ์ 77๊ฐ๋ง weight 0.15๋ก ์ถ๊ฐํ๋ค.
| seed 17 official test | ์ behavior | ์ ์ฒด proxy | targeted proxy |
|---|---|---|---|
| accuracy | 93.07% | 93.39% | 93.39% |
| macro-F1 | 76.64% | 75.62% | 76.45% |
| upper recall | 61.29% | 51.61% | 54.84% |
| multiply recall | 88.89% | 86.11% | 88.89% |
๋ ํ๋ณด ๋ชจ๋ ๋ชฉํ์ธ upper recall์ ์ ํ์์ผฐ๋ค. ๊ณ ๋ฆฝ๊ธฐํธ๋ฅผ ์ธ์์ ์ผ๋ก ํค์ด ๋ฐ์ดํฐ๋ ์ค์ ์ฐ์์์ ๋๋ฌธ์ ํ๋ ๋ถํฌ๋ฅผ ๋์ฒดํ์ง ๋ชปํ๋ฏ๋ก ์กฐ๊ธฐ ๊ธฐ๊ฐํ๊ณ seed 31ยท47๋ก ํ์ฅํ์ง ์์๋ค. ์์ ์ ์ฒด accuracy ์์น์ ๊ทผ๊ฑฐ๋ก ์ฑํํ์ง ์๋๋ค.
๋ก์ปฌ MathWriting 2024 excerpt๋ train/valid/test ๊ฐ 100์๊ณผ symbols/synthetic ๊ฐ 100๊ฐ๊ฐ ์์ง๋ง formula InkML์ symbol-to-stroke group ์ ๋ต์ด ์๋ค. LaTeX ๋ฌธ์์ด๊ณผ ์ ์ฒด stroke๋ง์ผ๋ก ๋๋ฌธ์ ์ญํ target์ ๊ฐ์ ์ ๋ ฌํ๋ฉด labelยทํ์์ ๋ฐ๋ช ํ๊ฒ ๋๋ฏ๋ก supervised behavior ํ์ต์ ๋ฃ์ง ์๋๋ค.
Predicted grouping ๊ฐ์ฌ
๊ณต์ test 488์์ ํ๋ ๋์ 635๊ฐ๋ฅผ validation์์ ๊ณ ์ ํ lattice selector๋ก ๋ค์ ํ๊ฐํ๋ค.
| grouping ๊ฒฝ๋ก | ์ ์ฒด target | lower | upper | \times |
x exact group |
|---|---|---|---|---|---|
| base OCR fusion | 81.89% | 79.93% | 96.77% | 100% | 75.56% |
| Tray/infix joint | 81.42% | 79.58% | 93.55% | 100% | 75.11% |
| cross-visual + Tray/infix, gap 20% | 91.02% | 90.32% | 93.55% | 100% | 88.89% |
| full selector, gap 50% | 93.39% | 92.96% | 93.55% | 100% | 92.22% |
| protected family selector, gap 40% | 92.91% | 92.43% | 93.55% | 100% | 91.56% |
base์์ ์คํจ 115๊ฑด ์ค x๊ฐ 110๊ฑด์ด๊ณ , ๊ทธ์ค 96๊ฑด์ด ๋ ํ oversplit์ด์๋ค. ์ต์ด cross-visual ๊ฒฐํฉ์ ์ ์ฒด oversplit์ 98โ42๊ฑด์ผ๋ก ์ค์ด๊ณ x exact grouping์ +13.33%p ์ฌ๋ ธ๋ค. ๋ฐ๋ฉด cross model ์๋ Tray/infix ๋จ๋
์ ์ํญ ์
ํ๋ผ ํ๋ grouping ๊ฒฝ๋ก๋ก ์ฑํํ์ง ์๋๋ค.
ํ์ฌ ๋ณ๋ชฉ์ ๋ค์์ฒ๋ผ ๋ถ๋ฆฌ๋๋ค.
x: ์ต์ข ๊ฒฐํฉ ํ grouping recall์ 91.56%๋ก 90%๋๋ฅผ ์ ์งํ๋ฉฐ ์์ฌ 38๊ฑด์ oversplit 26, overmerge/ํผํฉ 12๋ค.X/C: upper ์ญํ grouping์ 93.55%์ด๋ฏ๋ก ์ฃผ ๋ณ๋ชฉ์ behavior role head์ ์ค์ ์ฐ์์ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ค.\times: grouping 100%, conditional role recall 88.89%์ด๋ฏ๋ก ์๋ฏธ head๊ฐ ๋ณ๋ชฉ์ด๋ค.- grouping๊ณผ role ์ค๋ฅ๊ฐ ๋ ๋ฆฝ์ด๋ผ๊ณ ๊ฐ์ ํ ๊ทผ์ฌ end-to-end recall์ lower 88.42%, upper 52.31%, multiply 88.89%๋ค. ์ด๋ ์ค์ธก end-to-end ์์น๊ฐ ์๋๋ฏ๋ก ์ ํ ์งํ๋ก ์ฌ์ฉํ์ง ์๋๋ค.
- ์ ์ฒด 488์ exact partition์ 60.04%์ด๋ฉฐ fractionยทsuperscriptยท๋จ์ผ๊ธฐํธ overmerge๊ฐ ๋ค์ segmentation ๋ณ๋ชฉ์ด๋ค.
๋ฐ๋ผ์ R-track grouping ๊ธฐ์ค์ ์ equality + cross-visual + protected multistroke family + Tray/infix, cross gap ratio 0.40์ผ๋ก ๊ฐฑ์ ํ๋ค. ๋๋ฌธ์๋ ํฉ์ฑ isolated proxy๊ฐ ์๋๋ผ ์ค์ symbol-group annotation์ด ์๋ ์ฐ์์๋ง ๋ค์ supervised ํ์ต ํ๋ณด๋ก ํ์ฉํ๋ค.
x prefilter ๋ณ๋ชฉ๊ณผ gap validation sweep
์คํจ๋ฅผ candidate ์์ฑโcross headโexact-cover selector๋ก ๋ถํดํ๋ค. ๋ ํ x์ lattice candidate recall์ validation/test ๋ชจ๋ 100%์ด๊ณ test cross threshold recall์ 98.37%์๋ค. ๊ทธ๋ฐ๋ฐ ์คํจ ํ๋ณด์ cross ํ๋ฅ ์ค์๊ฐ๋ 0.929์ธ๋ฐ infix_signal=0์ด์๋ค. ์์ธ์ cross head ์์ bbox gap 20% prefilter๊ฐ ์ข์ฐ ๊ณก์ )(ํ x๋ฅผ ๋ชจ๋ธ์ ์ ๋ฌํ์ง ์์ ๊ฒ์ด๋ค.
์ ์ญ threshold์ merge weight๋ฅผ ๊ณ ์ ํ๊ณ gap ratio 0.20~0.80๋ง writer-validation์์ ์ ํํ๋ค. Validation winner 0.50์ equality head๊น์ง ํฌํจํ full selector์ ๊ณต์ test์ ์ ์ฉํ๋ค.
| ์งํ | gap 20% | gap 50% | ๋ณํ |
|---|---|---|---|
validation x grouping |
82.31% | 88.45% | +6.14%p |
| validation exact partition | 63.27% | 65.82% | +2.55%p |
| validation pair-F1 | 91.00% | 91.69% | +0.69%p |
official test x grouping |
88.89% | 92.22% | +3.33%p |
| official test exact partition | 53.69% | 54.51% | +0.82%p |
| official test pair-F1 | 88.38% | 88.72% | +0.35%p |
gap 50%๋ ์ด ๋จ๊ณ์์ ์ ์งํ๊ฐ ํจ๊ป ์ฌ๋ผ ์ฑํํ๋ค. ์ดํ ๊ฐ์ ๊ธฐ์ค์์ threshold 0.5, weight 10์ ๊ณต๊ฒฉ ํ๋ณด๋ test x๋ฅผ 94.44%๋ก ์ฌ๋ ธ์ง๋ง exact partition 54.51โ53.89%, pair-F1 88.72โ88.41%, overmerge 21.11โ23.57%๋ก ์
ํ๋ผ ๊ธฐ๊ฐํ๋ค. ๋คํ family boost์ ๊ฒฐํฉํ validation ์ฌ์ ํ์์๋ ๋์ผ test ์ฑ๋ฅ์ ๋ด๋ ๋ ์ข์ gap 0.40์ด ์ ํ๋๋ค. ์ต์ข
cross ๊ฐ์ gap 0.40, threshold 0.692841..., infix weight 8์ด๋ค.
๋คํ family must-link์ geometry ๋ณดํธ
sum/pi/rightarrow/neq/pm์ candidate recall์ด validation/test ๋ชจ๋ 100%์์ง๋ง ํฉ์น OCR alias๊ฐ ๊ธฐ์กด reliable ๋ชฉ๋ก๊ณผ ์ฐ๊ฒฐ๋์ง ์๊ฑฐ๋ 3๊ฐ์ singleton ์ ์์ ๋ฐ๋ ธ๋ค. Sigma/pi-family/arrow-family/neq/pm ํ๋ณด์๋ง ์ถ๊ฐ symbol signal์ ์ฃผ๊ณ boost 0~6์ writer-validation์์ ์ ํํ๋ค.
| ๊ณต์ test grouping | ๊ธฐ์ค | boost 6 + ๋ณดํธ |
|---|---|---|
| ๋ค์ฏ family ์ ์ฒด | 45.19% | 82.96% |
\sum |
25.81% | 70.97% |
\pi |
40.00% | 90.00% |
\rightarrow |
71.43% | 89.80% |
\neq |
23.08% | 76.92% |
\pm |
25.00% | 75.00% |
๋ฌด๋ณดํธ boost 6์ ์ ์ฒด์ exact 57.38%๊น์ง ์ฌ๋ ธ์ง๋ง hookrightarrow, ์ข์ Sigma, ์ธ๋ก๋ก ๊ธด pm ์ค์ธ์ด ๋จ์ผ๊ธฐํธ๋ฅผ ๋จน์๋ค. Training writer-validation์ ์ค์ geometry ๋ฒ์์์ arrow pair_gap_maxโค0.50, Sigma width_refโฅ2.0, pm height_refโค2.0 guard๋ฅผ ๋ง๋ค๊ณ ontology ๋ฐ hookrightarrow alias๋ฅผ ์ ๊ฑฐํ๋ค. ๋ณดํธ ํ ๊ณต์ test exact๋ 60.04%, pair-F1์ 91.07%, overmerge formula rate๋ 21.72%๋ค. Gap-only ๋๋น ๊ฐ๊ฐ +5.53%p, +2.35%p์ด๋ฉฐ overmerge ์ฆ๊ฐ๋ +0.61%p๋ก ์ ํ๋๋ค.
์ต์ข ์์ฌ segmentation ๋ณ๋ชฉ
์ต์ข full selector์ 488์ ์์ฌ ์คํจ๋ exact 293, oversplit 89, overmerge 72, ํผํฉ 34๋ค. ๊ตฌ์กฐ๋ณ exact๋ sqrt 68.00%, plain 63.95%, subscript 57.01%, superscript 52.75%, fraction 52.10%๋ค. 3ํ ๊ธฐํธ correct๋ 34โ63๊ฐ๋ก ๋์๊ณ oversplit์ 57โ32๊ฐ๋ก ์ค์๋ค.
| label | ์ค๋ฅ/์ ์ฒด | ์ฃผ ์คํจ |
|---|---|---|
x |
38/450 | oversplit 26, overmergeยทํผํฉ 12 |
1 |
36/482 | ์ฃผ๋ณ ํ๊ณผ overmerge |
- |
36/584 | overmerge |
\sin physical part |
35/297 | overmerge 15, oversplit 18 |
\sum |
9/31 | oversplit 8 |
i |
9/41 | oversplit |
F |
7/10 | oversplit |
\div |
7/11 | oversplit |
๋ฐ๋ผ์ ๋ค์ ์ฐ์ ์์๋ ์ ์ญ threshold๊ฐ ์๋๋ผ ๋ถ์ยท์์ฒจ์์์ 1/-/๊ดํธ๊ฐ ์ด์ Tray๋ก ๋์ด๊ฐ์ง ์๊ฒ ํ๋ local-baseline must-not-link, ๊ทธ๋ฆฌ๊ณ ๋จ์ F/div/i ๋คํ family๋ค.
Local-baseline ๊ฐ์ฌ์ ํ์ตํ boundary ํ๋ head
์ต์ข
selector์ overmerge๋ฅผ ์ ๋ต ๊ธฐํธ ๋จ์๋ก ๋ค์ ์ฐ๊ฒฐํ๋ค. ๊ณต์ test์๋ 299๊ฐ overmerge event์ 149๊ฐ ๊ณ ์ ์ ํ ํ๋ณด๊ฐ ์์๋ค. ์ค๋ฅ๊ฐ ์ง์ค๋ ์ ๋ต์ 1 36๊ฑด, - 36๊ฑด, ๊ดํธ 53๊ฑด์ด๋ฉฐ ๊ตฌ์กฐ๋ณ๋ก superscript 150๊ฑด, fraction 112๊ฑด, subscript 96๊ฑด์ด ๊ฒน์ณ ์์๋ค. ๊ธฐ์กด fraction penalty๋ 299๊ฑด ์ค 4๊ฑด์๋ง ์ ํธ๋ฅผ ๋๋ค.
๋ ๊ท์นํ ๊ฐ๋๋ ์ฑํํ์ง ์์๋ค.
- ํฉ์น OCR์ด ๊ตฌ์ฑํ๋ณด๋ค ์ฝํ ๋ ๊ฐ์ ํ๋ component competition์ validation exact๋ฅผ ๊ฐ์ ํ์ง ๋ชปํ๊ณ family grouping์ ์ ํ์์ผ weight 0์ ์ ํํ๋ค.
- base partition์์
SUPERSCRIPT/SUBSCRIPT/ABOVE/BELOW/CONTAINSedge๋ฅผ ๋ง๋ local-baseline guard๋ validation 3,293๊ฐยทtest 5,061๊ฐ ํ๋ณด์ ์ ํธ๋ฅผ ๋ง๋ค์์ง๋ง ์ค์ 149๊ฐ ์ค๋ณํฉ ํ๋ณด์๋ ์ ํจ ์ ํธ๊ฐ 0๊ฐ์๋ค. ์ด๋ฏธ ์ค๋ณํฉ๋ partition ๋ค์์ ๊ด๊ณ๋ฅผ ๋ง๋ค์๊ธฐ ๋๋ฌธ์ ๋ด๋ถ ๊ฒฝ๊ณ๋ฅผ ๋ณต์ํ ์ ์์๋ค.
์ด์ grouping ์ด์ ์ ๋ชจ๋ ๋คํ ํ๋ณด๋ฅผ ๋์์ผ๋ก, ๋ ์ด์์ ์ ๋ต ๊ธฐํธ๋ฅผ ์นจ๋ฒํ๋์ง๋ฅผ ์์ธกํ๋ geometry boundary ํ๋ head๋ฅผ fit writer์ ํ์ตํ๋ค. 72,223๊ฐ ํ๋ณด ์ค 66,842๊ฐ๊ฐ boundary ์์ฑ์ด๋ฉฐ, validation์์ threshold 0.5ยทpenalty weight 6์ ์ ํํ๋ค.
| ์งํ | ๋ณดํธ selector | boundary ํ๋ head | ๋ณํ |
|---|---|---|---|
| validation exact partition | 68.00% | 69.82% | +1.82%p |
| validation pair-F1 | 92.98% | 93.64% | +0.66%p |
| official exact partition | 60.04% | 60.25% | +0.20%p |
| official pair-F1 | 91.07% | 91.26% | +0.19%p |
| official overmerge formula | 21.72% | 20.49% | -1.23%p |
official x grouping |
91.56% | 91.33% | -0.22%p |
| official ๋คํ family grouping | 82.96% | 81.48% | -1.48%p |
์ฌ์ ์ ์ํ x -1%p, family -2%p, pair-F1 -0.25%p ๋ณดํธ gate ์์์ exact์ pair-F1์ด ํจ๊ป ์ฌ๋ผ R-track head๋ก ์ฑํํ๋ค. ๋ค๋ง CROHME ์ ๋ต ๊ฒฝ๊ณ๋ก ํ์ตํ ๋น์์
์ฐ๊ตฌ weight์ด๋ฏ๋ก ์ ํ checkpointยทteacherยทdistillation์๋ ์ฌ์ฉํ ์ ์๋ค. ์์ฉ ์ด์ ๊ฒฝ๋ก๋ ๋์ผ boundary target์ P-track ์ฐ์์์ผ๋ก ์ฌํ์ตํ๊ฑฐ๋ shared trajectory encoder์ auxiliary boundary loss๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด๋ค. ์ ์ฒด Python ํ๊ท๋ 271๊ฐ๊ฐ ํต๊ณผํ๋ค.
P-track boundary auxiliary smoke
2026-07-24 ์ ์ : ์๋ ์ต์ด smoke๋ adapter checkpoint์
shared_state_dict๋ฅผ ์ ์ฉํ์ง ์์ base-only ๊ฒฐ๊ณผ์ด๋ฏ๋ก ํ์ฌ ๋ฉ์ธ ๋ชจ๋ธ ์ฑ๋ฅ ๊ทผ๊ฑฐ์์ ์ฒ ํํ๋ค. ์คํ ์ด๋ ฅ์ผ๋ก๋ง ๋ณด์กดํ๋ค.
๋ณ๋ sklearn guard๋ฅผ ์ต์ข
๊ตฌ์กฐ๋ก ๊ณ ์ ํ์ง ์๊ณ MathInk06Model์ shared 384์ฐจ trajectory embedding ์์ ์ ํ์ binary boundary head๋ฅผ ์ถ๊ฐํ๋ค. ๊ธฐ๋ณธ๊ฐ์ ๋นํ์ฑ์ด๋ผ ๊ธฐ์กด checkpoint key์ forward() โ exact,family ๊ณ์ฝ์ ๋ณํ์ง ์๋๋ค. ํ์ฑ ๊ฒฝ๋ก๋ง online/raster candidate๋ณ boundary logit์ ๋ฐํํ๋ฉฐ class imbalance์ฉ binary auxiliary loss๋ฅผ ์ ๊ณตํ๋ค.
CROHME weight๋ฅผ ์ด์ ํ์ง ์๊ณ ์น์ธ paired training trajectory์ ์ค์ ๋จ์ผ๊ธฐํธ๋ฅผ ์์ฑ์ผ๋ก, ์๋ก ๋ค๋ฅธ ๋ ๊ธฐํธ๋ฅผ ๊ฐ์ ํยท์์ฒจ์ยท์๋์ฒจ์ ์์น์ ๋ฐฐ์นํ ํ๋ณด๋ฅผ ์์ฑ์ผ๋ก ํฉ์ฑํ๋ค. Seed-17 base์ online adapter๋ ๋๊ฒฐํ๊ณ head๋ง ํ์ตํ๋ค.
| P proxy validation | ๊ฒฐ๊ณผ |
|---|---|
| balanced validation samples | 2,400 |
| validation accuracy | 97.33% |
| validation F1 | 97.34% |
| validation ROC-AUC | 99.65% |
| validation single-symbol recall | 97.25% |
| validation cross-boundary recall | 97.42% |
| paired-test single/boundary recall | 96.92% / 98.00% |
| exact/family logit max abs ๋ณํ | 0.0 / 0.0 |
Validation์์ singleโฅ95%ยทboundaryโฅ85%๋ฅผ ๋์์ ์๊ตฌํด threshold 0.70์ ์ ํํ๊ณ , ์ ํ์ ์ฌ์ฉํ์ง ์์ paired writer/device-disjoint proxy test 2,400๊ฐ์์ accuracy 97.46%, F1 97.47%, AUC 99.62%๋ฅผ ๊ธฐ๋กํ๋ค. ์ด๋ P-track target ์ฌ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ๋ค๋ smoke ์ฆ๊ฑฐ์ง๋ง ์ค์ ์ฐ์์ writer/device-disjoint ๊ฒ์ฆ์ ์๋๋ค. ๋ค์ ๋จ๊ณ๋ ์ค์ P ์ฐ์์ ๋๋ ์ฌ์ฉ์ local-only pseudo formula์์ symbol boundary annotation์ ํ๋ณดํ๊ณ main joint fine-tuning weight๋ฅผ ์ ํํ๋ ๊ฒ์ด๋ค. ์ ์ฒด Python ํ๊ท๋ 275๊ฐ๊ฐ ํต๊ณผํ๋ค.
5-layout P boundary joint โ 3 seed
2026-07-24 ์ ์ : ์๋ ์ต์ด joint ๊ฒฐ๊ณผ๋ ๋์ผํ shared-state ๋ก๋ฉ ๋๋ฝ์ ์์ํ์ผ๋ฏ๋ก delta ์ฑํ์ ์ฒ ํํ๋ค. ๊ณต๊ฐ ๋ฐฐํฌ ๋์์์ ์ ๊ฑฐํ๋ค.
Smoke์ ๋ฐฐ์น๋ฅผ ๊ฐ์ ํยท์์ฒจ์ยทํ์ฒจ์์์ ๋ถ์/๋ถ๋ชจ ์์ง ์ฌ๋กฏ๊ณผ ๋์ ์ค์์ ์๋ณ๊น์ง ๋ค์ฏ ์ข ๋ฅ๋ก ํ์ฅํ๋ค. Seed๋ณ baseยทonline adapterยทboundary head๋ฅผ ๋ ๋ฆฝ ์ด๊ธฐํํ๊ณ ๋ค์ module๋ง ์ด์๋ค.
trajectory_encoder.blocks.3trajectory_encoder.attentionexact_head,family_head,boundary_head
Authentic 4,800๊ฐ์๋ exact CEยทfamily CEยทsingle-symbol boundary loss๋ฅผ ์ฃผ๊ณ , balanced boundary ํ๋ณด 2,400๊ฐ์๋ boundary loss๋ฅผ ์คฌ๋ค. Validation ์ฑํ ์กฐ๊ฑด์ authentic exact/family ๊ฐ -0.5%p ์ด๋ด, single/boundary recall ๊ฐ 95% ์ด์์ด๋ค.
| paired proxy test | seed 17 | seed 31 | seed 47 | ํ๊ท ยฑ ํ์คํธ์ฐจ |
|---|---|---|---|---|
| exact top-1 | 77.66% | 79.38% | 77.84% | 78.29 ยฑ 0.77%p |
| exact ๋ณํ | +3.07%p | +3.20%p | +2.70%p | +2.99 ยฑ 0.21%p |
| family top-1 | 86.22% | 87.70% | 86.46% | 86.80 ยฑ 0.65%p |
| family ๋ณํ | +2.78%p | +3.54%p | +2.62%p | +2.98 ยฑ 0.40%p |
| single-symbol recall | 96.75% | 98.25% | 97.25% | 97.42 ยฑ 0.62%p |
| cross-boundary recall | 98.92% | 97.92% | 98.67% | 98.50 ยฑ 0.42%p |
| boundary F1 | 97.86% | 98.08% | 97.97% | 97.97 ยฑ 0.09%p |
์ธ seed ๋ชจ๋ validation๊ณผ paired test gate๋ฅผ ๊ฐ๋ณ ํต๊ณผํ๊ณ exact/family๋ ๋ชจ๋ seed์์ ๊ฐ์ ๋ผ P formula-layout proxy delta๋ก ์ฑํํ๋ค. ์ด๋ R-track head๋ฅผ distillํ ๊ฒฐ๊ณผ๊ฐ ์๋๋ผ ์น์ธ P trajectory์ ์๋ ค์ง ํฉ์ฑ boundary๋ง ์ฌ์ฉํ ๊ฒฐ๊ณผ๋ค. ๋ค๋ง ๋ถ๋ฆฌ๋ ๊ณ ๋ฆฝ๊ธฐํธ๋ฅผ ๋ฐฐ์นํ proxy์ด๋ฏ๋ก ์ค์ ์ฌ์ฉ์์ ์ฐ์์ stroke rhythmยทco-articulationยทdevice sampling ๋ณ๋์ ํฌํจํ์ง ์๋๋ค. ์ ํ ๊ฒ์ฆ์ false์ด๋ฉฐ ๋ค์ ํ์ gate๋ ์ค์ P ์ฐ์์ writer/device-disjoint boundary ํ๊ฐ๋ค.
3-seed device contract stress
์ฑํ delta๋ฅผ ๋ณ๋ ํ์ต ์์ด ์ขํ jitter, timestamp/speed ์ ์ฒด ๊ฒฐ์ธก, raw event ์ ๋ฐ ํฌ์ํ ํ 6Hz ์ฌ๋ณด๊ฐ, x 1.12/y 0.88 affine ์กฐ๊ฑด์์ ํ๊ฐํ๋ค. ์ต์ด sparse ์คํ์ canonical tensor๋ฅผ ์ง์ ์ ๋ฐ ์ญ์ ํด ์ ๋ ฅ ๊ณ์ฝ์ ์๋ฐํ์ผ๋ฏ๋ก ํ๊ธฐํ๊ณ , start/endยทpen-up anchor๋ฅผ ๋ณด์กดํ ์ฌ๋ณด๊ฐ ๊ฒฝ๋ก๋ก ๋ค์ ๊ณ ์ ํ๋ค.
๋ชจ๋ seedยทstress๊ฐ clean ๋๋น exact/family -3%p ์ด๋ด, single/boundary recall 90% ์ด์ gate๋ฅผ ํต๊ณผํ๋ค. ์ต์
exact ํ๋ฝ์ seed-47 affine -1.53%p, ์ต์
family ํ๋ฝ์ seed-31 affine -1.48%p์๋ค. Stress ์ ์ฒด์ single-symbol/cross-boundary recall ์ต์ ๋ ๊ฐ๊ฐ 96.67%๋ค. Timestamp ๊ฒฐ์ธก๊ณผ 2๋ฐฐ ํฌ์ sampling์ ์ต์
exact ํ๋ฝ์ด ๊ฐ๊ฐ -0.26%p์ -0.48%p ์ด๋ด์๋ค.
์ด๋ canonical ์ ๋ ฅ ๊ณ์ฝ์ ๋ณํ ๋ด์ฑ ์ฆ๊ฑฐ์ด์ง ์ค์ Android digitizerยทWDDMยทbattery/latency ๊ฒ์ฆ์ด ์๋๋ค. ๋ค์ ์ค์ gate๋ raw MotionEvent๋ฅผ ๊ฐ์ง P writer/device-disjoint ์ฐ์์์ด๋ค. ์ ์ฒด Python ํ๊ท๋ 276๊ฐ๊ฐ ํต๊ณผํ๋ค.
Shared-state ๋ก๋ฉ ๊ฒฐํจ ์ ์ ๋ฐ 3-seed ์ฌํ์ต
์ ์ ๋ฐฐํฌ ๊ตฌ์ฑ์ ๊ฐ์ฌํ ๊ฒฐ๊ณผ online_adapter.pt๋ ์ธ๋ถ modality adapter๋ฟ ์๋๋ผ ๊ณต๋ ํ์ต๋ trajectory_encoder, exact_head, family_head์ shared_state_dict๋ ์ ์ฅํ์ง๋ง, P boundary ๋ก๋๋ ์ธ๋ถ adapter๋ง ์ฝ๊ณ shared update๋ฅผ ๋๋ฝํ๋ค. ์ฌ๋ฐ๋ฅธ ํฉ์ฑ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
base checkpoint
โ adapter shared_state_dict
โ modality adapter
โ ์ ํ์ boundary head
โ ๊ฒ์ฆ์ ํต๊ณผํ ๊ฒฝ์ฐ์๋ง joint delta
๋ก๋๋ฅผ ์์ ํ๊ณ ์ด๋ฅผ ๋ณด์ฅํ๋ ํ๊ท ํ ์คํธ๋ฅผ ์ถ๊ฐํ ๋ค auxiliary์ joint๋ฅผ seed 17ยท31ยท47์์ ๋ค์ ํ์ตํ๋ค.
| paired proxy test | seed 17 | seed 31 | seed 47 | ํ๊ท |
|---|---|---|---|---|
| ์ ์ ๋ main baseline exact | 82.95% | 83.24% | 82.92% | 83.03% |
| joint exact | 82.71% | 82.95% | 82.79% | 82.81% |
| exact ๋ณํ | -0.24%p | -0.29%p | -0.13%p | -0.22%p |
| ์ ์ ๋ main baseline family | 91.22% | 91.51% | 91.38% | 91.37% |
| joint family | 90.77% | 90.96% | 90.90% | 90.88% |
| family ๋ณํ | -0.45%p | -0.56%p | -0.48%p | -0.49%p |
| single-symbol recall | 91.58% | 94.67% | 92.25% | 92.83% |
| cross-boundary recall | 98.50% | 98.75% | 98.17% | 98.47% |
์ธ seed ๋ชจ๋ official proxy gate๋ฅผ ์คํจํ๋ค. Seed 17ยท47์ single-symbol 95% floor๋ฅผ, seed 31์ single-symbol floor์ family -0.5%p ๋นํดํ ์กฐ๊ฑด์ ์คํจํ๋ค. ๋ฐ๋ผ์ corrected joint delta๋ ์ ๋ถ ๊ธฐ๊ฐํ๋ฉฐ ํ์ฌ ์ ํจ ๋ชจ๋ธ์ base + shared_state_dict + modality adapter๋ค. ์ด์ 78.29% ๊ฒฐ๊ณผ๋ ๊ฐํ main encoder๋ฅผ ๋น ๋จ๋ฆฐ ๋ฎ์ ๊ธฐ์ค์ ๊ณผ ๋น๊ตํ ๊ฒ์ด๋ฏ๋ก ๋ฌดํจ๋ค.
Joint delta ์์ด ์ ์ ๋ main๊ณผ ์ auxiliary head๋ง ๋์์ผ๋ก device stress๋ฅผ ๋ค์ ์ํํ๋ค. Clean exact/family ํ๊ท ์ ๊ฐ๊ฐ 83.03%/91.37%๋ค. ๋ชจ๋ software stress๊ฐ -3%p์ boundary recall 90% floor๋ฅผ ํต๊ณผํ๊ณ , ์ต์ exact/family ํ๋ฝ์ affine์์ -0.98%p/-1.08%p์๋ค. ์ด๋ auxiliary shadow์ ์ ๋ ฅ ๋ด์ฑ๋ง ์๋ฏธํ๋ฉฐ head์ clean single recall์ด 91.42~94.50%๋ผ release ์ฑํ ๊ทผ๊ฑฐ๋ ์๋๋ค.
Composite torch.export
๊ธฐ์กด export script๋ base checkpoint๋ง ์ฝ์ด ์ค์ main adapter๋ฅผ ์ฐํํ๋ค. Online์ online adapter โ shared trajectory encoder, raster๋ virtual top-4 โ raster adapter โ shared trajectory encoder๊ฐ ๊ทธ๋ํ ์์ ํฌํจ๋๋๋ก ์์ ํ๋ค. Dual adapter๋ ์
๋ ฅ ๋ฐ์ดํฐ์ ๋ฐ๋ฅธ ๋ฐํ์ ๋ถ๊ธฐ ๋์ online/raster branch๋ฅผ export ์์ ์ ๊ณ ์ ํ๋ค.
Seed 17ยท31ยท47 ๋ชจ๋ online/raster ๊ฐ๊ฐ ๋ํ ์
๋ ฅ 76๊ฐ์์ eager ๋๋น top-1 100% ์ผ์น, ์ต๋ logit ์ ๋์ค์ฐจ 0.0์ผ๋ก strict torch.export gate๋ฅผ ํต๊ณผํ๋ค. Seed๋น ๋ graph ํฉ๊ณ๋ 18,657,779 bytes๋ก 25MB ์์ฐ ์์ด๋ค. ๋ค๋ง .pt2๋ Android LiteRT artifact๊ฐ ์๋๋ค. ๊ณต์ LiteRT Torch 0.9.1์ Linux ํ๊ฒฝ์ ์๊ตฌํ๋ฉฐ WSL ๋ณํ ํ๊ฒฝ ์ค์น ์ค WSL filesystem I/O ์ค๋ฅ๊ฐ ๋ฐ์ํด .tflite ๋ณํ๊ณผ runtime parity๋ ์์ง ๋ฏธ์๋ฃ๋ค.
์ค์ P ์ฐ์์ ๋ฐ์ดํฐ ๊ณ์ฝ
์ค์ ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๊ธฐ ์ ์ AIFlow P Formula v1 JSON Schema์ fail-closed preflight๋ฅผ ์ถ๊ฐํ๋ค. ๊ฐ formula๋ ๋ค์ ๊ทผ๊ฑฐ๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์ผ ํ๋ค.
- ๊ณ ์
formula_id, ์๋ณธ ์ถ์ ์ฉorigin_id - ๋น์ด ์์ง ์์
writer_id,device_id,source_id training|validation|testsplitrights_track=P,commercial_training_allowed=true- ์์ canvas ํฌ๊ธฐ
- token๊ณผ ์๋ณธ raw stroke๊ฐ ํฌํจ๋ ์ ๋ต symbol group
Originยทwriterยทdeviceยทsource๊ฐ ๋ ์ด์์ split์ ๋ํ๋๋ฉด ์ ํ ํ๊ฐ๋ฅผ ๊ฑฐ๋ถํ๋ค. Timestamp์ pressure๊ฐ ์๋ symbol์ ์ญ์ ํ๊ฑฐ๋ ๊ด์ธก๊ฐ์ผ๋ก ์์ฅํ์ง ์๊ณ missing slice๋ก ์ผ๋ค. ๊ฒ์ฆ๋ formula์ ์ค์ symbol group์ boundary ์์ฑ, ์ธ์ ํ ๋ symbol group ๊ฒฐํฉ์ boundary ์์ฑ์ผ๋ก ๋ง๋ ๋ค. ์ด ๊ณ์ฝ์ ์ค์ ์ฑ๋ฅ๊ฐ์ ๋ง๋ค์ง๋ ์์ง๋ง, ํฅํ P ์ ๋ ฅ์ด CROHME ์ ๋ต group์ด๋ ํฉ์ฑ ๊ณ ๋ฆฝ๊ธฐํธ proxy์ ์์ด๋ ๊ฒ์ ๋ฐฉ์งํ๋ค. ์ ์ฒด ํ๊ท๋ 282๊ฐ๊ฐ ํต๊ณผํ๋ค.
์ฐ์ถ๋ฌผ
src/math_grid_drawer/research/behavior_context06.pysrc/math_grid_drawer/research/behavior_role_head06.pysrc/math_grid_drawer/research/math_context_layer.pyscripts/train_math_ink_06_behavior_role.pyscripts/summarize_math_ink_06_behavior_seeds.pyscripts/audit_math_ink_06_behavior_grouping.pyscripts/audit_math_ink_06_x_edge_bottleneck.pyscripts/sweep_math_ink_06_x_grouping_guard.pyscripts/sweep_math_ink_06_cross_gap_guard.pyscripts/audit_math_ink_06_multistroke_families.pyscripts/sweep_math_ink_06_multistroke_family_guard.pyscripts/audit_math_ink_06_multistroke_guard_regressions.pyscripts/audit_math_ink_06_local_baseline_overmerge.pyscripts/sweep_math_ink_06_component_competition_guard.pyscripts/sweep_math_ink_06_local_baseline_guard.pyscripts/train_math_ink_06_boundary_behavior_guard.pyscripts/train_math_ink_06_p_boundary_auxiliary.pyscripts/train_math_ink_06_p_boundary_joint.pyscripts/summarize_math_ink_06_p_boundary_joint.pyscripts/evaluate_math_ink_06_p_boundary_device_stress.pyscripts/export_math_ink_06_litert.pyscripts/preflight_math_ink_06_p_formula.pyscripts/analyze_crohme_lattice_failures.pytests/test_behavior_context06.pytests/test_behavior_role_head06.pytests/test_p_formula_gate06.pyresearch/contracts/aiflow_p_formula_v1.schema.jsonresearch/AIFlow-MATH-INK-0.6-BEHAVIOR-CONTEXT-REPORT-20260724.mdresearch/runs/math_ink_06_behavior_role_3seed_20260724/run_summary.jsonresearch/runs/math_ink_06_behavior_grouping_audit_20260724/report.jsonresearch/runs/math_ink_06_behavior_grouping_cross_joint_audit_20260724/report.jsonresearch/runs/math_ink_06_p_boundary_joint_sharedfix_3seed_20260724/run_summary.jsonresearch/runs/math_ink_06_p_boundary_device_stress_sharedfix_3seed_20260724research/runs/math_ink_06_composite_export_seed17_20260724/export_manifest.jsonresearch/runs/math_ink_06_x_grouping_guard_20260724/report.jsonresearch/runs/math_ink_06_x_edge_bottleneck_20260724/report.jsonresearch/runs/math_ink_06_cross_gap_guard_full_selector_20260724/report.jsonresearch/runs/math_ink_06_behavior_grouping_full_selector_gap50_20260724/report.jsonresearch/runs/math_ink_06_x_grouping_guard_gap50_full_selector_20260724/report.jsonresearch/runs/math_ink_06_full_selector_gap50_failure_audit_20260724/report.jsonresearch/runs/math_ink_06_cross_gap_guard_family6_full_selector_20260724/report.jsonresearch/runs/math_ink_06_multistroke_family_guard_geometry_protected_20260724/report.jsonresearch/runs/math_ink_06_multistroke_guard_regression_audit_20260724/report.jsonresearch/runs/math_ink_06_full_selector_gap40_family6_protected_failure_audit_20260724/report.jsonresearch/runs/math_ink_06_behavior_grouping_full_selector_gap40_family6_protected_20260724/report.jsonresearch/runs/math_ink_06_component_competition_guard_20260724/report.jsonresearch/runs/math_ink_06_local_baseline_guard_20260724/report.jsonresearch/runs/math_ink_06_local_baseline_overmerge_audit_20260724/report.jsonresearch/runs/math_ink_06_boundary_behavior_guard_20260724/report.jsonresearch/runs/math_ink_06_p_boundary_auxiliary_smoke_20260724/report.jsonresearch/runs/math_ink_06_p_boundary_auxiliary_fullsmoke_20260724/report.jsonresearch/runs/math_ink_06_p_boundary_joint_3seed_20260724/run_summary.jsonresearch/runs/math_ink_06_p_boundary_device_stress_3seed_20260724/report.json