Update README.md
Browse files
README.md
CHANGED
|
@@ -16,391 +16,460 @@ tags:
|
|
| 16 |
|
| 17 |
# AIFlow Math Ink 0.6
|
| 18 |
|
| 19 |
-
AIFlow Math Ink 0.6์ ์ํ ํ๊ธฐ๋ฅผ **์ด๋ฏธ์ง๋ณด๋ค
|
| 20 |
|
| 21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
|
| 23 |

|
| 24 |
|
| 25 |
-
##
|
| 26 |
|
| 27 |
-
|
| 28 |
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
| HWRT writer split ๋์ | 93๋ช
| 0 |
|
| 33 |
-
| ์ ์ฒด origin overlap | 0 | 0 |
|
| 34 |
-
| ์ ํจ supervised source | 4 | 3 |
|
| 35 |
|
| 36 |
-
|
|
|
|
|
|
|
| 37 |
|
| 38 |
-
|
| 39 |
|
| 40 |
-
-
|
| 41 |
-
-
|
| 42 |
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
|
| 44 |
-
|
| 45 |
|
| 46 |
-
|
| 47 |
|
| 48 |
-
|
| 49 |
|
| 50 |
-
|
| 51 |
-
2. stroke๋ณ ์์์ ยท๋์ ยทpen-up์ ํ์ anchor๋ก ๋จ๊ธด๋ค.
|
| 52 |
-
3. ๋ชจ๋ธ์ฉ temporal view๋ง 6Hz๋ก ์ฌํ๋ณธํํ๋ค.
|
| 53 |
-
4. ์ข
ํก๋น๋ฅผ ๋ณด์กดํด 128ร128 ink space์ ์ค์ ์ ๊ทํํ๋ค.
|
| 54 |
-
5. ์ต๋ 128 event, 19๊ฐ feature๋ฅผ `128ร19` tensor๋ก ๋ง๋ ๋ค.
|
| 55 |
|
| 56 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 57 |
|
| 58 |
```text
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
aspect_ratio,
|
| 64 |
-
bbox_top, bbox_bottom, bbox_height, center_y,
|
| 65 |
-
baseline_available,
|
| 66 |
-
time_delta, speed, missing_mask, source_modality
|
| 67 |
```
|
| 68 |
|
| 69 |
-
|
| 70 |
-
- ์ ์ ์ด๋ฏธ์ง์ฒ๋ผ ์๊ฐ์ด ์์ผ๋ฉด `timestamp_mode=canonical`, `missing_mask=1`
|
| 71 |
-
- ์ถ์ ์๊ฐ์ ์ค์ ๊ด์ธก ์๊ฐ์ฒ๋ผ ์ ์ฅํ์ง ์๋๋ค.
|
| 72 |
|
| 73 |
-
##
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
|
| 75 |
```text
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
โ online dual-TCN adapter
|
| 79 |
-
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 80 |
-
โ
|
| 81 |
-
Raster 128ร128 โ
|
| 82 |
-
โ spatial encoder โ
|
| 83 |
-
โ causal virtual-trajectory decoder โ
|
| 84 |
-
โ top-4 stroke hypotheses โ
|
| 85 |
-
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
| 86 |
-
โผ
|
| 87 |
-
shared residual TCN (hidden=128)
|
| 88 |
-
โโ exact head: 378 labels
|
| 89 |
-
โโ family head: 324 families
|
| 90 |
-
โโ top-k probabilities
|
| 91 |
|
| 92 |
-
|
| 93 |
-
โ 49-d context MLP + stroke TCN
|
| 94 |
-
โ identifier_lower / identifier_upper / multiply_operator
|
| 95 |
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
โ candidate crosses a symbol boundary?
|
| 99 |
```
|
| 100 |
|
| 101 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 102 |
|
| 103 |
-
|
| 104 |
|
| 105 |
-
|
| 106 |
|
| 107 |
```text
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
seed31/
|
| 114 |
-
...
|
| 115 |
-
seed47/
|
| 116 |
-
...
|
| 117 |
-
artifacts/
|
| 118 |
-
boundary_behavior_guard.joblib
|
| 119 |
```
|
| 120 |
|
| 121 |
-
|
| 122 |
-
|---|---|---|
|
| 123 |
-
| `base_378.pt` | ๊ณตํต trajectory/raster base | hidden 128, top-4 hypothesis, 378 exact, 324 family |
|
| 124 |
-
| `online_adapter.pt` | ์ค์ ์จ๋ผ์ธ stroke ๋ณด์ | `dual_tcn_v3`, `top4-skeleton-128x19` |
|
| 125 |
-
| `behavior_role_head.pt` | `x/X/ร` ์ญํ ๋ฌธ๋งฅ | 128ร19 stroke + 49 context feature |
|
| 126 |
-
| `boundary_behavior_guard.joblib` | ์๋ชป๋ ๋ค๊ธฐํธ ๋ณํฉ ์ต์ | geometry 17 feature, threshold 0.5, weight 6 |
|
| 127 |
|
| 128 |
-
|
|
|
|
|
|
|
|
|
|
| 129 |
|
| 130 |
-
|
| 131 |
|
| 132 |
-
|
| 133 |
|
| 134 |
-
|
| 135 |
-
from pathlib import Path
|
| 136 |
-
import torch
|
| 137 |
|
| 138 |
-
|
| 139 |
|
| 140 |
-
|
| 141 |
-
adapter = torch.load(root / "online_adapter.pt", map_location="cpu", weights_only=False)
|
| 142 |
-
role = torch.load(root / "behavior_role_head.pt", map_location="cpu", weights_only=False)
|
| 143 |
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
print(role["role_labels"], role["context_features"])
|
| 149 |
```
|
| 150 |
|
| 151 |
-
|
| 152 |
|
| 153 |
-
```
|
| 154 |
-
|
| 155 |
-
|
|
|
|
|
|
|
| 156 |
|
| 157 |
-
|
| 158 |
-
Path("artifacts/base_378.pt"),
|
| 159 |
-
adapter_checkpoint=Path("artifacts/online_adapter.pt"),
|
| 160 |
-
)
|
| 161 |
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 168 |
```
|
| 169 |
|
| 170 |
-
|
| 171 |
|
| 172 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 173 |
|
| 174 |
-
|
| 175 |
|
| 176 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 177 |
|
| 178 |
-
|
| 179 |
-
|---|---:|---:|---:|
|
| 180 |
-
| writer validation, 4,261 samples | 86.13% | 99.48% | 92.94% |
|
| 181 |
-
| paired writer-disjoint test, 3,782 samples | 82.87% | 97.73% | 91.22% |
|
| 182 |
|
| 183 |
-
|
| 184 |
|
| 185 |
-
|
| 186 |
|
| 187 |
-
|
| 188 |
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
| 194 |
-
| uppercase identifier recall | 55.91% |
|
| 195 |
-
| multiplication recall | 88.89% |
|
| 196 |
-
| ECE | 4.88% |
|
| 197 |
|
| 198 |
-
|
| 199 |
|
| 200 |
-
##
|
| 201 |
|
| 202 |
-
|
| 203 |
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
| official test visual-family top-1 | 88.17% | 88.03% |
|
| 210 |
-
| visual-family ์ผ๋ฐํ gap | 5.13%p | โ |
|
| 211 |
|
| 212 |
-
|
| 213 |
|
| 214 |
-
###
|
| 215 |
|
| 216 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 217 |
|
| 218 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 219 |
|
| 220 |
-
##
|
| 221 |
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
|
| 225 |
-
|
| 226 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 227 |
|
| 228 |
-
|
| 229 |
|
| 230 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 231 |
|
| 232 |
-
|
| 233 |
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
| single-symbol recall | โ | 92.83% | 95% floor ์คํจ |
|
| 239 |
-
| cross-boundary recall | โ | 98.47% | ํต๊ณผ |
|
| 240 |
|
| 241 |
-
|
| 242 |
|
| 243 |
-
|
| 244 |
|
| 245 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 246 |
|
| 247 |
-
|
| 248 |
|
| 249 |
-
|
| 250 |
|
| 251 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 252 |
|
| 253 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 254 |
|
| 255 |
-
|
| 256 |
|
| 257 |
-
|
| 258 |
|
| 259 |
-
|
| 260 |
-
|
| 261 |
-
|
| 262 |
-
| exact ensemble top-5 | 98.02% |
|
| 263 |
-
| visual-family top-1 | **92.99%** |
|
| 264 |
-
| seed oracle top-1 | 88.05% |
|
| 265 |
-
| ์ธ seed ๊ณตํต ์ค๋ฅ | 11.95% |
|
| 266 |
|
| 267 |
-
|
| 268 |
|
| 269 |
-
|
|
|
|
|
|
|
|
|
|
| 270 |
|
| 271 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 272 |
|
| 273 |
-
์
|
| 274 |
|
| 275 |
-
```
|
| 276 |
-
|
| 277 |
-
|
| 278 |
-
|
| 279 |
-
SymbolResult:
|
| 280 |
-
candidates[{token, probability}]
|
| 281 |
-
confidence
|
| 282 |
-
modelVersion
|
| 283 |
-
latencyMs
|
| 284 |
```
|
| 285 |
|
| 286 |
-
|
| 287 |
|
| 288 |
-
##
|
| 289 |
|
| 290 |
-
|
| 291 |
|
| 292 |
-
|
|
|
|
|
|
|
|
|
|
| 293 |
|
| 294 |
-
|
| 295 |
-
- timestampยทpressure ๊ฒฐ์ธก์ ์๋ณธ ๊ทธ๋๋ก ๋ณด์กด
|
| 296 |
-
- ๊ธฐ์ค checkpoint์ ์ค๋ณต ์๋ 378 exact vocabulary์ token ์ผ์น
|
| 297 |
-
- origin/writer/device/source split ๋์ 0
|
| 298 |
-
- training/validation/test์ P ๊ถ๋ฆฌยท๋
๋ฆฝ source gate ํต๊ณผ
|
| 299 |
|
| 300 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 301 |
|
| 302 |
-
```
|
| 303 |
-
|
| 304 |
-
|
| 305 |
-
|
| 306 |
-
|
| 307 |
-
--output path/to/p_formula_v1.jsonl `
|
| 308 |
-
--report path/to/preflight.json
|
| 309 |
```
|
| 310 |
|
| 311 |
-
|
| 312 |
|
| 313 |
-
###
|
| 314 |
|
| 315 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 316 |
|
| 317 |
```text
|
| 318 |
-
|
| 319 |
-
context dropout 0.30
|
| 320 |
-
inverse-sqrt(source frequency ร exact-label frequency) sampler
|
| 321 |
-
validation-only checkpoint selection
|
| 322 |
```
|
| 323 |
|
| 324 |
-
|
| 325 |
|
| 326 |
-
์ค
|
| 327 |
|
| 328 |
-
###
|
| 329 |
|
| 330 |
-
|
| 331 |
|
| 332 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 333 |
|
| 334 |
-
|
| 335 |
|
| 336 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 337 |
|
| 338 |
-
|
| 339 |
|
| 340 |
-
###
|
| 341 |
|
| 342 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 343 |
|
| 344 |
-
|
| 345 |
|
| 346 |
-
|
| 347 |
|
| 348 |
-
|
| 349 |
|
| 350 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 351 |
|
| 352 |
-
|
| 353 |
|
| 354 |
-
|
| 355 |
-
|
| 356 |
-
|
| 357 |
-
- ํ๋ exact gate๋ ์ ํจํ์ง๋ง, ์ฐ์์ teacher ํํ๊ตฐ์ด ํ๋ฆฌ๋ฉด ์ญํ head๊ฐ ๋ณต๊ตฌํ ์ ์๋ค.
|
| 358 |
-
- R-track formula adapter๋ validation ํํ๊ตฐ 93.30%๋ฅผ ๋ฌ์ฑํ์ผ๋ official test 88.17%์ ๊ทธ์ณ ์ ํ ๊ฒ์ฆ์ ํต๊ณผํ์ง ๋ชปํ๋ค.
|
| 359 |
-
- ์น์ธ P ๊ณ ๋ฆฝ๊ธฐํธ ํฉ์ฑ ํ๋ proxy๋ layout SMD ์ต๋ 2.82์ uppercase recall ํ๋ฝ ๋๋ฌธ์ ๊ธฐ๊ฐํ๋ค.
|
| 360 |
-
- raster virtual-stroke ๊ฒฝ๋ก๋ digit/Greek slice์์๋ ๊ฐ์ ๋์ง๋ง 378-label release gate๋ฅผ ํต๊ณผํ์ง ๋ชปํ๋ค.
|
| 361 |
-
- boundary/behavior/formula adapter๋ CROHME R-track ํ์ต๋ฌผ์ด๋ฏ๋ก ์ ํ weight๋ก distillํ ์ ์๋ค.
|
| 362 |
-
- P boundary auxiliary/joint๋ shared-state ์ ์ ํ ์ธ seed release gate๋ฅผ ์คํจํด checkpoint๋ฅผ ์ฒ ํํ๋ค.
|
| 363 |
-
- Device stress๋ ์ฑํ๋์ง ์์ shadow auxiliary์ software perturbation ๊ฒฐ๊ณผ์ด๋ฉฐ ์ค์ stylus/device-disjoint ์ฑ๋ฅ ๊ทผ๊ฑฐ๊ฐ ์๋๋ค.
|
| 364 |
-
- Android LiteRT ๋ณํ, PyTorch/LiteRT logit parity, ์ ๊ฐยท์ค๊ธยท๊ณ ๊ธ ๊ธฐ๊ธฐ benchmark๊ฐ ๋จ์ ์๋ค.
|
| 365 |
|
| 366 |
-
|
| 367 |
|
| 368 |
-
|
| 369 |
|
| 370 |
-
|
| 371 |
-
- UJI/Pendigits ๊ณ์ด: ๊ฐ ์ ์ถ์ฒ ์กฐ๊ฑด์ ๋ณ๋๋ก ๋ฐ๋ผ์ผ ํจ
|
| 372 |
-
- CROHME/MathWriting: ๋น์์
R-track ํ๊ฐ ๋๋ ์ฐ๊ตฌ head์๋ง ์ฌ์ฉ
|
| 373 |
-
- checkpoint์ report๋ ํ์ฌ **research-only / non-commercial** ๊ณต๊ฐ๋ฌผ์ด๋ค.
|
| 374 |
-
- ์์ฉ checkpoint๋ ๊ถ๋ฆฌ ๊ฒํ ๋ฅผ ํต๊ณผํ P-track ๋ฐ์ดํฐ๋ก ์ฒ์๋ถํฐ ์ฌํ์ตํด์ผ ํ๋ค.
|
| 375 |
|
| 376 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 377 |
|
| 378 |
-
|
| 379 |
|
| 380 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 381 |
|
| 382 |
## ์ฐ๊ตฌ ์๋ฃ
|
| 383 |
|
| 384 |
-
- ์ ์ฒด ๊ธฐ์ ๋ณด๊ณ ์
|
| 385 |
-
-
|
| 386 |
-
- 3-seed
|
| 387 |
-
-
|
| 388 |
-
-
|
| 389 |
-
-
|
| 390 |
-
-
|
| 391 |
-
-
|
| 392 |
-
-
|
| 393 |
-
- ํ๋ exact gate 3-seed: [`reports/behavior_exact_gate_3seed.json`](reports/behavior_exact_gate_3seed.json)
|
| 394 |
-
- ์์ context ๊ณ์ฝ ๊ฐ์ฌ: [`reports/formula_context_contract_3seed.json`](reports/formula_context_contract_3seed.json)
|
| 395 |
-
- R-track ์์ ์ด๋ํฐ 3-seed: [`reports/formula_adapter_h64_3seed_summary.json`](reports/formula_adapter_h64_3seed_summary.json)
|
| 396 |
-
- P ํฉ์ฑ ํ๋ proxy seed-17 ์คํจ: [`reports/behavior_role_p_proxy_w035_seed17.json`](reports/behavior_role_p_proxy_w035_seed17.json)
|
| 397 |
-
- P ํฉ์ฑ ๋ฐฐ์น ๋ถํฌ ๊ฐ์ฌ: [`reports/p_proxy_shift_seed17.json`](reports/p_proxy_shift_seed17.json)
|
| 398 |
-
- LiteRT Colab notebook: [`colab/AIFlow_Math_Ink_06_LiteRT.ipynb`](colab/AIFlow_Math_Ink_06_LiteRT.ipynb)
|
| 399 |
-
- ์ค์ P formula schema: [`contracts/aiflow_p_formula_v1.schema.json`](contracts/aiflow_p_formula_v1.schema.json)
|
| 400 |
-
- P formula ์ฌ๋ annotation schema: [`contracts/aiflow_p_formula_annotation_v1.schema.json`](contracts/aiflow_p_formula_annotation_v1.schema.json)
|
| 401 |
-
- P-only formula ํ์ต recipe: [`configs/MATH-INK-06-P-FORMULA-v1.json`](configs/MATH-INK-06-P-FORMULA-v1.json)
|
| 402 |
-
- P-only formula student distiller: [`scripts/distill_math_ink_06_p_formula_student.py`](scripts/distill_math_ink_06_p_formula_student.py)
|
| 403 |
-
- P-only formula student exporter: [`scripts/export_math_ink_06_p_formula_student.py`](scripts/export_math_ink_06_p_formula_student.py)
|
| 404 |
-
- Fail-closed P release driver: [`scripts/run_math_ink_06_p_formula_release.py`](scripts/run_math_ink_06_p_formula_release.py)
|
| 405 |
-
- Android ODA runtime source: [`android/README.md`](android/README.md)
|
| 406 |
-
- ํ์ผ checksum: [`MANIFEST.json`](MANIFEST.json)
|
|
|
|
| 16 |
|
| 17 |
# AIFlow Math Ink 0.6
|
| 18 |
|
| 19 |
+
AIFlow Math Ink 0.6์ ์ํ ํ๊ธฐ๋ฅผ **์ด๋ฏธ์ง๋ณด๋ค stroke trajectory๋ก ๋จผ์ ํด์ํ๋** PyTorch ์ฐ๊ตฌ ๋ชจ๋ธ์ด๋ค.
|
| 20 |
|
| 21 |
+
์จ๋ผ์ธ ํ ์
๋ ฅ์ ์๊ฐ ์์๊ฐ ์๋ point sequence๋ก ํํํ๊ณ , ๊ฐ ๊ณ ๋ฆฝ ๊ธฐํธ์ ๋ํด ๋ค์ ๋ ์ข
๋ฅ์ ํ๋ฅ ์ ์์ธกํ๋ค.
|
| 22 |
+
|
| 23 |
+
- 378๊ฐ exact symbol label
|
| 24 |
+
- 324๊ฐ visual family
|
| 25 |
+
|
| 26 |
+
ํต์ฌ ์ฐ๊ตฌ ์ฃผ์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
|
| 27 |
+
|
| 28 |
+
1. ์๋ก ๋ค๋ฅธ ํ๊ธฐ ์๋๋ฅผ ์ผ์ ํ temporal representation์ผ๋ก ์ ๊ทํํ๋ ๋ฐฉ๋ฒ
|
| 29 |
+
2. ์จ๋ผ์ธ stroke์ raster ์ด๋ฏธ์ง๋ฅผ ํ๋์ trajectory encoder๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
|
| 30 |
+
3. ์๊ฐ์ ์ผ๋ก ์ ์ฌํ ๊ธฐํธ์ ํํ์ ์๋ฏธ๋ฅผ ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ
|
| 31 |
+
4. ๊ธฐํธ ๋ถ๋ฅ์ ์์ ๋ฌธ๋งฅ์ ๊ฒฐํฉํ๋ ๋ฐฉ๋ฒ
|
| 32 |
|
| 33 |

|
| 34 |
|
| 35 |
+
## ์ฐ๊ตฌ ์์ด๋์ด
|
| 36 |
|
| 37 |
+
### 1. Trajectory-first representation
|
| 38 |
|
| 39 |
+
์ผ๋ฐ์ ์ธ ์ด๋ฏธ์ง ๋ถ๋ฅ ๋ฐฉ์์ ํ๊ธฐ๋ฅผ ๊ณ ์ ๋ bitmap์ผ๋ก ๋ณํํ๋ฉด์ stroke ์์์ ์๊ฐ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ๋ค.
|
| 40 |
+
|
| 41 |
+
AIFlow Math Ink๋ ํ๊ธฐ๋ฅผ ๋ค์๊ณผ ๊ฐ์ ์๊ณ์ด๋ก ํํํ๋ค.
|
|
|
|
|
|
|
|
|
|
| 42 |
|
| 43 |
+
```text
|
| 44 |
+
pointโ โ pointโ โ pointโ โ ... โ pen-up
|
| 45 |
+
```
|
| 46 |
|
| 47 |
+
๊ฐ point์๋ ์์น๋ฟ ์๋๋ผ ๋ค์ ์ ๋ณด๊ฐ ํฌํจ๋๋ค.
|
| 48 |
|
| 49 |
+
- ์ด๋ ๋ฐฉํฅ
|
| 50 |
+
- ๊ณก๋ฅ
|
| 51 |
+
- ํ๊ธฐ ์๋
|
| 52 |
+
- stroke ๋ด๋ถ ์งํ๋ฅ
|
| 53 |
+
- pen-up ์ํ
|
| 54 |
+
- ์ ์ฒด ๊ธฐํธ ์์์์ ์๋ ์์น
|
| 55 |
+
- timestamp ๊ด์ธก ์ฌ๋ถ
|
| 56 |
|
| 57 |
+
์ด ํํ์ ๊ฐ์ ๋ชจ์์ด๋ผ๋ stroke ์์์ ์์ง์์ด ๋ค๋ฅธ ํ๊ธฐ๋ฅผ ๊ตฌ๋ถํ ์ ์๊ฒ ํ๋ค.
|
| 58 |
|
| 59 |
+
### 2. Canonical temporal sampling
|
| 60 |
|
| 61 |
+
์ฌ๋๋ง๋ค ํ๊ธฐ ์๋์ touch event ๋ฐ์ ๋น๋๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์๋ณธ event ๊ฐ์๋ ์ผ์ ํ์ง ์๋ค.
|
| 62 |
|
| 63 |
+
๋ชจ๋ธ์ ๊ฐ stroke๋ฅผ 6Hz canonical timeline์ผ๋ก ์ฌํ๋ณธํํ๋ค. ์ด๋ ๋ค์ anchor๋ ํญ์ ๋ณด์กดํ๋ค.
|
|
|
|
|
|
|
|
|
|
|
|
|
| 64 |
|
| 65 |
+
- stroke ์์์
|
| 66 |
+
- stroke ๋์
|
| 67 |
+
- pen-up
|
| 68 |
+
- ์๋ณธ timestamp
|
| 69 |
+
|
| 70 |
+
์ด๋ฅผ ํตํด ๋น ๋ฅด๊ฒ ์ด ๊ธฐํธ์ ๋๋ฆฌ๊ฒ ์ด ๊ธฐํธ๋ฅผ ๋น์ทํ temporal scale์์ ๋น๊ตํ ์ ์๋ค.
|
| 71 |
|
| 72 |
```text
|
| 73 |
+
Raw touch events
|
| 74 |
+
โ stroke anchor preservation
|
| 75 |
+
โ 6 Hz canonical sampling
|
| 76 |
+
โ maximum 128 events
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
```
|
| 78 |
|
| 79 |
+
์๋ณธ touch event๋ ๊ทธ๋๋ก ์ ์งํ๊ณ , ์ฌํ๋ณธํ๋ sequence๋ ๋ชจ๋ธ ์
๋ ฅ์ฉ view๋ก ์ฌ์ฉํ๋ค.
|
|
|
|
|
|
|
| 80 |
|
| 81 |
+
### 3. Shape coordinate์ canvas coordinate์ ๋ถ๋ฆฌ
|
| 82 |
+
|
| 83 |
+
๊ธฐํธ์ ๋ชจ์๊ณผ ์์ ์์์์ ์์น๋ ์๋ก ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ค.
|
| 84 |
+
|
| 85 |
+
AIFlow Math Ink๋ ๋ ์ขํ๊ณ๋ฅผ ๋๏ฟฝ๏ฟฝ๏ฟฝ์ ์ฌ์ฉํ๋ค.
|
| 86 |
|
| 87 |
```text
|
| 88 |
+
shape_x, shape_y
|
| 89 |
+
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 90 |
|
| 91 |
+
๊ธฐํธ ์์ฒด์ bounding box๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๊ทํํ ์ขํ๋ค. ๊ธ์์ ํฌ๊ธฐ์ ์์น ์ํฅ์ ์ค์ด๊ณ ์์ํ ํํ๋ฅผ ํํํ๋ค.
|
|
|
|
|
|
|
| 92 |
|
| 93 |
+
```text
|
| 94 |
+
canvas_x, canvas_y
|
|
|
|
| 95 |
```
|
| 96 |
|
| 97 |
+
์ ์ฒด canvas ๋๋ ์์ ์์ญ์ ๊ธฐ์ค์ผ๋ก ํ ์ขํ๋ค. ๊ธฐํธ์ ์๋ ํฌ๊ธฐ์ ์์ง ์์น๋ฅผ ๋ณด์กดํ๋ค.
|
| 98 |
+
|
| 99 |
+
์๋ฅผ ๋ค์ด ์๋ฌธ์ `x`, ๋๋ฌธ์ `X`, ๊ณฑ์
๊ธฐํธ `ร`๋ ๋ชจ์์ด ๋น์ทํ์ง๋ง ์์ ์์์์ ํฌ๊ธฐ์ ์์น ๋ถํฌ๊ฐ ๋ค๋ฅผ ์ ์๋ค. ๋ ์ขํ๊ณ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ฉด ํํ์ ๋ฌธ๋งฅ์ ๋ถ๋ฆฌํด ํ์ตํ ์ ์๋ค.
|
| 100 |
+
|
| 101 |
+
### 4. Online๊ณผ raster์ ๊ณตํต trajectory space
|
| 102 |
|
| 103 |
+
์จ๋ผ์ธ ์
๋ ฅ์๋ stroke sequence๊ฐ ์ง์ ์กด์ฌํ์ง๋ง, raster ์ด๋ฏธ์ง์๋ stroke ์์๊ฐ ์๋ค.
|
| 104 |
|
| 105 |
+
Raster ๊ฒฝ๋ก๋ ์ด๋ฏธ์ง๋ฅผ ๊ณง๋ฐ๋ก symbol label๋ก ๋ถ๋ฅํ๋ ๋์ , ์ด๋ฏธ์ง์์ ์ฌ๋ฌ ๊ฐ์ virtual trajectory๋ฅผ ์์ฑํ๋ค.
|
| 106 |
|
| 107 |
```text
|
| 108 |
+
Raster image
|
| 109 |
+
โ spatial encoder
|
| 110 |
+
โ virtual-trajectory decoder
|
| 111 |
+
โ top-4 stroke hypotheses
|
| 112 |
+
โ shared trajectory encoder
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 113 |
```
|
| 114 |
|
| 115 |
+
๊ฐ hypothesis๋ ๋ค์ ์ ๋ณด๋ฅผ ํฌํจํ๋ค.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 116 |
|
| 117 |
+
- virtual stroke coordinates
|
| 118 |
+
- stroke state
|
| 119 |
+
- progress
|
| 120 |
+
- hypothesis score
|
| 121 |
|
| 122 |
+
์ดํ ์จ๋ผ์ธ ์
๋ ฅ๊ณผ ๋์ผํ residual TCN์ด virtual trajectory๋ฅผ ์ฒ๋ฆฌํ๋ค.
|
| 123 |
|
| 124 |
+
์ด ๊ตฌ์กฐ์ ๋ชฉ์ ์ ์
๋ ฅ modality๊ฐ ๋ฌ๋ผ๋ ์ต์ข
์ธ์์ ๋์ผํ trajectory representation ์์์ ์ํํ๋ ๊ฒ์ด๋ค.
|
| 125 |
|
| 126 |
+
### 5. Exact label๊ณผ visual family์ ๊ณ์ธต์ ์์ธก
|
|
|
|
|
|
|
| 127 |
|
| 128 |
+
์ํ ๊ธฐํธ์๋ ํํ๊ฐ ๊ฑฐ์ ๋์ผํ์ง๋ง ์๋ฏธ๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
|
| 129 |
|
| 130 |
+
์:
|
|
|
|
|
|
|
| 131 |
|
| 132 |
+
```text
|
| 133 |
+
O / 0 / o
|
| 134 |
+
x / X / ร
|
| 135 |
+
| / 1 / l
|
|
|
|
| 136 |
```
|
| 137 |
|
| 138 |
+
๋ชจ๋ธ์ ์ด๋ฅผ ํ๋์ ๋ถ๋ฅ ๋ฌธ์ ๋ก๋ง ๋ค๋ฃจ์ง ์๊ณ ๋ ๊ฐ์ prediction head๋ก ๋๋๋ค.
|
| 139 |
|
| 140 |
+
```text
|
| 141 |
+
Shared trajectory representation
|
| 142 |
+
โโ exact head: 378 labels
|
| 143 |
+
โโ family head: 324 visual families
|
| 144 |
+
```
|
| 145 |
|
| 146 |
+
Exact head๋ ์ต์ข
symbol token์ ์์ธกํ๋ค.
|
|
|
|
|
|
|
|
|
|
| 147 |
|
| 148 |
+
Family head๋ ์๊ฐ์ ์ผ๋ก ๊ฐ๊น์ด ๊ธฐํธ ์งํฉ์ ์์ธกํ๋ค. ์ด๋ฅผ ํตํด trajectory encoder๊ฐ ํํ๋ฅผ ๋จผ์ ์์ ์ ์ผ๋ก ๊ตฌ๋ถํ๊ณ , ์ ํํ ์๋ฏธ ์ ํ์ ๋ณ๋์ ๋ฌธ๋งฅ ์ ๋ณด์ ๊ฒฐํฉํ ์ ์๋ค.
|
| 149 |
+
|
| 150 |
+
### 6. Formula-context behavior modeling
|
| 151 |
+
|
| 152 |
+
๊ณ ๋ฆฝ ๊ธฐํธ์ trajectory๋ง์ผ๋ก ๊ตฌ๋ถํ๊ธฐ ์ด๋ ค์ด ๊ธฐํธ์๋ ์์ ๋ฌธ๋งฅ์ ์ถ๊ฐํ๋ค.
|
| 153 |
+
|
| 154 |
+
Behavior head๋ ๋ค์ ๋ ํํ์ ๊ฒฐํฉํ๋ค.
|
| 155 |
+
|
| 156 |
+
```text
|
| 157 |
+
128ร19 stroke representation
|
| 158 |
+
+
|
| 159 |
+
49-dimensional formula context
|
| 160 |
```
|
| 161 |
|
| 162 |
+
Context feature์๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๊ฐ ํฌํจ๋๋ค.
|
| 163 |
|
| 164 |
+
- ์์ ์ ์ฒด ํฌ๊ธฐ ๋๋น ๊ธฐํธ ํฌ๊ธฐ
|
| 165 |
+
- baseline๊ณผ์ ์๋ ์์น
|
| 166 |
+
- ์ฃผ๋ณ ๊ธฐํธ์ ์์น์ ๊ฐ๊ฒฉ
|
| 167 |
+
- symbol group geometry
|
| 168 |
+
- ์ด์ token ํจํด
|
| 169 |
|
| 170 |
+
ํ์ฌ behavior head์ ๋ํ ์ญํ ๋ถ๋ฅ๋ ๋ค์๊ณผ ๊ฐ๋ค.
|
| 171 |
|
| 172 |
+
```text
|
| 173 |
+
identifier_lower
|
| 174 |
+
identifier_upper
|
| 175 |
+
multiply_operator
|
| 176 |
+
```
|
| 177 |
|
| 178 |
+
์๋ฅผ ๋ค์ด `x`, `X`, `ร`์ trajectory๊ฐ ๋น์ทํ ๋, ๊ธฐํธ์ ์๋ ํฌ๊ธฐ์ ์ฃผ๋ณ token์ ์ด์ฉํด ์ญํ ์ ์ ํํ๋ค.
|
|
|
|
|
|
|
|
|
|
| 179 |
|
| 180 |
+
### 7. Boundary behavior modeling
|
| 181 |
|
| 182 |
+
์์ ์ธ์์์๋ ์ฌ๋ฌ stroke๋ฅผ ํ๋์ ๊ธฐํธ๋ก ๋ฌถ๋ grouping ๊ณผ์ ์ด ํ์ํ๋ค.
|
| 183 |
|
| 184 |
+
Boundary behavior head๋ segmentation candidate๊ฐ ์ค์ ๊ธฐํธ ๊ฒฝ๊ณ๋ฅผ ๊ฐ๋ก์ง๋ฅด๋์ง๋ฅผ geometry feature๋ก ์์ธกํ๋ค.
|
| 185 |
|
| 186 |
+
```text
|
| 187 |
+
Segmentation lattice geometry
|
| 188 |
+
โ 17-dimensional boundary features
|
| 189 |
+
โ boundary behavior score
|
| 190 |
+
```
|
|
|
|
|
|
|
|
|
|
| 191 |
|
| 192 |
+
์ด score๋ ๊ฐ๊น์ด ์๋ ๋ ๊ธฐํธ๊ฐ ํ๋์ symbol group์ผ๋ก ํฉ์ณ์ง๋ overmerge๋ฅผ ์ต์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
|
| 193 |
|
| 194 |
+
## ์
๋ ฅ ํํ
|
| 195 |
|
| 196 |
+
๋ชจ๋ธ ์
๋ ฅ์ ์ต๋ 128๊ฐ์ event์ 19๊ฐ์ feature๋ก ๊ตฌ์ฑ๋๋ค.
|
| 197 |
|
| 198 |
+
```text
|
| 199 |
+
input shape: 128 ร 19
|
| 200 |
+
sample rate: 6 Hz
|
| 201 |
+
normalized ink space: 128 ร 128
|
| 202 |
+
```
|
|
|
|
|
|
|
| 203 |
|
| 204 |
+

|
| 205 |
|
| 206 |
+
### 19 input channels
|
| 207 |
|
| 208 |
+
```text
|
| 209 |
+
shape_x, shape_y,
|
| 210 |
+
canvas_x, canvas_y,
|
| 211 |
+
direction_x, direction_y,
|
| 212 |
+
curvature, pen_up, stroke_progress,
|
| 213 |
+
aspect_ratio,
|
| 214 |
+
bbox_top, bbox_bottom, bbox_height, center_y,
|
| 215 |
+
baseline_available,
|
| 216 |
+
time_delta, speed, missing_mask, source_modality
|
| 217 |
+
```
|
| 218 |
|
| 219 |
+
| Feature group | ์ญํ |
|
| 220 |
+
|---|---|
|
| 221 |
+
| `shape_x`, `shape_y` | ๊ธฐํธ ๋ด๋ถ์ ์ ๊ทํ๋ ํํ |
|
| 222 |
+
| `canvas_x`, `canvas_y` | ์ ์ฒด canvas ์์์์ ์๋ ์์น |
|
| 223 |
+
| `direction_x`, `direction_y` | point ์ด๋ ๋ฐฉํฅ |
|
| 224 |
+
| `curvature` | stroke์ ๊ตญ์ ๊ณก๋ฅ |
|
| 225 |
+
| `pen_up` | stroke ๊ฒฝ๊ณ |
|
| 226 |
+
| `stroke_progress` | stroke ์์๋ถํฐ ๋๊น์ง์ ์งํ๋ |
|
| 227 |
+
| `aspect_ratio` | ๊ธฐํธ bounding box ๋น์จ |
|
| 228 |
+
| `bbox_*`, `center_y` | ์์ ์์์์ geometry |
|
| 229 |
+
| `baseline_available` | baseline feature์ ์ ํจ์ฑ |
|
| 230 |
+
| `time_delta`, `speed` | temporal dynamics |
|
| 231 |
+
| `missing_mask` | ๊ด์ธก๋์ง ์์ ์๊ฐ ์ ๋ณด ํ์ |
|
| 232 |
+
| `source_modality` | online ๋๋ raster ์
๋ ฅ ๊ตฌ๋ถ |
|
| 233 |
+
|
| 234 |
+
Timestamp๊ฐ ์กด์ฌํ๋ ์
๋ ฅ์ ๊ด์ธก๋ ์๊ฐ ์ฐจ์ด์ ์๋๋ฅผ ์ฌ์ฉํ๋ค. ์ ์ ์ด๋ฏธ์ง์์ ์์ฑ๋ virtual trajectory๋ canonical timing๊ณผ missingness ์ ๋ณด๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ค.
|
| 235 |
|
| 236 |
+
## ๋ชจ๋ธ ๊ตฌ์กฐ
|
| 237 |
|
| 238 |
+
```text
|
| 239 |
+
Online strokes
|
| 240 |
+
โ canonical sampler
|
| 241 |
+
โ 128ร19 sequence
|
| 242 |
+
โ dual-TCN online adapter
|
| 243 |
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 244 |
+
โ
|
| 245 |
+
Raster 128ร128 โ
|
| 246 |
+
โ spatial encoder โ
|
| 247 |
+
โ causal virtual-trajectory decoder โ
|
| 248 |
+
โ top-4 trajectory hypotheses โ
|
| 249 |
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
| 250 |
+
โผ
|
| 251 |
+
shared residual TCN
|
| 252 |
+
โโ exact head
|
| 253 |
+
โโ visual-family head
|
| 254 |
+
```
|
| 255 |
|
| 256 |
+
์ฃผ์ ์ค์ :
|
| 257 |
|
| 258 |
+
| ํญ๋ชฉ | ๊ฐ |
|
| 259 |
+
|---|---:|
|
| 260 |
+
| Maximum events | 128 |
|
| 261 |
+
| Input features | 19 |
|
| 262 |
+
| Shared hidden size | 128 |
|
| 263 |
+
| Exact labels | 378 |
|
| 264 |
+
| Visual families | 324 |
|
| 265 |
+
| Raster hypotheses | 4 |
|
| 266 |
+
| Canonical sample rate | 6Hz |
|
| 267 |
|
| 268 |
+
### Dual-TCN online adapter
|
| 269 |
|
| 270 |
+
์จ๋ผ์ธ ์
๋ ฅ์ ๋ ์ข
๋ฅ์ temporal pattern์ ํจ๊ป ์ฒ๋ฆฌํ๋ค.
|
| 271 |
+
|
| 272 |
+
- ๊ธฐํธ ์ ์ฒด์ ๊ธด stroke ํ๋ฆ
|
| 273 |
+
- point ์ฌ์ด์ ์งง์ ๊ตญ์ ๋ณํ
|
|
|
|
|
|
|
| 274 |
|
| 275 |
+
Dual-TCN adapter๋ ์๋ก ๋ค๋ฅธ receptive field๋ฅผ ๊ฐ์ง temporal convolution์ ๊ฒฐํฉํด ์ด ๋ ํจํด์ ํํํ๋ค.
|
| 276 |
|
| 277 |
+
Adapter์ shared state๋ base trajectory encoder์ ํจ๊ป ํฉ์ฑ๋๋ค.
|
| 278 |
|
| 279 |
+
```text
|
| 280 |
+
base trajectory state
|
| 281 |
+
โ online shared state
|
| 282 |
+
โ modality-specific adaptation
|
| 283 |
+
โ classifier heads
|
| 284 |
+
```
|
| 285 |
|
| 286 |
+
## Checkpoints
|
| 287 |
|
| 288 |
+
๊ฐ seed๋ ๋ค์ ์ธ ํ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
|
| 289 |
|
| 290 |
+
```text
|
| 291 |
+
models/
|
| 292 |
+
seed17/
|
| 293 |
+
base_378.pt
|
| 294 |
+
online_adapter.pt
|
| 295 |
+
behavior_role_head.pt
|
| 296 |
+
seed31/
|
| 297 |
+
base_378.pt
|
| 298 |
+
online_adapter.pt
|
| 299 |
+
behavior_role_head.pt
|
| 300 |
+
seed47/
|
| 301 |
+
base_378.pt
|
| 302 |
+
online_adapter.pt
|
| 303 |
+
behavior_role_head.pt
|
| 304 |
+
```
|
| 305 |
|
| 306 |
+
| ํ์ผ | ๋ด์ฉ |
|
| 307 |
+
|---|---|
|
| 308 |
+
| `base_378.pt` | ๊ณตํต trajectory encoder, raster encoder, exact/family classifier |
|
| 309 |
+
| `online_adapter.pt` | ์ค์ online stroke์ ๋ํ dual-TCN adaptation |
|
| 310 |
+
| `behavior_role_head.pt` | ๊ธฐํธ์ ์์ ๋ด ์ญํ ์ ๋ถ๋ฅํ๋ context head |
|
| 311 |
|
| 312 |
+
์ธ seed๋ ์๋ก ๋ค๋ฅธ ์ด๊ธฐํ์์ ํ์ต๋์ด ๋ชจ๋ธ ๊ฐ ์ค๋ฅ ํฉ์์ ensemble ํน์ฑ์ ๋ถ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
|
| 313 |
|
| 314 |
+
## ์ฌ์ฉ ์์
|
| 315 |
|
| 316 |
+
```python
|
| 317 |
+
from pathlib import Path
|
| 318 |
+
from math_grid_drawer.research.math_ink_06 import MathInk06Engine
|
|
|
|
|
|
|
|
|
|
|
|
|
| 319 |
|
| 320 |
+
root = Path("models/seed17")
|
| 321 |
|
| 322 |
+
engine = MathInk06Engine(
|
| 323 |
+
root / "base_378.pt",
|
| 324 |
+
adapter_checkpoint=root / "online_adapter.pt",
|
| 325 |
+
)
|
| 326 |
|
| 327 |
+
result = engine.recognize_online(
|
| 328 |
+
strokes,
|
| 329 |
+
canvas_width=128,
|
| 330 |
+
canvas_height=128,
|
| 331 |
+
top_k=5,
|
| 332 |
+
)
|
| 333 |
+
```
|
| 334 |
|
| 335 |
+
์ถ๋ ฅ์๋ exact symbol ํ๋ณด์ ๊ฐ ํ๋ณด์ ํ๋ฅ ์ด ํฌํจ๋๋ค.
|
| 336 |
|
| 337 |
+
```python
|
| 338 |
+
for candidate in result.candidates:
|
| 339 |
+
print(candidate.token, candidate.probability)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 340 |
```
|
| 341 |
|
| 342 |
+
## ์ฐ๊ตฌ ๊ฒฐ๊ณผ
|
| 343 |
|
| 344 |
+
### ๊ณ ๋ฆฝ ๊ธฐํธ trajectory classification
|
| 345 |
|
| 346 |
+
Seed 17์ writer-disjoint ํ๊ฐ ๊ฒฐ๊ณผ:
|
| 347 |
|
| 348 |
+
| Split | Exact top-1 | Exact top-5 | Family top-1 |
|
| 349 |
+
|---|---:|---:|---:|
|
| 350 |
+
| Writer validation, 4,261 samples | 86.13% | 99.48% | 92.94% |
|
| 351 |
+
| Paired test, 3,782 samples | 82.87% | 97.73% | 91.22% |
|
| 352 |
|
| 353 |
+
์ธ seed์ ํ๋ฅ ์ ํ๊ท ํ ensemble ๊ฒฐ๊ณผ:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 354 |
|
| 355 |
+
| Metric | Result |
|
| 356 |
+
|---|---:|
|
| 357 |
+
| Exact top-1 | 83.71% |
|
| 358 |
+
| Exact top-5 | 98.02% |
|
| 359 |
+
| Visual-family top-1 | 92.99% |
|
| 360 |
+
| Seed oracle top-1 | 88.05% |
|
| 361 |
+
|
| 362 |
+
Exact top-1๊ณผ family top-1์ ์ฐจ์ด๋ ์ ์ฒด์ ์ธ ํํ ์ธ์๋ณด๋ค ๋์ผ family ๋ด๋ถ์ ์๋ฏธ ์ ํ์ด ๋ ์ด๋ ค์ด ๋ฌธ์ ์์ ๋ณด์ฌ์ค๋ค.
|
| 363 |
+
|
| 364 |
+
Exact ์ค๋ฅ์ 56.98%๋ ๋ค์๊ณผ ๊ฐ์ ๋์ผ visual-family ๋ด๋ถ ํผ๋์ด์๋ค.
|
| 365 |
|
| 366 |
+
```text
|
| 367 |
+
O / 0 / o
|
| 368 |
+
uppercase / lowercase
|
| 369 |
+
vertical-line family
|
| 370 |
+
cross family
|
|
|
|
|
|
|
| 371 |
```
|
| 372 |
|
| 373 |
+
์ด ๊ฒฐ๊ณผ๋ trajectory encoder๊ฐ ํํ ํ๋ณด๋ฅผ ๋ง๋ค๊ณ , formula context๊ฐ ์ต์ข
์๋ฏธ๋ฅผ ์ ํํ๋ ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๋ท๋ฐ์นจํ๋ค.
|
| 374 |
|
| 375 |
+
### Formula-context behavior head
|
| 376 |
|
| 377 |
+
์ ๋ต symbol grouping ์์์ ํ๊ฐํ 3-seed ํ๊ท :
|
| 378 |
+
|
| 379 |
+
| Metric | Result |
|
| 380 |
+
|---|---:|
|
| 381 |
+
| Role accuracy | 93.33% |
|
| 382 |
+
| Macro-F1 | 76.41% |
|
| 383 |
+
| Lowercase identifier recall | 95.66% |
|
| 384 |
+
| Uppercase identifier recall | 55.91% |
|
| 385 |
+
| Multiplication recall | 88.89% |
|
| 386 |
+
| Expected calibration error | 4.88% |
|
| 387 |
+
|
| 388 |
+
Behavior head๋ฅผ teacher prediction ๋ค์ ์ ์ฉํ์ ๋ ๋์ ๊ธฐํธ์ exact top-1์ ๋ค์๊ณผ ๊ฐ์ด ๋ณํํ๋ค.
|
| 389 |
|
| 390 |
```text
|
| 391 |
+
33.65% โ 47.30%
|
|
|
|
|
|
|
|
|
|
| 392 |
```
|
| 393 |
|
| 394 |
+
ํ๊ท ์์น ํญ์ `13.65%p`์์ผ๋ฉฐ rewrite precision์ `81.35%`์๋ค.
|
| 395 |
|
| 396 |
+
์ด ์คํ์ trajectory๋ง์ผ๋ก ์ ํํ๊ธฐ ์ด๋ ค์ด exact meaning์ ์์ ๋ฌธ๋งฅ์ด ๋ณด์ํ ์ ์์์ ๋ณด์ฌ์ค๋ค.
|
| 397 |
|
| 398 |
+
### Continuous-formula adaptation
|
| 399 |
|
| 400 |
+
Product trajectory encoder์ online adapter๋ฅผ ๊ณ ์ ํ๊ณ , ์ฐ์ ์์์ symbol group์ ์์ formula adapter๋ฅผ ์ถ๊ฐํ๋ค.
|
| 401 |
|
| 402 |
+
```text
|
| 403 |
+
Frozen trajectory encoder
|
| 404 |
+
+ frozen online adapter
|
| 405 |
+
+ hidden-64 formula adapter
|
| 406 |
+
```
|
| 407 |
|
| 408 |
+
3-seed ํ๊ท ๊ฒฐ๊ณผ:
|
| 409 |
|
| 410 |
+
| Metric | Mean |
|
| 411 |
+
|---|---:|
|
| 412 |
+
| Writer-validation exact top-1 | 85.19% |
|
| 413 |
+
| Writer-validation family top-1 | 93.30% |
|
| 414 |
+
| Official-test exact top-1 | 82.38% |
|
| 415 |
+
| Official-test family top-1 | 88.17% |
|
| 416 |
|
| 417 |
+
์์ adapter๋ง์ผ๋ก๋ ๊ณ ๋ฆฝ ๊ธฐํธ encoder์ representation์ ์ฐ์ ์์ ํ๊ฒฝ์ ๋ง๊ฒ ์กฐ์ ํ ์ ์์์ ํ์ธํ๋ค.
|
| 418 |
|
| 419 |
+
### Grouping boundary head
|
| 420 |
|
| 421 |
+
| Metric | Base grouping | Boundary head |
|
| 422 |
+
|---|---:|---:|
|
| 423 |
+
| Exact partition | 60.04% | 60.25% |
|
| 424 |
+
| Pair-F1 | 91.07% | 91.26% |
|
| 425 |
+
| Overmerge formula rate | 21.72% | 20.49% |
|
| 426 |
|
| 427 |
+
Boundary head๋ ๊ธฐํธ ์ฌ์ด์ geometry๋ฅผ ์ด์ฉํด ์ธ์ symbol์ ๊ณผ๋ํ ๋ณํฉ์ ์ค์๋ค.
|
| 428 |
|
| 429 |
+
### Family fusion
|
| 430 |
|
| 431 |
+
Validation์์ exact probability์ family probability๋ฅผ ๊ฒฐํฉํ๋ fusion weight๋ฅผ ์ ํํ๋ค.
|
| 432 |
|
| 433 |
+
```text
|
| 434 |
+
exact score
|
| 435 |
+
+
|
| 436 |
+
0.15 ร family-consistency score
|
| 437 |
+
```
|
| 438 |
|
| 439 |
+
Paired test exact top-1:
|
| 440 |
|
| 441 |
+
```text
|
| 442 |
+
83.71% โ 83.82%
|
| 443 |
+
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 444 |
|
| 445 |
+
Family prediction์ exact classifier์ ํ๋ณด ์์๋ฅผ ์์ ๋ฒ์์์ ๋ณด์ ํ๋ ์ญํ ์ ํ๋ค.
|
| 446 |
|
| 447 |
+
## ์ฐ๊ตฌ ํด์
|
| 448 |
|
| 449 |
+
AIFlow Math Ink 0.6์ ์คํ์ ์ํ ํ๊ธฐ ์ธ์์ ๋ค์ ์ธ ๋จ๊ณ๋ก ๋ถ๋ฆฌํ ์ ์์์ ๋ณด์ฌ์ค๋ค.
|
|
|
|
|
|
|
|
|
|
|
|
|
| 450 |
|
| 451 |
+
```text
|
| 452 |
+
1. Stroke trajectory์์ ์๊ฐ์ ํํ๋ฅผ ์ถ์ถ
|
| 453 |
+
2. Visual family ์์์ ๊ฐ๋ฅํ symbol ํ๋ณด๋ฅผ ๊ตฌ์ฑ
|
| 454 |
+
3. ์์ ๋ฌธ๋งฅ๊ณผ geometry๋ก exact meaning์ ์ ํ
|
| 455 |
+
```
|
| 456 |
|
| 457 |
+
์ด ๊ตฌ์กฐ๋ ๊ณ ๋ฆฝ ๊ธฐํธ ์ธ์๊ณผ ์ ์ฒด ์์ ํด์์ ํ๋์ ๊ฑฐ๋ํ classifier๋ก ์ฒ๋ฆฌํ๋ ๋์ , ๊ฐ ๋จ๊ณ๊ฐ ์๋ก ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๋ด๋นํ๋๋ก ํ๋ค.
|
| 458 |
|
| 459 |
+
- Trajectory encoder: ํ๊ธฐ ๋์๊ณผ ํํ
|
| 460 |
+
- Family head: ์๊ฐ์ ์ ์ฌ์ฑ
|
| 461 |
+
- Behavior head: ๊ธฐํธ์ ๋ฌธ๋ฒ์ ์ญํ
|
| 462 |
+
- Boundary head: stroke grouping
|
| 463 |
+
- Formula adapter: ์์ ์์์์ ์๋ ํฌ๊ธฐ์ ์์น
|
| 464 |
|
| 465 |
## ์ฐ๊ตฌ ์๋ฃ
|
| 466 |
|
| 467 |
+
- [์ ์ฒด ๊ธฐ์ ๋ณด๊ณ ์](reports/RESEARCH_REPORT.md)
|
| 468 |
+
- [Federation audit](reports/FEDERATION_AUDIT_20260724.md)
|
| 469 |
+
- [3-seed behavior ๊ฒฐ๊ณผ](reports/behavior_role_3seed_summary.json)
|
| 470 |
+
- [Boundary ๊ฒฐ๊ณผ](reports/boundary_behavior_guard_report.json)
|
| 471 |
+
- [Online ์ค๋ฅ ํฉ์ ๋ถ์](reports/online_error_consensus_paired_test_3seed.json)
|
| 472 |
+
- [Family-fusion calibration](reports/online_family_fusion_calibration_3seed.json)
|
| 473 |
+
- [Formula-context ๊ณ์ฝ ๋ถ์](reports/formula_context_contract_3seed.json)
|
| 474 |
+
- [Formula adapter ๊ฒฐ๊ณผ](reports/formula_adapter_h64_3seed_summary.json)
|
| 475 |
+
- [Checkpoint manifest](MANIFEST.json)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|