24년간의 블로그 글을 마르코프 모델에 학습시킨 실험
(susam.net)- 1980년대의 Mark V. Shaney 프로그램에서 영감을 받아, 약 30줄의 Python 코드로 구현된 간단한 마르코프 텍스트 생성기 Mark V. Shaney Junior를 제작
- 이 모델은 세 단어(trigram) 기반으로 다음 단어를 확률적으로 예측하며, 200여 개의 블로그 글(약 20만 단어) 을 학습 데이터로 사용
- 생성된 문장은 Lisp, Emacs, 수학, 프로그래밍 등 블로그 주제의 단어들을 섞어 만든 의미 없는 문장(gibberish) 형태로 출력
- 모델의 차수(order) 를 높이면 문장이 더 일관되지만, 5 이상에서는 원문을 그대로 인용해 창의성이 사라짐
- 대규모 언어모델(LLM) 시대에도, 이러한 단순한 마르코프 모델의 구조적 명료함은 언어 생성 원리를 이해하는 좋은 출발점으로 제시됨
Mark V. Shaney Junior 프로그램 개요
-
Mark V. Shaney Junior는 1980년대 Usenet에서 활동한 가상 사용자 Mark V. Shaney를 모방한 텍스트 생성기
- 원본은 마르코프 모델을 이용해 게시글을 자동 생성하던 프로그램
- 이번 구현은 그 아이디어를 단순화한 미니멀 버전으로, GitHub에 공개됨
- 전체 코드가 약 30줄의 Python으로 구성되어 있으며, 효율성보다 단순성을 중시
- 마르코프 모델을 처음 접하는 사람도 20분 이내에 이해 가능한 수준
취미로서의 실험적 프로그래밍
- 작성자는 특정 문제 해결이 아닌 아이디어 탐구 목적의 프로그래밍을 즐겨 수행
- 다양한 상태공간을 가진 마르코프 체인을 여러 차례 실험
- 이러한 실험 코드를 정리해 GitHub나 Codeberg에 공유
- Mark V. Shaney Junior 역시 이러한 실험 중 하나로, 완성도를 높여 공개한 사례
블로그 데이터를 이용한 텍스트 생성
- 모델을 찰스 디킨스의 『크리스마스 캐럴』 로 학습시켜 테스트한 후,
24년간의 블로그 글(200여 개, 약 20만 단어) 을 입력 데이터로 사용- 댓글(약 4만 단어)은 제외
- 생성된 문장은 프로그래밍 명령어, 수학 용어, 에디터 명령 등이 뒤섞인 비논리적 문장으로 출력
- 예: Emacs 명령, Lisp 코드, 수학 용어 등이 무작위로 결합된 문장
- 일부 문장은 블로그의 특정 글에서 단어를 가져와 의미 없는 조합을 형성
- 예: “Lisp source file”과 “self-esteem”이 서로 다른 글에서 추출되어 결합
마르코프 속성과 알고리듬 구조
- 기본 설정은 trigram(3단어) 기반으로,
앞의 두 단어를 키(key)로, 세 번째 단어를 값(value)으로 저장하는 맵 구조 사용 - 텍스트 생성 과정
- 임의의 단어쌍을 선택 → 가능한 다음 단어 중 하나를 균등 확률로 선택
- 새로 선택된 단어와 직전 단어로 새로운 쌍을 구성해 반복
- 더 이상 후속 단어가 없거나 100단어 제한에 도달하면 종료
- 동일한 trigram이 여러 번 등장하면, 해당 후속 단어가 리스트에 중복 저장되어
출현 빈도에 비례한 확률적 선택이 이루어짐 - 이 과정은 현재 상태에만 의존하는 확률적 전이로,
수식으로는 P(Xₙ₊₁ | Xₙ, Xₙ₋₁, …, X₁) = P(Xₙ₊₁ | Xₙ) 형태로 표현- 이 기억 없음(memoryless) 특성이 마르코프 성질의 핵심
추가 실험과 모델 차수 조정
- 기본 차수(order)는 2이며, 명령행 인자로 변경 가능
- 차수를 3~4로 높이면 문장이 더 일관되고 자연스러움
- 예시: IRC 명령어와 수학 개념이 섞인 비교적 논리적인 문장 생성
- 그러나 차수를 5로 높이면 원문을 그대로 복제하는 경향이 생겨
창의적 무의미함(gibberish) 이 사라짐 - 초기 프롬프트를 주어 텍스트를 생성할 수도 있음
- 예: “Finally we”로 시작하는 문장을 입력하면,
Emacs, MATLAB, GNU bash 등의 단어가 혼합된 긴 문장 생성
- 예: “Finally we”로 시작하는 문장을 입력하면,
단순 모델의 의의
- 2025년 현재 대규모 언어모델(LLM) 이 주류지만,
마르코프 모델은 전역 구조나 장기 의존성을 포착하지 못함 - 그럼에도 불구하고, 단순한 설계와 구현의 명료함 덕분에
언어 생성 원리를 학습하기 위한 입문 모델로 가치가 있음 - 작성자는 “이 모델이야말로 언어모델의 ‘Hello, world’ ”라고 표현
Hacker News 의견들
-
Markov Model이란 현재 상태만으로 다음 토큰을 확률적으로 생성하는 상태 기계의 통계적 버전임
상태와 토큰 간의 관계를 명확히 정의해야 의미 있는 논의가 가능함
예를 들어, 상태가 마지막 k개의 관찰값의 함수라면 이는 k차 Markov Chain이라 부름
RNN은 이전 상태들과 최근 토큰들의 함수로 상태를 정의하는 확장형이라 볼 수 있음
상태 전이 확률이 확정적일 수도, 확률적일 수도 있으며, 문맥 길이도 가변적으로 정의 가능함
하지만 모든 Markov Model이 학습 가능한 것은 아님- “학습 가능하다”는 게 무슨 뜻인지 궁금함
-
1992년에 Egghead Software에서 3달러에 이런 프로그램을 샀던 기억이 있음
내 5년치 일기 같은 글을 넣고 결과를 보며 웃었음
오래된 예시로 Babble 1.0.20과 관련 포럼 글 Software Spotlight: Babble을 참고할 수 있음 -
글을 보고 나도 Markov 모델을 실험해봤음
문자 단위로 시작했는데, 2차 모델로 바꿔도 큰 차이는 없었음
3차(trigram)로 가면 조금 더 자연스러워졌음
이후 BPE(Byte Pair Encoding) 로 토큰화한 텍스트에 1차 Markov 모델을 적용했더니, 결과가 조금 더 일관성 있었음
하지만 2차로 올리자 원문을 그대로 복제함 — BPE가 반복 토큰을 제거해 전이가 결정적이 되었기 때문임
토큰 수를 제한(예: 894 → 800)하니 다시 비결정적이 되었고, 텍스트가 약간 더 자연스러워졌음
너무 높은 차수(예: 5차)로 가면 텍스트가 건조하고 사실만 나열하는 느낌이 됨
결국 Markov 모델은 단순하지만 실험하기에 꽤 재미있는 도구임- 나도 비슷한 시도를 했는데, 결과물이 절반은 웃긴 헛소리, 절반은 원문 복붙이었음
후속 토큰이 하나뿐인 체인을 제거하면 나아질 것 같지만, 문법 구조까지 지워질 위험이 있음
긴 단일 체인을 피하는 더 나은 방법을 찾는 중임 - ‘건조한’ 결과를 피하려면 5단어 제한을 유연하게 조정하는 게 요령임
가능한 경로가 하나뿐이면 4단어로 줄이는 식임 - 이런 결과를 보면 마치 무언가가 의사소통하려는 듯한 섬뜩한 느낌이 듦
혹은 우리가 혼자이고, 혼돈 속에서 질서를 찾으려는 마음의 작용일 수도 있음
- 나도 비슷한 시도를 했는데, 결과물이 절반은 웃긴 헛소리, 절반은 원문 복붙이었음
-
예전에 나도 비슷한 실험을 했음
20년간 쓴 판타지·SF 글 약 50만 단어를 Markov 모델에 넣고 2~5그램 슬라이더로 조정했음
영감이 필요할 때마다 꺼내보는 ‘꿈의 우물’ 같은 도구였음
어릴 적 사전 임의 페이지를 열어 글감을 찾던 습관의 연장선 같았음- 혹시 NaNoGenMo에 참여해본 적 있는지 궁금함
이런 코퍼스로 실험하면 꽤 재미있는 프로젝트가 될 것 같음 - 나도 2015년에 내 트윗 2만 개를 Markov 모델로 학습시켜 트위터 봇을 만든 적 있음
발표 영상도 있음 - 나도 30년치 미완성 소설 초안이 있는데, 이런 방식으로 돌려보면 흥미로울 것 같음
- Terry Davis도 비슷한 시도를 했던 것으로 기억함
- 이런 걸 LLM으로 하려면 어떻게 해야 할지 궁금함
개인 글 전체를 학습시켜 나만의 모델을 만들 수 있을까?
어떤 모델과 툴을 써야 하며, 시스템 프롬프트 없이도 내 말투로 쓸 수 있을지 알고 싶음
나아가 전화 응답이나 Discord 메시지에도 자연스럽게 대응할 수 있을지 궁금함
- 혹시 NaNoGenMo에 참여해본 적 있는지 궁금함
-
Markov Chain으로 만든 해리포터 팬픽이 있음
제목은 Harry Potter and the Portrait of What Looked Like a Large Pile of Ash
botnik.org의 링크에서 볼 수 있음- 왜 그런 걸 읽고 싶어 하는지 모르겠음
첫 문장만 봐도 공허한 텍스트처럼 느껴졌음
인간이 쓴 최악의 책보다도 감정이나 의미가 없다고 생각함
- 왜 그런 걸 읽고 싶어 하는지 모르겠음
-
“I Fed 24 Years of My Blog Posts to a Markov Model” 같은 시도는 이미 여러 LLM들이 반복해온 일임
-
Barbara Cartwright처럼 700권 넘게 비슷한 로맨스 소설을 쓴 작가는 Markov 모델로 재현 가능할 것 같음
- 하지만 실제로 구분할 수 있을지는 모르겠음
내 아내도 가끔 이미 읽은 소설을 다시 사서 읽을 때가 있음
- 하지만 실제로 구분할 수 있을지는 모르겠음
-
2000년대 중반 IRC에서 Markov chain 봇을 본 기억이 있음
GPT가 나오기 전까지 그보다 나은 건 없었음 -
이건 사실 Markov 모델보다는 trigram 모델에 더 가까움
4그램 이상으로 확장되면 훨씬 더 자연스러운 문장이 나올 것임
예전에 “infini-gram”이라는 초대형 n-gram 모델 연구가 있었는데, 일부 도메인에서는 LLM에 근접한 성능을 보였다고 들었음 -
24년간의 경험과 생각을 공유해줘서 고맙게 생각함
요즘처럼 소비와 자극만 넘치는 시대에 이런 진심 어린 나눔은 특별한 일임