온라인 분석 · 02

SGF 소스에서 KataGo 변화도까지

FF[4] 원문에서 노드, 속성, 좌표와 분기를 읽고 OGS, KaTrain, Sabaki, SmartGo에서 기보를 내보낸 뒤 Read19와 KataGo로 분석합니다.

  1. 먼저 SGF를 텍스트 트리로 봅니다

    SGF는 Smart Game Format의 약자입니다. 한 컬렉션에 여러 대국이 들어갈 수 있고 각 대국은 괄호 안에 놓입니다. 세미콜론은 노드를 시작하고 대문자 속성의 값은 대괄호에 들어갑니다. 최소 예시는 (;GM[1]FF[4]SZ[19];B[pd];W[dd])입니다.

    다섯 기호만 알면 기본 문법을 읽을 수 있습니다. 괄호는 GameTree를 감싸고 세미콜론은 Node를 시작하며 대문자는 Property 이름, 대괄호는 값, 역슬래시는 본문 속 구조 문자를 이스케이프합니다. 값 밖의 공백은 대체로 무시되지만 값 안에서는 내용일 수 있습니다. 한 Collection에 여러 GameTree가 이어질 수 있으므로 .sgf 파일 하나가 반드시 한 판은 아닙니다. SGF는 착수 표가 아니라 설명, 표시와 변화가 각 노드에 붙는 재귀 문법 트리입니다.

    AlphaGo 2국의 전체 기보도 (;로 시작하며 GameTree 안에 루트, 실전 노드와 분석 분기가 들어갑니다.
  2. 루트 노드에서 분석 전제를 확인합니다

    첫 세미콜론 뒤 루트 노드는 대국 전체 정보를 저장합니다. FF[4]는 형식 버전, GM[1]은 바둑, CA[UTF-8]은 문자 인코딩, SZ[19]는 판 크기입니다. KM, RU, HA, PL, AB, AW, AE는 덤, 규칙, 접바둑, 둘 차례와 초기 배치를 정합니다.

    루트 속성 순서는 달라도 값이 분석 전제를 정합니다. FF[4]와 GM[1]은 FF[4] 바둑 기보, CA[UTF-8]은 문자 인코딩, AP는 만든 프로그램입니다. SZ[19], KM[7.5], RU[Chinese], HA[0]은 판과 규칙을 정의합니다. 접바둑은 HA, AB, PL을 함께 봐야 합니다. HA[2]만 있고 AB 초기 흑돌 두 개가 없으면 여전히 잘못된 국면입니다. KM[0]도 빠진 값이 아니라 실제 0이므로 기본 덤으로 바꾸면 안 됩니다.

    FF, GM, CA, AP 다음에 SZ, KM, RU, HA, PL, AB, AW, AE를 읽습니다. 메타데이터는 KataGo 입력입니다.
  3. 착수를 읽습니다: SGF 좌표는 다릅니다

    B[pd]는 흑의 착수, W[dd]는 백의 착수입니다. SGF는 왼쪽 위 aa부터 19줄 바둑판 오른쪽 아래 ss까지 두 축 모두 연속 소문자를 쓰며 일반 바둑판 좌표와 달리 I를 건너뛰지 않습니다. FF[4]의 표준 패스 표기는 B[] 또는 W[]입니다.

    SGF 점은 소문자 두 개로 가로, 세로 순서이며 원점은 왼쪽 위입니다. aa가 왼쪽 위, 19줄 판의 ss가 오른쪽 아래입니다. 일반 바둑판 좌표와 방향과 문자표가 다릅니다. 화면 좌표는 보통 왼쪽 아래에서 세고 I를 건너뛰지만 SGF는 I를 건너뛰지 않습니다. 그래서 AlphaGo 37수는 판에서 P10, 원문에서는 B[oj]입니다. FF[4]의 표준 패스는 B[] 또는 W[]입니다. 오래된 19줄 파일의 tt는 호환 표기일 뿐 새 파일의 표준 출력이 아닙니다.

    같은 수가 바둑판에서는 P10, SGF에서는 B[oj]입니다. 원점, 대소문자와 I 생략 여부가 다릅니다.
  4. 분기와 표시를 읽습니다: 변화도의 원천

    연속 노드는 한 경로이고 같은 노드 뒤에 나란히 놓인 괄호가 형제 분기를 만듭니다. 보통 첫 분기가 주 변화입니다. C는 설명, N은 노드 이름, TR, SQ, CR, MA, LB는 판 표시, AB, AW, AE는 초기 국면을 저장합니다. 변화도가 바로 이 트리를 보여 줍니다.

    한 노드 뒤에 (;B[oj]...)(;B[dc]...)를 쓰면 형제 변화가 되고 각 괄호 안에 GameTree를 다시 중첩할 수 있습니다. 보통 첫 분기가 주 변화지만 저장된 대상은 영상 진행이 아니라 트리입니다. C는 현재 노드의 설명, N은 이름이고 TR, SQ, CR, MA, LB는 삼각형, 사각형, 원, 엑스와 글자 표시입니다. Read19는 이 관계를 변화도로 옮기므로 36수에서 P10, D13, E12를 여는 일은 같은 부모 아래 자식 서브트리를 바꾸는 것입니다.

    원문의 나란한 괄호가 변화도 분기 카드가 되며 실전, 후보와 자신의 응수는 서로 덮어쓰지 않습니다.
  5. 일반 소프트웨어에서 SGF를 내보냅니다

    OGS는 끝난 대국의 사이드 패널에 Download SGF를 제공합니다. KaTrain은 Ctrl+C로 현재 SGF를 클립보드에 복사합니다. Sabaki는 File → Save As로 .sgf를 저장하고 GIB와 NGF도 열어 변환할 수 있습니다. SmartGo는 Save As, SmartGo Kifu는 My Games에서 공유나 이메일로 내보냅니다.

    바둑판 스크린샷이 아니라 실제 기보를 내보냅니다. OGS는 끝난 대국 오른쪽 사이드 패널에 Download SGF가 있습니다. KaTrain 공식 Ctrl+C는 현재 전체 SGF를 클립보드에 넣어 Read19에 바로 붙일 수 있습니다. Sabaki는 File → Save As로 SGF를 저장하며 GIB와 NGF를 열어 변환할 수도 있습니다. SmartGo 데스크톱은 Save As, SmartGo Kifu는 My Games에서 대국을 골라 공유나 이메일로 내보냅니다. 메뉴 이름은 운영체제 언어와 버전에 따라 조금 달라질 수 있습니다.

    OGS는 다운로드, KaTrain은 복사, Sabaki는 GIB/NGF 변환, SmartGo는 공유를 거쳐 모두 SGF 텍스트를 만듭니다.
  6. Read19로 가져와 변화도에서 실험합니다

    .sgf 파일을 고르거나 여는 괄호로 시작하는 원문을 붙여 넣습니다. 기사, 마지막 수순, SZ, KM, RU, HA와 초기 배치를 확인한 뒤 전체를 낮은 탐색량으로 훑습니다. 전환점만 깊게 분석하고 실전, KataGo 후보와 자신의 응수를 한 분기점 아래에 보존합니다.

    파싱 성공은 문법을 읽었다는 뜻일 뿐 대국이 맞다는 증거가 아닙니다. 끝으로 이동해 마지막 세 수에서 다섯 수, 전체 수순 수와 결과를 원본과 대조합니다. 이어 루트의 PB, PW, SZ, KM, RU, HA, PL, AB, AW, AE를 확인합니다. 그 뒤 전체를 낮은 탐색량으로 훑고 승률과 집 차이 전환점만 깊게 분석합니다. 변화도에는 AlphaGo 실전 P10을 남기고 D13과 E12를 따로 열며 자신의 자연스러운 응수도 추가합니다. 좌표를 외우지 말고 위협, 선수와 약한 돌을 비교하세요.

    파싱 → 메타데이터 검증 → 전체 탐색 → 전환점 심층 분석 → 변화도 비교의 다섯 층이 한 번의 완전한 분석입니다.

규격과 내보내기 근거

  1. SGF FF[4] 공식 규격
  2. OGS: 대국 사이드 패널에서 SGF 다운로드
  3. KaTrain: SGF 클립보드 단축키
  4. Sabaki: SGF, GIB, NGF 지원
  5. SmartGo 저장과 내보내기 도움말

가져온 뒤 확인할 항목

  • 유효한 GameTree로 시작하고 끝까지 파싱된다
  • 기사, 수순 수와 마지막 착수가 원본과 같다
  • SZ, KM, RU, HA, PL과 초기 배치가 정확하다
  • 문자 인코딩이 맞아 설명이 깨지지 않는다
  • 주 수순과 변화가 우연히 뒤바뀌지 않았다
  • 변화도에서 자신의 응수 하나를 시험했다
KataGo 분석 예시 열기