# 24년간의 블로그 글을 마르코프 모델에 학습시킨 실험

> Clean Markdown view of GeekNews topic #25068. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=25068](https://news.hada.io/topic?id=25068)
- GeekNews Markdown: [https://news.hada.io/topic/25068.md](https://news.hada.io/topic/25068.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-12-15T02:33:00+09:00
- Updated: 2025-12-15T02:33:00+09:00
- Original source: [susam.net](https://susam.net/fed-24-years-of-posts-to-markov-model.html)
- Points: 2
- Comments: 1

## Topic Body

- 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 등의 단어가 혼합된 긴 문장 생성  

### 단순 모델의 의의
- 2025년 현재 **대규모 언어모델(LLM)** 이 주류지만,  
  마르코프 모델은 **전역 구조나 장기 의존성**을 포착하지 못함  
- 그럼에도 불구하고, **단순한 설계와 구현의 명료함** 덕분에  
  **언어 생성 원리를 학습하기 위한 입문 모델**로 가치가 있음  
- 작성자는 “이 모델이야말로 언어모델의 **‘Hello, world’** ”라고 표현

## Comments



### Comment 47721

- Author: neo
- Created: 2025-12-15T02:33:00+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=46257607) 
- Markov Model이란 **현재 상태만으로 다음 토큰을 확률적으로 생성**하는 상태 기계의 통계적 버전임  
  상태와 토큰 간의 관계를 명확히 정의해야 의미 있는 논의가 가능함  
  예를 들어, 상태가 마지막 k개의 관찰값의 함수라면 이는 k차 **Markov Chain**이라 부름  
  RNN은 이전 상태들과 최근 토큰들의 함수로 상태를 정의하는 확장형이라 볼 수 있음  
  상태 전이 확률이 확정적일 수도, 확률적일 수도 있으며, 문맥 길이도 가변적으로 정의 가능함  
  하지만 모든 Markov Model이 **학습 가능한 것은 아님**
  - “학습 가능하다”는 게 무슨 뜻인지 궁금함  

- 1992년에 Egghead Software에서 3달러에 이런 프로그램을 샀던 기억이 있음  
  내 5년치 일기 같은 글을 넣고 결과를 보며 웃었음  
  오래된 예시로 [Babble 1.0.20](https://archive.org/details/Babble_1020)과 관련 포럼 글 [Software Spotlight: Babble](https://forum.winworldpc.com/discussion/12953/software-spotl...)을 참고할 수 있음  

- 글을 보고 나도 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](https://nanogenmo.github.io/)에 참여해본 적 있는지 궁금함  
    이런 코퍼스로 실험하면 꽤 재미있는 프로젝트가 될 것 같음
  - 나도 2015년에 내 트윗 2만 개를 Markov 모델로 학습시켜 **트위터 봇**을 만든 적 있음  
    [발표 영상](https://youtu.be/rMmXdiUGsr4)도 있음
  - 나도 30년치 미완성 소설 초안이 있는데, 이런 방식으로 돌려보면 흥미로울 것 같음
  - **Terry Davis**도 비슷한 시도를 했던 것으로 기억함
  - 이런 걸 LLM으로 하려면 어떻게 해야 할지 궁금함  
    개인 글 전체를 학습시켜 나만의 모델을 만들 수 있을까?  
    어떤 모델과 툴을 써야 하며, **시스템 프롬프트 없이도 내 말투로 쓸 수 있을지** 알고 싶음  
    나아가 전화 응답이나 Discord 메시지에도 자연스럽게 대응할 수 있을지 궁금함  

- Markov Chain으로 만든 **해리포터 팬픽**이 있음  
  제목은 *Harry Potter and the Portrait of What Looked Like a Large Pile of Ash*  
  [botnik.org의 링크](https://botnik.org/content/harry-potter.html)에서 볼 수 있음
  - 왜 그런 걸 읽고 싶어 하는지 모르겠음  
    첫 문장만 봐도 **공허한 텍스트**처럼 느껴졌음  
    인간이 쓴 최악의 책보다도 감정이나 의미가 없다고 생각함  

- “I Fed 24 Years of My Blog Posts to a Markov Model” 같은 시도는 이미 여러 **LLM들이 반복**해온 일임  

- **Barbara Cartwright**처럼 700권 넘게 비슷한 로맨스 소설을 쓴 작가는 Markov 모델로 재현 가능할 것 같음  
  - 하지만 실제로 구분할 수 있을지는 모르겠음  
    내 아내도 가끔 이미 읽은 소설을 다시 사서 읽을 때가 있음  

- 2000년대 중반 IRC에서 **Markov chain 봇**을 본 기억이 있음  
  GPT가 나오기 전까지 그보다 나은 건 없었음
  - 아마 [MegaHAL](https://homepage.kranzky.com/megahal/Index.html)이나 좀 더 나중의 [Cobe](https://teichman.org/blog/)를 말하는 것 같음
  - 나도 2000년대에 bitlbee로 직접 만들어봤음, 정말 즐거운 시절이었음  

- 이건 사실 Markov 모델보다는 **trigram 모델**에 더 가까움  
  4그램 이상으로 확장되면 훨씬 더 자연스러운 문장이 나올 것임  
  예전에 “infini-gram”이라는 초대형 n-gram 모델 연구가 있었는데, 일부 도메인에서는 LLM에 근접한 성능을 보였다고 들었음  

- 24년간의 경험과 생각을 공유해줘서 고맙게 생각함  
  요즘처럼 **소비와 자극만 넘치는 시대**에 이런 진심 어린 나눔은 특별한 일임
