File size: 5,193 Bytes
56af566
 
 
 
 
 
 
 
e4849c4
56af566
 
 
99d50f4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
794f2f9
99d50f4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56af566
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
---
base_model: unsloth/gemma-2-2b-it
tags:
- text-generation-inference
- transformers
- unsloth
- gemma2
- trl
license: openrail
language:
- en
---
# Gemma2 ν•œκ΅­μ–΄ μ „μš© μ–΄λŒ‘ν„° (Gemma2 Korean Adapter)

λ³Έ λ ˆν¬μ§€ν† λ¦¬λŠ” **unsloth/gemma-2-2b-it** λͺ¨λΈμ„ 기반으둜, **ν•œκ΅­μ–΄ 질의 λΆ„λ₯˜ 및 검색 쿼리 μž¬μž‘μ„±**을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ μ–΄λŒ‘ν„°(Adapter) μ˜ˆμ‹œμž…λ‹ˆλ‹€.  
**비상업적 μš©λ„**둜 배포되며, 상업적 μ‚¬μš©μ€ μ œν•œλ©λ‹ˆλ‹€. λ³Έ λͺ¨λΈ 및 μ–΄λŒ‘ν„°μ— λŒ€ν•œ μ €μž‘κΆŒμ€ 원 κ°œλ°œμžμ—κ²Œ 있으며, 무단 μ „μž¬ 및 λ°°ν¬λŠ” κΈˆμ§€λ©λ‹ˆλ‹€.

---

## μ£Όμš” κΈ°λŠ₯

1. **질의 λΆ„λ₯˜(Query Classification)**  
   - μ‚¬μš©μžμ˜ μ§ˆμ˜κ°€ 인사, 농담, κ²‰μΉ˜λ ˆ λ“±μ˜ μ‹€μ œ 검색이 λΆˆν•„μš”ν•œ 경우, `{"search": ""}`(빈 λ¬Έμžμ—΄) ν˜•νƒœλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€.  
   - 즉, 검색이 μ „ν˜€ ν•„μš”ν•˜μ§€ μ•Šμ€ 상황을 μžλ™μœΌλ‘œ λΆ„λ₯˜ν•˜μ—¬ 쿼리λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
   
2. **검색 쿼리 μž‘μ„±(Search Query Rewriting)**  
   - μ‹€μ œ 검색이 ν•„μš”ν•œ 질문의 경우, **κ³Όκ±° λŒ€ν™”(Context)**λ₯Ό κ³ λ €ν•˜μ—¬ λΆˆμ™„μ „ν•œ 쿼리λ₯Ό λ³΄μ™„ν•˜κ±°λ‚˜, λΆˆν•„μš”ν•œ 뢀뢄을 μ œκ±°ν•΄ μ΅œμ ν™”λœ 검색어λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.  
   - μ΅œμ’… 좜λ ₯은 JSON ν˜•μ‹μœΌλ‘œ `{"search": "<검색 쿼리>"}` ν˜•νƒœλ₯Ό λ”°λ¦…λ‹ˆλ‹€.

---

## ν•™μŠ΅ 데이터 ꡬ성

- **λŒ€ν™”(Context)**: μ‚¬μš©μžμ™€μ˜ κ³Όκ±° λŒ€ν™” 기둝을 κ°œν–‰(`\n`)으둜 κ΅¬λΆ„ν•˜μ—¬ 이어뢙인 ν…μŠ€νŠΈ
- **μ§€μ‹œλ¬Έ(Instruction)**: λͺ¨λΈμ—κ²Œ μ–΄λ–€ μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ”μ§€ μ•Œλ €μ£ΌλŠ” ν…μŠ€νŠΈ
- **μž…λ ₯(Input)**: μ‚¬μš©μžκ°€ λ§ˆμ§€λ§‰μœΌλ‘œ μž…λ ₯ν•œ μ‹€μ œ 질의
- **응닡(Response)**: μ΅œμ’… JSON ν˜•μ‹(`{"search": "<검색어>"}`)으둜 μž‘μ„±λœ 검색 쿼리 κ²°κ³Ό

λŒ€ν™”μ™€ μš”μ²­μ„ ν•˜λ‚˜μ˜ ν…μŠ€νŠΈλ‘œ 합쳐 ν•™μŠ΅ν•  수 μžˆλ„λ‘, Hugging Face `Dataset`을 ν™œμš©ν•˜μ—¬ μ•„λž˜μ™€ 같은 ν…œν”Œλ¦Ώμ— 맞좰 λ³€ν™˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

---

## ν”„λ‘¬ν”„νŠΈ ν…œν”Œλ¦Ώ(μ˜ˆμ‹œ)

λ³Έ μ–΄λŒ‘ν„°λŠ” μ•„λž˜μ™€ 같은 ν…œν”Œλ¦Ώ ꡬ쑰λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λͺ¨λΈμ— μž…λ ₯될 μ΅œμ’… λ¬Έμžμ—΄μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

```
### Context:
{conversation}

### Instruction:
λ‹€μŒμ€ λŒ€ν™” 기둝(Context)와 μ‚¬μš©μžμ˜ 질문(Input)μž…λ‹ˆλ‹€. μ‚¬μš©μžμ˜ μ§ˆλ¬Έμ— 닡을 μ œκ³΅ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 단일 λ¬Έμžμ—΄ 검색 쿼리λ₯Ό μƒμ„±ν•˜μ„Έμš”. λŒ€ν™” 기둝을 κ³ λ €ν•˜μ—¬ 검색 쿼리λ₯Ό μƒμ„±ν•˜μ„Έμš”. 검색이 ν•„μš”ν•˜μ§€ μ•Šκ±°λ‚˜ 쿼리가 λΆˆν•„μš”ν•œ 경우(μΈμ‚¬λ‚˜, κ²‰μΉ˜λ ˆ, 농담) 빈 λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•˜μ„Έμš”.

μ΅œμ’… 좜λ ₯ ν˜•μ‹μ€ {'search': '<검색 쿼리>'}μž…λ‹ˆλ‹€.

### Input:
{input}

### Response:
{response}
```

- `{conversation}`: κ³Όκ±° λŒ€ν™” νžˆμŠ€ν† λ¦¬λ₯Ό κ°œν–‰(`\n`)으둜 κ΅¬λΆ„ν•˜μ—¬ 이어뢙인 λ¬Έμžμ—΄
- `{instruction}`: μ‚¬μš©μž μš”μ²­μ— λŒ€ν•œ 지침
- `{input}`: μ΅œμ’… μ‚¬μš©μž 질의
- `{response}`: JSON ν˜•μ‹(예: `{"search": "<검색어>"}`)으둜 μž‘μ„±λœ κ²°κ³Ό

λͺ¨λΈμ˜ EOS 토큰(예: `tokenizer.eos_token`)을 μ΄μš©ν•΄ λ¬Έμž₯ λ‹¨μœ„λ₯Ό κ΅¬λΆ„ν•©λ‹ˆλ‹€.

---

## μ‚¬μš© μ˜ˆμ‹œ

1. **인사, 농담, κ²‰μΉ˜λ ˆ 질문**  
   - Input: β€œμ•ˆλ…•? 잘 지내?”  
   - λΆ„λ₯˜ κ²°κ³Ό: 검색이 λΆˆν•„μš”ν•˜λ‹€κ³  νŒλ‹¨ β†’ `{"search": ""}`  

2. **검색 ν•„μš”ν•œ 질문**  
   - Context: 이전 λŒ€ν™”μ—μ„œ β€œλ‰΄μš• 맛집” 이야기λ₯Ό ν•˜κ³  μžˆμ—ˆμŒ  
   - Input: β€œκ·ΈλŸΌ λ‰΄μš•μ—μ„œ 제일 인기 μžˆλŠ” 햄버거 κ°€κ²Œ μ°Ύμ•„μ€˜β€  
   - λͺ¨λΈ 응닡: `{"search": "λ‰΄μš• 인기 햄버거 κ°€κ²Œ"}`  
   - κ³Όκ±° λŒ€ν™”λ₯Ό κ³ λ €ν•˜μ—¬ ν‚€μ›Œλ“œλ₯Ό μΆ”μΆœ 및 μž¬μž‘μ„±

---

## λͺ¨λΈ ꡬ쑰

- **Base Model**: [unsloth/gemma-2-2b-it](https://huggingface.co/unsloth/gemma-2-2b-it)  
- **μ–Έμ–΄(Language)**: ν•œκ΅­μ–΄μ— μ΅œμ ν™”λœ μ–΄λŒ‘ν„°  

---

## μ‚¬μš© 방법

1. **데이터셋 생성**  
   - `merged_dataset.json` ν˜•νƒœλ‘œ λŒ€ν™”μ™€ μ§ˆμ˜κ°€ ν¬ν•¨λœ 원본 데이터λ₯Ό μ€€λΉ„ν•©λ‹ˆλ‹€.  
   - μœ„ μ˜ˆμ‹œ 슀크립트처럼, `{"search": "<검색어>"}` ν˜•νƒœμ˜ μ΅œμ’… `Response`λ₯Ό μƒμ„±ν•˜λ„λ‘ μ „μ²˜λ¦¬(토큰 수 μ œν•œ, λΆˆν•„μš”ν•œ λŒ€ν™” 제거 λ“±)λ₯Ό κ±°μΉ©λ‹ˆλ‹€.

2. **포맷 λ³€ν™˜**  
   - ν…œν”Œλ¦Ώ(`custom_prompt`)을 μ‚¬μš©ν•΄ `<conversation>`, `<instruction>`, `<input>`, `<response>`λ₯Ό ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ ν•©μΉ©λ‹ˆλ‹€.
   - Hugging Face `Dataset` 객체에 맡핑(map)ν•˜μ—¬ `text` μ»¬λŸΌμ„ μƒμ„±ν•©λ‹ˆλ‹€.

3. **데이터 λΆ„ν• **  
   - μ˜ˆμ‹œ μ½”λ“œμ—μ„œμ²˜λŸΌ train/val 데이터λ₯Ό λΆ„λ¦¬ν•œ ν›„, μ›ν•˜λŠ” λ―Έμ„Έμ‘°μ • λ°©λ²•μœΌλ‘œ ν•™μŠ΅ν•©λ‹ˆλ‹€.

4. **μΆ”λ‘ (Inference)**  
   - ν•™μŠ΅λœ λͺ¨λΈ ν˜Ήμ€ μ–΄λŒ‘ν„°λ₯Ό λ‘œλ“œν•œ λ’€, μ‚¬μš©μž μž…λ ₯을 λ°›μ•„ ν…œν”Œλ¦Ώμ— 맞좰 λͺ¨λΈμ— μ „λ‹¬ν•©λ‹ˆλ‹€.
   - λͺ¨λΈμ˜ μ΅œμ’… 좜λ ₯이 `{"search": "<검색어>"}` ν˜•νƒœμΈμ§€ ν™•μΈν•©λ‹ˆλ‹€.
   - `search` ν•„λ“œκ°€ 빈 λ¬Έμžμ—΄(`""`)이라면 검색이 ν•„μš”ν•˜μ§€ μ•ŠμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

---

## λΌμ΄μ„ μŠ€

- λ³Έ μ–΄λŒ‘ν„°λŠ” **비상업적 μš©λ„**둜만 μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.
- 재배포 및 νŒŒμƒ ν”„λ‘œμ νŠΈ 생성 μ‹œ, λ°˜λ“œμ‹œ 비상업적 λͺ©μ μ΄μ–΄μ•Ό ν•˜λ©°, 2μ°¨ μ°½μž‘ μ‹œ μ›μž‘μž ν‘œκΈ°λ₯Ό μ€€μˆ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
- 상업적 이용이 ν•„μš”ν•œ 경우 λ³„λ„μ˜ ν˜‘μ˜λ₯Ό 톡해 ν—ˆκ°€λ₯Ό λ°›μ•„μ•Ό ν•©λ‹ˆλ‹€.

---