File size: 2,800 Bytes
2948983
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
---
language:
  - ko
  - en
library_name: scikit-learn
license: other
tags:
  - handwriting
  - mathematical-expression-recognition
  - online-handwriting
  - segmentation
  - research
---

# AIFlow Math Ink 0.6 โ€” Intermediate Research Snapshot

์ด ์ €์žฅ์†Œ๋Š” AIFlow Math Ink 0.6์˜ **์ค‘๊ฐ„ R-track ์—ฐ๊ตฌ ์Šค๋ƒ…์ƒท**์ด๋‹ค. ์ „์ฒด LaTeX OCR ๋˜๋Š” ์ƒ์šฉ ODA ๋ชจ๋ธ์ด ์•„๋‹ˆ๋ฉฐ, ์ˆ˜์‹ stroke grouping๊ณผ ํ–‰๋™ ๋ฌธ๋งฅ ์‹คํ—˜์˜ ์žฌํ˜„ ์ž๋ฃŒ๋ฅผ ๋ณด์กดํ•œ๋‹ค.

## ์ด๋ฒˆ ์Šค๋ƒ…์ƒท์˜ ๊ฒฐ๋ก 

- protected multi-stroke family selector ๊ธฐ์ค€ CROHME official test exact partition: **60.04%**
- boundary behavior guard ์ ์šฉ exact partition: **60.25%**
- pair-F1: **91.07% โ†’ 91.26%**
- overmerge formula rate: **21.72% โ†’ 20.49%**
- validation์—์„œ ๊ณ ์ •ํ•œ boundary ์„ค์ •: probability threshold `0.5`, logit penalty weight `6.0`
- ์ „์ฒด ๋กœ์ปฌ Python ํšŒ๊ท€: **271 passed**

Boundary head๋Š” grouping ์ „์— ๋‹คํš ํ›„๋ณด๊ฐ€ ๋‘˜ ์ด์ƒ์˜ ์ •๋‹ต ๊ธฐํ˜ธ ๊ฒฝ๊ณ„๋ฅผ ์นจ๋ฒ”ํ•˜๋Š”์ง€ ์˜ˆ์ธกํ•œ๋‹ค. ๊ทœ์น™ํ˜• component competition๊ณผ ์ด๋ฏธ grouping๋œ partition ์ดํ›„์˜ local-baseline relation guard๋Š” ์ฑ„ํƒ๋˜์ง€ ์•Š์•˜๋‹ค.

## ๋””๋ ‰ํ„ฐ๋ฆฌ

- `artifacts/`: scikit-learn boundary ์—ฐ๊ตฌ head
- `reports/`: validation/test ์ง€ํ‘œ์™€ ์‹คํŒจ ๊ฐ์‚ฌ
- `scripts/`: ํ•™์Šตยทsweepยท๊ฐ์‚ฌ entry point
- `src/`: ์ด๋ฒˆ ์‹คํ—˜์— ์ง์ ‘ ๊ด€๋ จ๋œ selector/๊ด€๊ณ„ ์ฝ”๋“œ snapshot

## ์‚ฌ์šฉ ์ œํ•œ

์ด ์Šค๋ƒ…์ƒท์€ **์—ฐ๊ตฌ ์ „์šฉ**์ด๋‹ค.

- `boundary_behavior_guard.joblib`์€ CROHME ์ •๋‹ต grouping์œผ๋กœ ํ•™์Šต๋œ R-track ์‚ฐ์ถœ๋ฌผ์ด๋‹ค.
- ์ƒ์šฉ ์ œํ’ˆ, ๋ฐฐํฌ checkpoint, teacher ๋˜๋Š” distillation ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
- CROHME/HWRT ์›๋ณธ ๋ฐ์ดํ„ฐ, ํ•„๊ธฐ ํ‘œ๋ณธ, OCR cache๋Š” ์ด ์ €์žฅ์†Œ์— ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.
- ์ƒ์šฉ ์ „ํ™˜์€ ๋™์ผ boundary target์„ ์ƒ์šฉ ํ—ˆ์šฉ P-track ์—ฐ์†์‹ ๋ฐ์ดํ„ฐ๋กœ ๋‹ค์‹œ ํ•™์Šตํ•ด์•ผ ํ•œ๋‹ค.
- ๊ฐœ๋ณ„ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ์…‹์˜ ์› ๋ผ์ด์„ ์Šค์™€ ์‚ฌ์šฉ ์กฐ๊ฑด์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ„๋„๋กœ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

## ๋ณด์•ˆ ์ฃผ์˜

`joblib`/pickle ๊ณ„์—ด ํŒŒ์ผ์€ ์ž„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์ €์žฅ์†Œ์™€ ํŒŒ์ผ checksum์„ ์‹ ๋ขฐํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋งŒ ๋กœ๋“œํ•œ๋‹ค.

```python
import joblib

payload = joblib.load("artifacts/boundary_behavior_guard.joblib")
print(payload["schema"])
print(payload["feature_names"])
print(payload["threshold"], payload["weight"])
```

## ์žฌํ˜„ ๊ฒฝ๊ณ„

ํฌํ•จ๋œ script๋Š” ์ „์ฒด AIFlow ํ”„๋กœ์ ํŠธ์™€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ„๋„๋กœ ํ™•๋ณดํ•œ ๋ฐ์ดํ„ฐ์…‹์ด ์žˆ์–ด์•ผ ์™„์ „ ์‹คํ–‰๋œ๋‹ค. ๊ณต์‹ test๋Š” validation ์„ ํƒ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์ง€๋งŒ, ๋ฐ˜๋ณต ์—ฐ๊ตฌ ๊ณผ์ •์—์„œ test ์‹คํŒจ๋ฅผ ๊ด€์ฐฐํ–ˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์— ๊ธฐ๋ก๋œ ๊ฒฐ๊ณผ๋Š” ๋…๋ฆฝ ์ œํ’ˆ ์ธ์ฆ ์ˆ˜์น˜๊ฐ€ ์•„๋‹ˆ๋‹ค.

์ž์„ธํ•œ ์„ค๊ณ„ยท์‹คํŒจ ๋ถ„์„ยทํ›„์† P-track ๊ณ„ํš์€ `reports/RESEARCH_REPORT.md`๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.