SONUB 홈 KO English 한국어 日本語 中文 हिन्दी বাংলা اردو Español Português Français Deutsch Русский العربية Bahasa Indonesia Tiếng Việt ไทย Türkçe

알림을 켜는 방법

이 브라우저 또는 주소에서는 알림을 사용할 수 없습니다. 지원되는 브라우저로 보안 연결된 SONUB 사이트에 접속해 주세요.

알림이 차단되어 있으면 브라우저 설정에서 허용해 주세요.

  1. 주소 표시줄 옆의 사이트 설정 또는 브라우저의 사이트 설정을 열고, 이 사이트의 알림을 허용으로 바꾸세요.
  2. 기기 설정에서 브라우저 알림을 허용하고 방해 금지 또는 집중 모드를 확인하세요.
  3. SONUB으로 돌아와 페이지를 새로고침한 뒤 벨을 눌러 알림을 켜세요.

iPhone 또는 iPad에서는 SONUB을 홈 화면에 추가하고 거기에서 연 뒤 알림을 허용하세요.

XSML · 첫 코드부터 나만의 대화까지

자, 이제 여러분들만의 인공지능을 만들어 봅시다.

이 브라우저에서 직접 타이핑하며 언어 모델을 만듭니다. 데이터를 준비하고 작은 GPT를 학습한 뒤, 내가 만든 Runner와 XChat으로 대화합니다. 미리 학습된 가중치나 외부 AI API는 쓰지 않습니다.

3

개발 구조

학습에 앞서 프로젝트 폴더, 데이터, 설정 파일을 직접 만듭니다.

모든 작업은 ~/xsml에서 합니다. data에는 원본·학습 자료·검증 자료·토크나이저가, checkpoints에는 학습된 가중치가 들어갑니다. Python 소스는 프로젝트 바로 아래에 둡니다. 실행도 항상 이 폴더에서 합니다.

원본 한 줄은 Q: 질문 | A: 답변 형식입니다. prepare.py는 중복 줄을 없앤 뒤 서로 다른 다섯 줄 중 한 줄을 검증용으로 남깁니다. 구분자는 줄바꿈으로 바꿉니다. 검증 자료는 처음 보는 시험지이므로 토크나이저 학습에도 쓰지 않습니다. 사용할 권리가 있는 글을 쓰고, 개인정보 대신 직접 지어낸 예문을 사용하세요.

직접 타이핑하며 실습하기

먼저 폴더를 만드세요. 아래 소스를 하나씩 펼쳐 nano에서 같은 파일명으로 작성하고 저장한 뒤 닫습니다. settings.json은 이라 쉼표와 따옴표를 정확히 씁니다. 데이터와 소스를 모두 저장한 뒤 prepare.py를 실행하세요.

mkdir -p ~/xsml/data ~/xsml/checkpoints
cd ~/xsml
nano settings.json
nano data/raw.txt
nano prepare.py
python3 prepare.py
wc -l data/train.txt data/val.txt
settings.json — 직접 작성할 전체 소스

작게 시작하는 수업 기본값입니다. width는 토큰 벡터 크기, context는 볼 수 있는 토큰 수, learning_rate는 한 번 바꾸는 정도입니다. 이어서 학습할 때는 같은 설정을 유지하세요.

{
    "width": 8,
    "context": 12,
    "merges": 12,
    "steps": 20,
    "learning_rate": 0.03,
    "seed": 7,
    "tokens": 24,
    "max_tokens": 64,
    "port": 8765
}
data/raw.txt — 직접 작성할 전체 소스

한 줄에 질문·답변 한 쌍을 씁니다. 첫 실험을 짧게 하려고 만든 영어 예문입니다. 이후에는 같은 형식으로 내 자료를 넣어 보세요.

Q: hello | A: hello friend.
Q: hi | A: hi friend.
Q: name | A: i am xsml.
Q: sun | A: the sun is warm.
Q: cat | A: a cat can nap.
Q: dog | A: a dog can run.
Q: red | A: red is a color.
Q: blue | A: blue is a color.
Q: learn | A: i learn from text.
Q: code | A: i can learn code.
Q: moon | A: the moon is in the sky.
Q: rain | A: rain is water.
Q: book | A: i can read a book.
Q: tea | A: tea is warm.
Q: bye | A: bye friend.
prepare.py — 직접 작성할 전체 소스

UTF-8 읽기 → 중복 제거 → 문장쌍 나누기 → 학습·검증 파일 저장입니다. 토큰으로 나누기 전에 문장쌍을 분리해야 똑같은 예제가 양쪽에 들어가지 않습니다.

from pathlib import Path


lines = [line.strip() for line in Path('data/raw.txt').read_text(encoding='utf-8').splitlines() if line.strip()]
lines = list(dict.fromkeys(lines))
assert len(lines) >= 5, 'write at least five different Q/A lines'
assert all(' | A:' in line and line.startswith('Q:') for line in lines)
train = [line for i, line in enumerate(lines) if i % 5 != 0]
val = [line for i, line in enumerate(lines) if i % 5 == 0]
for name, rows in [('train', train), ('val', val)]:
    text = '\n'.join(row.replace(' | A:', '\nA:') for row in rows) + '\n'
    Path('data/' + name + '.txt').write_text(text, encoding='utf-8')
    print(name, len(rows))

여기까지 이해했나요?

pwd와 ls를 입력하세요. settings.json과 prepare.py가 보이나요? 제공한 자료는 학습 12개, 검증 3개 문장쌍으로 나뉩니다. 내 문장쌍을 하나 추가하면 어떤 파일부터 다시 만들어야 할까요?

막혔을 때 확인하기

FileNotFoundError가 나면 폴더와 파일명을 확인하세요. cd ~/xsml 다음 ls data를 실행합니다. IndentationError는 들여쓰기 문제입니다. 공백 네 칸을 맞추세요. 완성 예제는 ~/xsml-reference에 비교용으로만 있으며 내 프로젝트에 자동으로 채우지 않습니다.