VLM이 오목 전략을 설명해도 행과 열을 한 칸 잘못 읽으면 착수는 실패한다. 좌표 grounding 소스는 전략 학습과 좌표 읽기를 분리해 15×15·19×19 텍스트 판을 정확히 해석하는 능력을 먼저 측정한다.

오목 좌표 LoRA: 15×15와 19×19 격자를 정확히 읽히기 핵심 도식
그림. 착수 전략 전에 행·열 정렬과 좌표 읽기 능력을 별도 데이터로 학습하고 검증한다.

aligned 격자

열 번호, 행 번호와 각 칸 기호의 폭을 고정한다. X는 흑, O는 백, 점은 빈칸이며 좌상단부터 0 기반 `(row, col)`임을 프롬프트에 반복한다. legacy 형식과 aligned 형식을 비교해 문자열 배치 자체가 오류에 미치는 영향도 본다.

좌표 과제

단일 돌 위치 찾기, 여러 돌 모두 찾기, 특정 좌표의 칸 읽기, 빈칸 확인 같은 작은 QA를 생성한다. 모서리·중앙·인접 좌표를 hard case로 더 자주 뽑는다. 합성판뿐 아니라 대국 로그의 중반 밀집판도 섞는다.

착수 데이터와 분리

좌표 QA가 좋아졌다고 오목을 잘 두는 것은 아니다. 좌표 정확도, 합법수 비율, 전술 착수율과 승률을 별도 지표로 둔다. LoRA 전후에 같은 seed의 고정 검증 세트를 사용하고 학습 로그의 판이 validation에 섞이지 않게 한다.

출력 계약

착수 API는 설명문이 아니라 정확히 두 정수만 받아야 한다. 파싱 후 범위와 빈칸을 검사하고 실패하면 제한된 횟수만 재시도한다. 모델 출력이 맞아도 서버 판 상태가 바뀌었다면 stale 요청으로 버린다.

관련 소스

  • `coord_omook.py`: 격자, QA dataset, MLX 검증
  • `scripts/probe_vlm_coords.py`: 좌표 probe
  • `vlm_pva_server.py`: 실제 착수와 보정