byminHugging commited on
Commit
07afcbb
·
verified ·
1 Parent(s): a854264

Delete kcmii_lm_rag.ipynb

Browse files
Files changed (1) hide show
  1. kcmii_lm_rag.ipynb +0 -483
kcmii_lm_rag.ipynb DELETED
@@ -1,483 +0,0 @@
1
- {
2
- "cells": [
3
- {
4
- "cell_type": "markdown",
5
- "id": "9d6fc17a-d548-4ab6-b5d3-51e4b60960bb",
6
- "metadata": {},
7
- "source": [
8
- "### full-fine-tuning 하기에 학습 시간이 너무 오래걸림\n",
9
- "### RAG 검색 기반 활용해 개발해보는 것으로 진행"
10
- ]
11
- },
12
- {
13
- "cell_type": "markdown",
14
- "id": "33f8253d-352f-4ac6-9205-59b0e773be77",
15
- "metadata": {},
16
- "source": [
17
- "### 키워드 기반의 RAG 구축 \n",
18
- "\n",
19
- "### 흐름\n",
20
- "[입력: 전공명 3개] \n",
21
- " ↓ \n",
22
- "[CSV 문서에서 3개 전공 정보 추출] ← (Keyword-based Retriever) \n",
23
- " ↓ \n",
24
- "[전공 정보들을 연결하여 프롬프트 생성] ← (Prompt Composer) \n",
25
- " ↓ \n",
26
- "[LLM에게 전달하여 생기부 문구 생성] ← (Generator)"
27
- ]
28
- },
29
- {
30
- "cell_type": "code",
31
- "execution_count": 4,
32
- "id": "cbe0926d-ccec-4942-8a9e-bf5f940d1a0b",
33
- "metadata": {},
34
- "outputs": [
35
- {
36
- "data": {
37
- "text/plain": [
38
- "(61,\n",
39
- " '[전공명: 어문학]\\n전공설명: 동서양 언어의 구조와 문학적 표현을 체계적으로 탐구하고, 다양한 문화적 맥락을 이해하는 학문이다.\\n요구역량: 언어적 감각, 논리적 사고력, 비판적 분석 능력\\n전공관심: 언어와 문학, 다양한 국가의 사회·문화적 특성\\n관련진로: 소설가, 방송작가, 번역가, 문학비평가, 통역사, 언어학자')"
40
- ]
41
- },
42
- "execution_count": 4,
43
- "metadata": {},
44
- "output_type": "execute_result"
45
- }
46
- ],
47
- "source": [
48
- "# 사용자로부터 전공명 3개 입력 받기\n",
49
- "# csv 데이터에서 해당 전공 3개의 정보 추출\n",
50
- "# 추출된 정보를 기반으로 프롬프트 구성\n",
51
- "import pandas as pd\n",
52
- "\n",
53
- "file_path = \"dataset/kcmii_major_rag.csv\"\n",
54
- "df = pd.read_csv(file_path)\n",
55
- "\n",
56
- "def make_major_prompt(df, majors : list) :\n",
57
- " parts = []\n",
58
- " for i, major in enumerate(major, 1) : # enumerate(major, 1) 스타팅 넘버 설정\n",
59
- " row = df[df['전공명']==major]\n",
60
- " if row.empty:\n",
61
- " continue\n",
62
- " r = row.iloc[o]\n",
63
- " \n",
64
- "전공설명: {row['전공설명']}\n",
65
- "요구역량: {row['요구역량']}\n",
66
- "전공관심: {row['전공관심']}\n",
67
- "관련진로: {row['관련진로']}\"\"\"\n",
68
- "\n",
69
- "# 문서 리스트 생성\n",
70
- "documents = df.apply(format_row_as_document, axis=1).tolist()\n",
71
- "\n",
72
- "# 문서 수 확인 및 샘플 출력\n",
73
- "len(documents), documents[0]"
74
- ]
75
- },
76
- {
77
- "cell_type": "code",
78
- "execution_count": 35,
79
- "id": "dbd6f8a1-aca2-44df-9d37-7377025c7126",
80
- "metadata": {},
81
- "outputs": [
82
- {
83
- "data": {
84
- "text/plain": [
85
- "pandas.core.series.Series"
86
- ]
87
- },
88
- "execution_count": 35,
89
- "metadata": {},
90
- "output_type": "execute_result"
91
- }
92
- ],
93
- "source": []
94
- },
95
- {
96
- "cell_type": "code",
97
- "execution_count": 5,
98
- "id": "52fe7db0-e1e2-4f86-9eb7-55bf794ecb3d",
99
- "metadata": {},
100
- "outputs": [],
101
- "source": [
102
- "import pandas as pd\n",
103
- "file_path = \"dataset/kcmii_major_rag.csv\"\n",
104
- "df = pd.read_csv(file_path)\n",
105
- "\n",
106
- "majors = [\"심리\", \"교육\", \"사회복지\"]\n",
107
- "parts = []\n",
108
- "for i, major in enumerate(majors, 1):\n",
109
- " row = df[df['전공명']==major]\n",
110
- " r = row.iloc[0] # 시리즈 변환\n",
111
- " part = f\"\"\"{i}. {major}\n",
112
- "전공설명: {r['전공설명']}\n",
113
- "요구역량: {r['요구역량']}\n",
114
- "전공관심: {r['전공관심']}\n",
115
- "관련진로: {r['관련진로']}\n",
116
- "\"\"\"\n",
117
- " parts.append(part)\n",
118
- "\n",
119
- "majors_str = \", \".join(majors)\n",
120
- "prompt = f\"\"\"OO 학생은 아래의 세 전공 분야({majors_str})에 대해 흥미 수준이 높습니다.\n",
121
- "각 전공에 대한 정보를 바탕으로, 고등학생 생활기록부 문구를 작성해주세요:\n",
122
- "\n",
123
- "{chr(10).join(parts)}\n",
124
- "\"\"\""
125
- ]
126
- },
127
- {
128
- "cell_type": "code",
129
- "execution_count": 6,
130
- "id": "17933069-cd0d-4b15-b424-410b83063dbc",
131
- "metadata": {},
132
- "outputs": [
133
- {
134
- "data": {
135
- "text/plain": [
136
- "['1. 심리\\n전공설명: 인간의 행동과 정신 과정을 과학적으로 탐구하는 학문이다.\\n요구역량: 공감 능력, 분석력, 관찰력\\n전공관심: 인간 행동, 감정, 인지 기능\\n관련진로: 임상심리사, 상담사, 조직심리전문가, 연구원, 교수\\n',\n",
137
- " '2. 교육\\n전공설명: 인간의 학습과 발달을 연구하고 효과적인 교수법과 교육 제도를 탐구하는 학문이다.\\n요구역량: 소통 능력, 인내심, 관찰력\\n전공관심: 교육과정, 아동 발달, 교수 학습 방법\\n관련진로: 교사, 교육행정가, 교육연구원, 교수, 교육컨설턴트\\n',\n",
138
- " '3. 사회복지\\n전공설명: 사회복지는 다양한 사회 구성원의 복지와 삶의 질 향상을 위한 제도와 실천 방법을 연구하는 학문이다.\\n요구역량: 공감 능력, 대인관계능력, 문제 해결력\\n전공관심: 사회적 약자 지원, 복지 정책, 인간 존엄성\\n관련진로: 사회복지사, 청소년지도사, 복지행정가, 가족상담사, 다문화전문가\\n']"
139
- ]
140
- },
141
- "execution_count": 6,
142
- "metadata": {},
143
- "output_type": "execute_result"
144
- }
145
- ],
146
- "source": [
147
- "parts"
148
- ]
149
- },
150
- {
151
- "cell_type": "code",
152
- "execution_count": 7,
153
- "id": "09768d88-b7a6-4ef6-bd3d-e58f23f8e82b",
154
- "metadata": {},
155
- "outputs": [
156
- {
157
- "data": {
158
- "text/plain": [
159
- "'OO 학생은 아래의 세 전공 분야(심리, 교육, 사회복지)에 대해 흥미 수준이 높습니다.\\n각 전공에 대한 정보를 바탕으로, 고등학생 생활기록부 문구를 작성해주세요:\\n\\n1. 심리\\n전공설명: 인간의 행동과 정신 과정을 과학적으로 탐구하는 학문이다.\\n요구역량: 공감 능력, 분석력, 관찰력\\n전공관심: 인간 행동, 감정, 인지 기능\\n관련진로: 임상심리사, 상담사, 조직심리전문가, 연구원, 교수\\n\\n2. 교육\\n전공설명: 인간의 학습과 발달을 연구하고 효과적인 교수법과 교육 제도를 탐구하는 학문이다.\\n요구역량: 소통 능력, 인내심, 관찰력\\n전공관심: 교육과정, 아동 발달, 교수 학습 방법\\n관련진로: 교사, 교육행정가, 교육연구원, 교수, 교육컨설턴트\\n\\n3. 사회복지\\n전공설명: 사회복지는 다양한 사회 구성원의 복지와 삶의 질 향상을 위한 제도와 실천 방법을 연구하는 학문이다.\\n요구역량: 공감 능력, 대인관계능력, 문제 해결력\\n전공관심: 사회적 약자 지원, 복지 정책, 인간 존엄성\\n관련진로: 사회복지사, 청소년지도사, 복지행정가, 가족상담사, 다문화전문가\\n\\n'"
160
- ]
161
- },
162
- "execution_count": 7,
163
- "metadata": {},
164
- "output_type": "execute_result"
165
- }
166
- ],
167
- "source": [
168
- "prompt\n",
169
- "# 너무 길게나와서 학습시킬때 불안함..."
170
- ]
171
- },
172
- {
173
- "cell_type": "code",
174
- "execution_count": 17,
175
- "id": "b178159f-cf48-4989-be66-85af3e7ec510",
176
- "metadata": {},
177
- "outputs": [],
178
- "source": [
179
- "# 선호 전공 3개의 간략한 정보만 추출해 나오는 프롬프트로 수정\n",
180
- "file_path = \"dataset/kcmii_major_rag_summarized.csv\"\n",
181
- "df = pd.read_csv(file_path)\n",
182
- "\n",
183
- "import pandas as pd\n",
184
- "\n",
185
- "def make_major_prompt(df, majors: list) -> str:\n",
186
- " parts = []\n",
187
- " for i, major in enumerate(majors, 1):\n",
188
- " row = df[df['전공명'] == major]\n",
189
- " if row.empty:\n",
190
- " continue\n",
191
- " summary = row.iloc[0]['요약']\n",
192
- " parts.append(f\"{i}. {major}: {summary}\")\n",
193
- "\n",
194
- " majors_str = \", \".join(majors)\n",
195
- " prompt = f\"\"\"OO 학생은 아래의 세 전공 분야({majors_str})에 흥미를 가지고 있습니다.\n",
196
- "이 전공들에 대한 요약 정보를 참고하여, 학생의 활동 속에서 드러난 관심과 역량 또는 융합 가능성을 고려하여 고등학생 생활기록부 문구를 서술형으로 작성해주세요:\n",
197
- "\n",
198
- "{chr(10).join(parts)}\n",
199
- "\"\"\"\n",
200
- " return prompt"
201
- ]
202
- },
203
- {
204
- "cell_type": "code",
205
- "execution_count": 18,
206
- "id": "6c24ded3-2a88-47ad-89c3-40b5e7c0dc01",
207
- "metadata": {},
208
- "outputs": [
209
- {
210
- "name": "stdout",
211
- "output_type": "stream",
212
- "text": [
213
- "OO 학생은 아래의 세 전공 분야(심리, 교육, 사회복지)에 흥미를 가지고 있습니다.\n",
214
- "이 전공들에 대한 요약 정보를 참고하여, 학생의 활동 속에서 드러난 관심과 역량 또는 융합 가능성을 고려하여 고등학생 생활기록부 문구를 서술형으로 작성해주세요:\n",
215
- "\n",
216
- "1. 심리: 인간의 행동과 정신 과정을 과학적으로 탐구하는 학문이다. (주요 역량: 공감 능력, 관심 분야: 인간 행동)\n",
217
- "2. 교육: 인간의 학습과 발달을 연구하고 효과적인 교수법과 교육 제도를 탐구하는 학문이다. (주요 역량: 소통 능력, 관심 분야: 교육과정)\n",
218
- "3. 사회복지: 사회복지는 다양한 사회 구성원의 복지와 삶의 질 향상을 위한 제도와 실천 방법을 연구하는 학문이다. (주요 역량: 공감 능력, 관심 분야: 사회적 약자 지원)\n",
219
- "\n"
220
- ]
221
- }
222
- ],
223
- "source": [
224
- "example_majors = [\"심리\", \"교육\", \"사회복지\"]\n",
225
- "prompt = make_major_prompt(df, example_majors)\n",
226
- "print(prompt)"
227
- ]
228
- },
229
- {
230
- "cell_type": "markdown",
231
- "id": "6467b751-3228-4948-9042-de65f1a3f118",
232
- "metadata": {},
233
- "source": [
234
- "### 50개 전공은 너무 많으니 공통적으로 묶이는 전공(유사분야) 케이스 10개만 분리해 학습데이터 생성\n",
235
- "### LoRA 경략 학습으로 먼저 테스트"
236
- ]
237
- },
238
- {
239
- "cell_type": "code",
240
- "execution_count": 24,
241
- "id": "bc8b0f50-c6e4-49fe-98a4-3ee8d8ef4b83",
242
- "metadata": {},
243
- "outputs": [
244
- {
245
- "name": "stdout",
246
- "output_type": "stream",
247
- "text": [
248
- "사용 중인 디바이스: mps\n"
249
- ]
250
- },
251
- {
252
- "name": "stdin",
253
- "output_type": "stream",
254
- "text": [
255
- "The repository for LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct contains custom code which must be executed to correctly load the model. You can inspect the repository content at https://hf.co/LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct.\n",
256
- "You can avoid this prompt in future by passing the argument `trust_remote_code=True`.\n",
257
- "\n",
258
- "Do you wish to run the custom code? [y/N] y\n"
259
- ]
260
- },
261
- {
262
- "name": "stderr",
263
- "output_type": "stream",
264
- "text": [
265
- "A new version of the following files was downloaded from https://huggingface.co/LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct:\n",
266
- "- configuration_exaone.py\n",
267
- ". Make sure to double-check they do not contain any added malicious code. To avoid downloading new versions of the code file, you can pin a revision.\n"
268
- ]
269
- },
270
- {
271
- "name": "stdin",
272
- "output_type": "stream",
273
- "text": [
274
- "The repository for LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct contains custom code which must be executed to correctly load the model. You can inspect the repository content at https://hf.co/LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct.\n",
275
- "You can avoid this prompt in future by passing the argument `trust_remote_code=True`.\n",
276
- "\n",
277
- "Do you wish to run the custom code? [y/N] y\n"
278
- ]
279
- },
280
- {
281
- "name": "stderr",
282
- "output_type": "stream",
283
- "text": [
284
- "A new version of the following files was downloaded from https://huggingface.co/LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct:\n",
285
- "- modeling_exaone.py\n",
286
- ". Make sure to double-check they do not contain any added malicious code. To avoid downloading new versions of the code file, you can pin a revision.\n",
287
- "Fetching 2 files: 100%|██████████| 2/2 [02:39<00:00, 79.72s/it] \n",
288
- "Loading checkpoint shards: 100%|██████████| 2/2 [00:00<00:00, 37.62it/s]\n"
289
- ]
290
- },
291
- {
292
- "name": "stdout",
293
- "output_type": "stream",
294
- "text": [
295
- "\n",
296
- "📄 생성된 문장:\n",
297
- "\n",
298
- "### 명령:\n",
299
- "다음 전공 정보를 바탕으로 학생의 흥미와 활동을 반영한 생기부 문구를 작성하세요.\n",
300
- "\n",
301
- "### 입력:\n",
302
- "1. 심리: 인간의 행동과 정신 과정을 과학적으로 탐구하는 학문이다. (주요 역량: 공감능력, 관심 분야: 감정)\n",
303
- "2. 교육: 인간의 학습과 발달을 연구하고 효과적인 교수법을 탐색하는 학문이다. (주요 역량: 소통능력, 관심 분야: 아동 발달)\n",
304
- "3. 사회복지: 다양한 사회 구성원의 삶의 질 향상을 위한 제도와 실천 방법을 연구하는 학문이다. (주요 역량: 대인관계능력, 관심 분야: 사회적 약자 지원)\n",
305
- "\n",
306
- "### 출력:\n",
307
- "\"심리학의 따뜻함 속에서 깊이 있게 감정에 귀 기울이며, 교육 현장에서는 아이들의 성장을 이끄는 지혜로운 멘토가 되고 싶습니다. 또한, 사회적 약자들에게 희망의 빛을 전해주기 위해 노력하는 따뜻한 사회복지사가 되어, 모든 사람이 존중받고 행복할 수 있도록 돕고 싶습니다.\"\n"
308
- ]
309
- }
310
- ],
311
- "source": [
312
- "# 허깅페이스에 있는 모델을 임포트 및 토크나이저 로딩용 도구 불러서 테스트\n",
313
- "import torch\n",
314
- "from transformers import AutoTokenizer, AutoModelForCausalLM\n",
315
- "\n",
316
- "device = torch.device(\"mps\" if torch.backends.mps.is_available() else \"cpu\")\n",
317
- "print(\"사용 중인 디바이스:\", device)\n",
318
- "\n",
319
- "# 모델 불러오기\n",
320
- "model_name = \"LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct\"\n",
321
- "tokenizer = AutoTokenizer.from_pretrained(model_name)\n",
322
- "model = AutoModelForCausalLM.from_pretrained(model_name).to(device)\n",
323
- "\n",
324
- "# 사용자가 입력할 텍스트 또는 입력값\n",
325
- "prompt = \"\"\"### 명령:\n",
326
- "다음 전공 정보를 바탕으로 학생의 흥미와 활동을 반영한 생기부 문구를 작성하세요.\n",
327
- "\n",
328
- "### 입력:\n",
329
- "1. 심리: 인간의 행동과 정신 과정을 과학적으로 탐구하는 학문이다. (주요 역량: 공감능력, 관심 분야: 감정)\n",
330
- "2. 교육: 인간의 학습과 발달을 연구하고 효과적인 교수법을 탐색하는 학문이다. (주요 역량: 소통능력, 관심 분야: 아동 발달)\n",
331
- "3. 사회복��: 다양한 사회 구성원의 삶의 질 향상을 위한 제도와 실천 방법을 연구하는 학문이다. (주요 역량: 대인관계능력, 관심 분야: 사회적 약자 지원)\n",
332
- "\n",
333
- "### 출력:\n",
334
- "\"\"\"\n",
335
- "\n",
336
- "# 입력값을 토크나이저를 통해 숫자 토큰으로 변환\n",
337
- "# return_tensors=\"pt\" 입력값을 숫자 토큰화하여 파이토지 텐서 형태로 리턴\n",
338
- "inputs = tokenizer(prompt, return_tensors=\"pt\").to(device)\n",
339
- "\n",
340
- "# gpt는 입력 자체가 항상 하나의 연속된 문장 스퀀스이기 때문에 문장 구분이 필요없음\n",
341
- "if 'token_type_ids' in inputs:\n",
342
- " inputs.pop('token_type_ids')\n",
343
- "\n",
344
- "# torch.no_grad() 추론 시에는 기울기 게산하지 않게하여 속도/메모리 절약 -> 왜 이렇게 해야하나?\n",
345
- "with torch.no_grad():\n",
346
- " # model.generate() 주어진 입력에 대해 텍스트를 생성함\n",
347
- " ## 자세한 내용과 이해는 노션 참고\n",
348
- " outputs = model.generate(\n",
349
- " **inputs,\n",
350
- " # 최대 80개의 새로운 토큰 생성\n",
351
- " ## 모델이 새로 생성할 최대 토큰의 개수\n",
352
- " max_new_tokens=150,\n",
353
- " # 확률 기반 샘플링 활성화\n",
354
- " ## 모델이 다음 토큰을 선택할 때 가장 확률 높은 단어를 무조건 고르는 것이 아니라 확률 분포에서 무작위로 하나 샘플링\n",
355
- " do_sample=True,\n",
356
- " # 확률 높은 상위 50개 중에서 선택\n",
357
- " ## 샘플링할 때 상위 k개의 단어만으로 후보를 제한\n",
358
- " top_k=50,\n",
359
- " # 누적 확률 95%까지 포함한 후보군에서 선택\n",
360
- " ## 상위 단위들의 누적화률이 95% 넘을 때까지 후보군을 누적시킴, 그 안에서 샘플링\n",
361
- " top_p=0.95,\n",
362
- " # 창의성 조절 값\n",
363
- " temperature=0.8,\n",
364
- " repetition_penalty=1.1\n",
365
- " )\n",
366
- "\n",
367
- "# 토큰을 텍스트로 디코딩\n",
368
- "# 모델이 생성한 토큰 시퀀스 중 첫번 째 결과를\n",
369
- "# skip_special_tokens=True 특수토큰 제거\n",
370
- "result = tokenizer.decode(outputs[0], skip_special_tokens=True)\n",
371
- "print(\"\\n📄 생성된 문장:\\n\")\n",
372
- "print(result)"
373
- ]
374
- },
375
- {
376
- "cell_type": "code",
377
- "execution_count": 25,
378
- "id": "382ea67d-298b-4d78-b16c-9f66f3052e21",
379
- "metadata": {},
380
- "outputs": [
381
- {
382
- "name": "stdout",
383
- "output_type": "stream",
384
- "text": [
385
- "\n",
386
- "📄 생성된 문장:\n",
387
- "\n",
388
- "### 명령:\n",
389
- "다음 전공 정보를 바탕으로 학생의 흥미와 활동을 반영한 생기부 문구를 작성하세요.\n",
390
- "\n",
391
- "### 입력:\n",
392
- "1. 심리: 인간의 행동과 정신 과정을 과학적으로 탐구하는 학문이다. (주요 역량: 공감능력, 관심 분야: 감정)\n",
393
- "2. 교육: 인간의 학습과 발달을 연구하고 효과적인 교수법을 탐색하는 학문이다. (주요 역량: 소통능력, 관심 분야: 아동 발달)\n",
394
- "3. 사회복지: 다양한 사회 구성원의 삶의 질 향상을 위한 제도와 실천 방법을 연구하는 학문이다. (주요 역량: 대인관계능력, 관심 분야: 사회적 약자 지원)\n",
395
- "\n",
396
- "### 출력:\n",
397
- "\"심리학을 통해 섬세한 감정의 깊이를 느끼고, 교육은 아이들의 잠재력을 깨우며 성장시키는 데 큰 기쁨을 느꼈습니다. 사회복지에서는 복잡한 사회 문제 속에서도 따뜻한 손길로 어려움을 겪는 이들을 돕는 것이 큰 보람이었습니다.\"\n"
398
- ]
399
- }
400
- ],
401
- "source": [
402
- "# 사용자가 입력할 텍스트 또는 입력값\n",
403
- "prompt = \"\"\"### 명령:\n",
404
- "다음 전공 정보를 바탕으로 학생의 흥미와 활동을 반영한 생기부 문구를 작성하세요.\n",
405
- "\n",
406
- "### 입력:\n",
407
- "1. 심리: 인간의 행동과 정신 과정을 과학적으로 탐구하는 학문이다. (주요 역량: 공감능력, 관심 분야: 감정)\n",
408
- "2. 교육: 인간의 학습과 발달을 연구하고 효과적인 교수법을 탐색하는 학문이다. (주요 역량: 소통능력, 관심 분야: 아동 발달)\n",
409
- "3. 사회복지: 다양한 사회 구성원의 삶의 질 향상을 위한 제도와 실천 방법을 연구하는 학문이다. (주요 역량: 대인관계능력, 관심 분야: 사회적 약자 지원)\n",
410
- "\n",
411
- "### 출력:\n",
412
- "\"\"\"\n",
413
- "\n",
414
- "# 입력값을 토크나이저를 통해 숫자 토큰으로 변환\n",
415
- "# return_tensors=\"pt\" 입력값을 숫자 토큰화하여 파이토지 텐서 형태로 리턴\n",
416
- "inputs = tokenizer(prompt, return_tensors=\"pt\").to(device)\n",
417
- "\n",
418
- "# gpt는 입력 자체가 항상 하나의 연속된 문장 스퀀스이기 때문에 문장 구분이 필요��음\n",
419
- "if 'token_type_ids' in inputs:\n",
420
- " inputs.pop('token_type_ids')\n",
421
- "\n",
422
- "# torch.no_grad() 추론 시에는 기울기 게산하지 않게하여 속도/메모리 절약 -> 왜 이렇게 해야하나?\n",
423
- "with torch.no_grad():\n",
424
- " # model.generate() 주어진 입력에 대해 텍스트를 생성함\n",
425
- " ## 자세한 내용과 이해는 노션 참고\n",
426
- " outputs = model.generate(\n",
427
- " **inputs,\n",
428
- " # 최대 80개의 새로운 토큰 생성\n",
429
- " ## 모델이 새로 생성할 최대 토큰의 개수\n",
430
- " max_new_tokens=150,\n",
431
- " # 확률 기반 샘플링 활성화\n",
432
- " ## 모델이 다음 토큰을 선택할 때 가장 확률 높은 단어를 무조건 고르는 것이 아니라 확률 분포에서 무작위로 하나 샘플링\n",
433
- " do_sample=True,\n",
434
- " # 확률 높은 상위 50개 중에서 선택\n",
435
- " ## 샘플링할 때 상위 k개의 단어만으로 후보를 제한\n",
436
- " top_k=50,\n",
437
- " # 누적 확률 95%까지 포함한 후보군에서 선택\n",
438
- " ## 상위 단위들의 누적화률이 95% 넘을 때까지 후보군을 누적시킴, 그 안에서 샘플링\n",
439
- " top_p=0.95,\n",
440
- " # 창의성 조절 값\n",
441
- " temperature=0.8,\n",
442
- " repetition_penalty=1.1\n",
443
- " )\n",
444
- "\n",
445
- "# 토큰을 텍스트로 디코딩\n",
446
- "# 모델이 생성한 토큰 시퀀스 중 첫번 째 결과를\n",
447
- "# skip_special_tokens=True 특수토큰 제거\n",
448
- "result = tokenizer.decode(outputs[0], skip_special_tokens=True)\n",
449
- "print(\"\\n📄 생성된 문장:\\n\")\n",
450
- "print(result)"
451
- ]
452
- },
453
- {
454
- "cell_type": "code",
455
- "execution_count": null,
456
- "id": "7f17e54f-824f-4c2c-9318-bfcf92c03315",
457
- "metadata": {},
458
- "outputs": [],
459
- "source": []
460
- }
461
- ],
462
- "metadata": {
463
- "kernelspec": {
464
- "display_name": "Python [conda env:base] *",
465
- "language": "python",
466
- "name": "conda-base-py"
467
- },
468
- "language_info": {
469
- "codemirror_mode": {
470
- "name": "ipython",
471
- "version": 3
472
- },
473
- "file_extension": ".py",
474
- "mimetype": "text/x-python",
475
- "name": "python",
476
- "nbconvert_exporter": "python",
477
- "pygments_lexer": "ipython3",
478
- "version": "3.12.7"
479
- }
480
- },
481
- "nbformat": 4,
482
- "nbformat_minor": 5
483
- }