Text Generation
PyTorch
Korean
korean
children-stories
gpt
education
from-scratch
dpo
JosephLee commited on
Commit
b3ffd4e
·
verified ·
1 Parent(s): 333b51a

모델 카드: 개편판 장 번호, 피드백 학습 모델(feedback.pt) 추가

Browse files
Files changed (1) hide show
  1. README.md +34 -17
README.md CHANGED
@@ -7,29 +7,32 @@ pipeline_tag: text-generation
7
  datasets:
8
  - psymon/Tiny-Ko-Stories
9
  - JosephLee/tiny-ko-stories-sft
 
10
  tags:
11
  - korean
12
  - children-stories
13
  - gpt
14
  - education
15
  - from-scratch
 
16
  ---
17
 
18
  # modu-llm: 한국어 어린이 이야기를 쓰는 작은 GPT
19
 
20
- 『모두의 LLM with 파이썬』(이영호)의 실습 체크포인트입니다. 책에서 처음부터 만든 약 600만 개 파라미터의 글자 단위 GPT를 한국어 어린이 이야기로 사전학습하고, 요청-이야기 쌍으로 파인튜닝했습니다.
21
 
22
- 실습 코드와 노트북: https://github.com/yhlee1627/modu-llm
23
 
24
  ## 파일
25
 
26
  | 파일 | 내용 | 책에서 쓰는 곳 |
27
  |---|---|---|
28
- | `pretrain.pt` | 사전학습을 마친 모델과 옵티마이저 상태 (27,251단계) | 10장, 11장 |
29
- | `ckpt_step250.pt`, `ckpt_step1000.pt`, `ckpt_step3000.pt` | 사전학습 도중의 모델 (옵티마이저 없음) | 10.5 학습 단계별 비교 |
30
- | `sft.pt` | 요청-이야기 쌍으로 파인튜닝한 모델과 옵티마이저 상태 (3,400단계) | 12장 챗봇 |
 
31
 
32
- 각 파일은 `torch.save`로 저장한 딕셔너리이고 `cfg`(모델 설정), `model`(가중치), `optimizer`, `step`, `history`(손실 기록)를 담고 있습니다.
33
 
34
  ## 모델
35
 
@@ -45,27 +48,40 @@ tags:
45
 
46
  **사전학습** (`pretrain.pt`)
47
  - 데이터: [Tiny-Ko-Stories](https://huggingface.co/datasets/psymon/Tiny-Ko-Stories) 앞쪽 이야기 200,000편(약 7,160만 글자), 90%는 학습용, 10%는 검증용
48
- - Google Colab T4 GPU에서 30분(27,251단계), 배치 32, AdamW(학습률 5e-4), 반정밀도(float16 autocast)
49
  - 끝났을 때 손실: 학습 0.751, 검증 0.771
50
 
51
  **파인튜닝** (`sft.pt`)
52
  - 데이터: [Tiny-Ko-Stories SFT](https://huggingface.co/datasets/JosephLee/tiny-ko-stories-sft) 학습용 43,852쌍, 검증용 2,308쌍
53
  - `pretrain.pt`에서 이어 학습, T4에서 5분, AdamW(학습률 1e-4)
54
- - 검증 손실이 가장 낮았던 3,400단계(검증 0.665)를 저장
 
 
 
 
 
 
55
 
56
  ## 쓰는 법
57
 
58
  ```python
59
- %pip install -q git+https://github.com/yhlee1627/modu-llm
 
 
 
 
 
 
 
60
 
 
 
 
61
  from modu_llm import Vocab, load_checkpoint, get_file, generate, format_pair
62
 
63
  vocab = Vocab.build()
64
  model, _, step, _ = load_checkpoint(get_file("sft.pt"), "cpu")
65
- model.eval()
66
-
67
- question = format_pair("숲속에서 토끼 보리가 나오는 이야기를 들려줘")
68
- print(generate(model, vocab, question, max_new_tokens=400, top_k=20))
69
  ```
70
 
71
  `get_file`은 구글 드라이브나 현재 폴더에 같은 이름의 파일이 있으면 그것을 쓰고, 없으면 이 저장소에서 내려받습니다.
@@ -73,18 +89,19 @@ print(generate(model, vocab, question, max_new_tokens=400, top_k=20))
73
  ## 한계와 쓰임
74
 
75
  - 교육용 모델입니다. LLM이 어떻게 움직이는지 배우려고 만든 것으로, 실제 서비스에 쓰기에는 알맞지 않습니다.
76
- - 어린이 이야기만 배웠습니다. 사실 질문, 계산, 영어 요청에도 어린이 이야기로 답하며, 이야기 속 내용이 사실과 맞는지 확인하지 않습니다.
77
  - 안전장치가 없습니다. 학습 데이터는 여러 AI 모델로 만든 합성 데이터이며, 원본 데이터 카드의 권장하지 않는 용도(사실 질의응답, 사람 검수 없이 어린이에게 직접 제공 등)가 이 모델에도 그대로 적용됩니다.
78
  - 사전에 없는 글자(자주 쓰지 않는 한글, 한자, 이모티콘 등)는 건너뜁니다.
79
 
80
  ## 라이선스와 출처
81
 
82
- 이 체크포인트는 [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)으로 공개합니다. 쓰거나 나눌 때는 이 저장소와 학습 데이터의 출처를 함께 밝혀 주세요.
83
 
84
  - 학습 데이터: Tiny-Ko-Stories (psymon), CC BY 4.0, https://huggingface.co/datasets/psymon/Tiny-Ko-Stories
85
  - 파인튜닝 데이터: Tiny-Ko-Stories SFT (JosephLee), CC BY 4.0, https://huggingface.co/datasets/JosephLee/tiny-ko-stories-sft
 
86
  - 모델 구조 참고: nanoGPT (Andrej Karpathy), MIT, https://github.com/karpathy/nanoGPT
87
- - 실습 코드: https://github.com/yhlee1627/modu-llm, MIT
88
 
89
  출처 표기 예:
90
 
@@ -95,4 +112,4 @@ modu-llm (JosephLee), CC BY 4.0, https://huggingface.co/JosephLee/modu-llm
95
 
96
  ---
97
 
98
- **English summary.** Checkpoints for the Korean book *모두의 LLM with 파이썬* (Everyone's LLM with Python). A 6.1M-parameter character-level GPT trained from scratch on 200,000 Korean children's stories from [Tiny-Ko-Stories](https://huggingface.co/datasets/psymon/Tiny-Ko-Stories), then fine-tuned on request–story pairs ([Tiny-Ko-Stories SFT](https://huggingface.co/datasets/JosephLee/tiny-ko-stories-sft)). For education only; it writes children's stories and nothing else. Licensed under CC BY 4.0; please credit this repository and the training data.
 
7
  datasets:
8
  - psymon/Tiny-Ko-Stories
9
  - JosephLee/tiny-ko-stories-sft
10
+ - JosephLee/tiny-ko-stories-feedback
11
  tags:
12
  - korean
13
  - children-stories
14
  - gpt
15
  - education
16
  - from-scratch
17
+ - dpo
18
  ---
19
 
20
  # modu-llm: 한국어 어린이 이야기를 쓰는 작은 GPT
21
 
22
+ 『모두의 LLM with 파이썬』(이영호)의 실습 모델 파일입니다. 책에서 처음부터 만든 약 609만 개 파라미터의 글자 단위 GPT를 한국어 어린이 이야기로 사전학습하고, 요청-이야기 짝으로 파인튜닝한 뒤, 선호 데이터 짝으로 한 번 더 학습(피드백 학습, DPO)했습니다.
23
 
24
+ 실습 코드와 노트북: https://github.com/yhlee1627/modu-llm-v2
25
 
26
  ## 파일
27
 
28
  | 파일 | 내용 | 책에서 쓰는 곳 |
29
  |---|---|---|
30
+ | `pretrain.pt` | 사전학습을 마친 모델과 옵티마이저 상태 (27,251번 학습) | 1~7장·13~14장의 이야기 LLM, 11·12장 |
31
+ | `ckpt_step250.pt`, `ckpt_step1000.pt`, `ckpt_step3000.pt` | 사전학습 도중의 모델 (옵티마이저 없음) | 2장, 6장, 7장 놀이터 |
32
+ | `sft.pt` | 요청-이야기 짝으로 파인튜닝한 모델과 옵티마이저 상태 (3,400번 학습) | 2장, 12장 |
33
+ | `feedback.pt` | 파인튜닝 모델을 선호 데이터 짝으로 한 번 더 학습한 모델 (옵티마이저 없음) | 2장 |
34
 
35
+ 각 파일은 `torch.save`로 저장한 딕셔너리이고 `cfg`(모델 설정), `model`(가중치), `optimizer`, `step`, `history`(손실 기록)를 담고 있습니다. `feedback.pt`의 `step`과 `history`는 출발점인 `sft.pt`의 값을 그대로 둔 것입니다.
36
 
37
  ## 모델
38
 
 
48
 
49
  **사전학습** (`pretrain.pt`)
50
  - 데이터: [Tiny-Ko-Stories](https://huggingface.co/datasets/psymon/Tiny-Ko-Stories) 앞쪽 이야기 200,000편(약 7,160만 글자), 90%는 학습용, 10%는 검증용
51
+ - Google Colab T4 GPU에서 30분(27,251번 학습), 배치 32, AdamW(학습률 5e-4), 반정밀도(float16 autocast)
52
  - 끝났을 때 손실: 학습 0.751, 검증 0.771
53
 
54
  **파인튜닝** (`sft.pt`)
55
  - 데이터: [Tiny-Ko-Stories SFT](https://huggingface.co/datasets/JosephLee/tiny-ko-stories-sft) 학습용 43,852쌍, 검증용 2,308쌍
56
  - `pretrain.pt`에서 이어 학습, T4에서 5분, AdamW(학습률 1e-4)
57
+ - 검증 손실이 가장 낮았던 3,400번째(검증 0.665)를 저장
58
+
59
+ **피드백 학습** (`feedback.pt`)
60
+ - 데이터: [Tiny-Ko-Stories Feedback](https://huggingface.co/datasets/JosephLee/tiny-ko-stories-feedback) 선호 데이터 920쌍. 사람이 하나하나 고르는 대신 규칙으로 더 좋은 답을 골랐습니다. 요청이 이야기 부탁이면 이야기가, 이야기가 아닌 질문이면 "그 질문의 답은 몰라요. …"라는 답이 더 좋은 답입니다.
61
+ - `sft.pt`에서 시작해 DPO(beta 0.1)로 학습했습니다. 기준 모델은 `sft.pt`입니다. DPO만으로는 지어낸 이야기를 밀어내기만 하고 모른다는 답이 나오지 않아서, 더 좋은 답의 글자당 손실도 함께 줄였습니다(가중치 1.0).
62
+ - AdamW(학습률 5e-5), 짝 16개씩 174번(데이터 세 바퀴), CPU에서 약 7분
63
+ - 학습 데이터에 없던 질문 8개를 세 번씩 물으면 24번 가운데 21번 모른다고 답하고, 이야기 부탁 5개를 세 번씩 하면 15번 모두 이야기를 씁니다. 요청-이야기 확인용 데이터의 손실은 0.645(파인튜닝)에서 0.657로 거의 같습니다.
64
 
65
  ## 쓰는 법
66
 
67
  ```python
68
+ %pip install -q git+https://github.com/yhlee1627/modu-llm-v2
69
+
70
+ from modu_llm import load_story_llm
71
+
72
+ fb = load_story_llm("feedback") # "pretrain", "sft", "feedback", "step250" …
73
+ fb.ask("대한민국의 수도는 어디야?", length=150)
74
+ fb.ask("토끼가 나오는 짧은 이야기를 써 줘", length=150)
75
+ ```
76
 
77
+ 부품을 직접 다루려면 다음처럼 불러옵니다.
78
+
79
+ ```python
80
  from modu_llm import Vocab, load_checkpoint, get_file, generate, format_pair
81
 
82
  vocab = Vocab.build()
83
  model, _, step, _ = load_checkpoint(get_file("sft.pt"), "cpu")
84
+ print(generate(model, vocab, format_pair("숲속에서 토끼 보리가 나오는 이야기를 들려줘"), max_new_tokens=300))
 
 
 
85
  ```
86
 
87
  `get_file`은 구글 드라이브나 현재 폴더에 같은 이름의 파일이 있으면 그것을 쓰고, 없으면 이 저장소에서 내려받습니다.
 
89
  ## 한계와 쓰임
90
 
91
  - 교육용 모델입니다. LLM이 어떻게 움직이는지 배우려고 만든 것으로, 실제 서비스에 쓰기에는 알맞지 않습니다.
92
+ - 어린이 이야기만 배웠습니다. 사전학습·파인튜닝 모델은 사실 질문, 계산, 영어 요청에도 어린이 이야기로 답합니다. 피드백 학습 모델은 이런 질문에 대개 모른다고 답하지만 늘 그렇지는 않고, 새 지식을 배운 것도 아닙니다.
93
  - 안전장치가 없습니다. 학습 데이터는 여러 AI 모델로 만든 합성 데이터이며, 원본 데이터 카드의 권장하지 않는 용도(사실 질의응답, 사람 검수 없이 어린이에게 직접 제공 등)가 이 모델에도 그대로 적용됩니다.
94
  - 사전에 없는 글자(자주 쓰지 않는 한글, 한자, 이모티콘 등)는 건너뜁니다.
95
 
96
  ## 라이선스와 출처
97
 
98
+ 이 모델 파일들은 [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)으로 공개합니다. 쓰거나 나눌 때는 이 저장소와 학습 데이터의 출처를 함께 밝혀 주세요.
99
 
100
  - 학습 데이터: Tiny-Ko-Stories (psymon), CC BY 4.0, https://huggingface.co/datasets/psymon/Tiny-Ko-Stories
101
  - 파인튜닝 데이터: Tiny-Ko-Stories SFT (JosephLee), CC BY 4.0, https://huggingface.co/datasets/JosephLee/tiny-ko-stories-sft
102
+ - 선호 데이터: Tiny-Ko-Stories Feedback (JosephLee), CC BY 4.0, https://huggingface.co/datasets/JosephLee/tiny-ko-stories-feedback
103
  - 모델 구조 참고: nanoGPT (Andrej Karpathy), MIT, https://github.com/karpathy/nanoGPT
104
+ - 실습 코드: https://github.com/yhlee1627/modu-llm-v2, MIT
105
 
106
  출처 표기 예:
107
 
 
112
 
113
  ---
114
 
115
+ **English summary.** Model files for the Korean book *모두의 LLM with 파이썬* (Everyone's LLM with Python). A 6.1M-parameter character-level GPT trained from scratch on 200,000 Korean children's stories from [Tiny-Ko-Stories](https://huggingface.co/datasets/psymon/Tiny-Ko-Stories), fine-tuned on request–story pairs ([Tiny-Ko-Stories SFT](https://huggingface.co/datasets/JosephLee/tiny-ko-stories-sft)), then trained with DPO on 920 rule-chosen preference pairs ([Tiny-Ko-Stories Feedback](https://huggingface.co/datasets/JosephLee/tiny-ko-stories-feedback)) so that it declines non-story questions instead of making up a story. For education only. Licensed under CC BY 4.0; please credit this repository and the training data.