|
--- |
|
base_model: unsloth/gemma-2-2b-it |
|
tags: |
|
- text-generation-inference |
|
- transformers |
|
- gemma2 |
|
- trl |
|
license: creativeml-openrail-m |
|
language: |
|
- ko |
|
--- |
|
|
|
# QCR + GEN for Conversational RAG Chatbot |
|
|
|
## κ°μ |
|
|
|
μ΄ λͺ¨λΈμ **QCR**(Query Context Rewriter)κ³Ό **GEN**(Generator) κΈ°λ₯μ λμμ μννλ νλμ LoRA μ΄λν° λͺ¨λΈμ
λλ€. κ²μ κΈ°λ° μ±λ΄μ΄λ RAG(Retrieval-Augmented Generation) μμ€ν
μμ νμ©ν μ μλλ‘ μ€κ³λμμ΅λλ€. |
|
|
|
- **QCR κΈ°λ₯**: μ¬μ©μμ μ
λ ₯μ λΆμνμ¬ κ²μμ νμν 쿼리λ₯Ό μμ±νκ±°λ, νμνμ§ μμ κ²½μ° λΉ λ¬Έμμ΄μ λ°νν©λλ€. |
|
- **GEN κΈ°λ₯**: κ²μλ λ¬Έμ μ²ν¬(λλ 컨ν
μ€νΈ)λ₯Ό νμ©νμ¬ μμ°μ€λ¬μ΄ λ΅λ³μ μμ±ν©λλ€. |
|
|
|
μ΄ λͺ¨λΈμ 4bit μμνλ λ²μ μ μ§μνμ§ μμ΅λλ€. |
|
|
|
## λ°μ΄ν°μ
λ° νμ΅ νΉμ§ |
|
|
|
- **10κ° μ£Όμ ν ν½**(κ°μ‘±/μ£Όκ±°, μ€ν¬μΈ , μΌν, λ―Έμ©/κ±΄κ° λ±)μ λν λ°μ΄ν°λ₯Ό μ¦κ°νμ¬ μ μ. |
|
- **μ½ 18,000κ°μ QCR + GEN μν** ν¬ν¨. |
|
- **QCR λ°μ΄ν°** |
|
- μΌλ° λν(μΈμ¬, λλ΄ λ±)λ **λΉ λ¬Έμμ΄**(`""`)μ λ°ννμ¬ κ²μμ μλ΅νκ³ μ¦μ λ΅λ³ κ°λ₯. |
|
- **GEN λ°μ΄ν°** |
|
- κ²μλ λ¬Έμ μ²ν¬(μ΅λ 5κ°, κ° 512 ν ν° μ΄ν)λ₯Ό νμ©νμ¬ λ΅λ³ μμ±. |
|
- **6κ°μ§ λ€μν λ°μ΄ν° ꡬμ±**: |
|
1. κ΄λ ¨ μ λ³΄κ° μλ λ΅λ³ |
|
2. κ΄λ ¨ μ λ³΄κ° μλ λ΅λ³ |
|
3. κ΄λ ¨μ±μ΄ νΌμ¬λ μν© |
|
4. κ²μ μ²ν¬κ° μ ν μλ κ²½μ° λ± |
|
|
|
μ΄λ¬ν λ°μ΄ν° ꡬμ±μ ν΅ν΄ **λ μμ°μ€λ¬μ΄ λν**λ₯Ό ꡬνν μ μλλ‘ νμ΅λμμ΅λλ€. |
|
|
|
## λͺ¨λΈ μ¬μ© λ°©μ |
|
|
|
1. **QCRμ ν΅ν΄ κ²μ 쿼리 μμ±** β κ²μ μμ§μ ν΅ν΄ λ¬Έμ κ²μ β **GENμΌλ‘ λ΅λ³ μμ±** |
|
2. λΆνμν κ²μ λ°©μ§(QCRμ΄ λΉ λ¬Έμμ΄ λ°ν) β μΈμ¬, μ‘λ΄ λ±μ μ§μ μλ΅ κ°λ₯. |
|
3. 4bit μμν λͺ¨λΈ μ¬μ© κ°λ₯ β λ©λͺ¨λ¦¬ μ κ° λ° κ³ μ μΆλ‘ κ°λ₯. |
|
|
|
## ν둬ννΈ ν
νλ¦Ώ |
|
|
|
### Query Context Rewriter (QCR) |
|
``` |
|
# Query Rewriter |
|
|
|
### Instruction: |
|
λ€μμ λν κΈ°λ‘(Context)μ μ¬μ©μμ μ§λ¬Έ(Input)μ
λλ€. |
|
μ¬μ©μμ μ§λ¬Έμ λ΅μ μ 곡νκΈ° μν΄ νμν λ¨μΌ λ¬Έμμ΄ κ²μ 쿼리λ₯Ό μμ±νμΈμ. |
|
κ²μμ΄ νμνμ§ μκ±°λ μΏΌλ¦¬κ° λΆνμν κ²½μ°(μΈμ¬, μ‘λ΄ λ±)μλ λΉ λ¬Έμμ΄μ λ°ννμΈμ. |
|
|
|
μ΅μ’
μΆλ ₯ νμμ {'search': '<κ²μ 쿼리>'}μ
λλ€. |
|
|
|
### Conversation: |
|
{λν λ§₯λ½} |
|
|
|
### Input: |
|
{μ¬μ©μ μ§λ¬Έ} |
|
|
|
### Response: |
|
{'search': '{μμ±λ κ²μ 쿼리 λλ λΉ λ¬Έμμ΄}'} |
|
``` |
|
|
|
### Generator (GEN) |
|
``` |
|
# Generator |
|
|
|
### Instruction: |
|
λΉμ μ μΈλΆκ²μμ μ΄μ©νμ¬ μ¬μ©μμκ² λμμ μ£Όλ μΈκ³΅μ§λ₯ μ‘°μμ
λλ€. |
|
|
|
- Contextλ μΈλΆκ²μμ ν΅ν΄ λ°νλ μ¬μ©μ μμ²κ³Ό κ΄λ ¨λ μ 보λ€μ
λλ€. |
|
- Contextλ₯Ό νμ©ν λ λ¬Έμ₯ λμ μ¬μ©ν λ¬Έμ μ‘°κ°μ [Index]λ₯Ό λΆμ΄κ³ μμ°μ€λ¬μ΄ λ΅λ³μ μμ±νμΈμ. (e.g. [1]) |
|
- Contextμ μ λ³΄κ° μ¬μ©μ μμ²κ³Ό κ΄λ ¨μ΄ μκ±°λ λμμ΄ μλ μ μμ΅λλ€. κ΄λ ¨μλ μ λ³΄λ§ νμ©νκ³ , μλ μ 보λ₯Ό μ λ μ§μ΄λ΄μ§ λ§μΈμ. |
|
- λλλ‘μ΄λ©΄ μΌλ° μ§μμΌλ‘ λ΅λ³νμ§ λ§κ³ , μ΅λν Contextλ₯Ό ν΅ν΄ λ΅λ³μ νλ €κ³ νμΈμ. |
|
- Contextμ μμ κ²½μ°μλ μ΄ μ μ μΈκΈνλ©° μ¬μ£νκ³ λ€λ₯Έ μ£Όμ λ μ§λ¬Έμ μΆμ²ν΄μ£ΌμΈμ. |
|
- μ¬μ©μ μμ²μ μλ§λ μμ°μ€λ¬μ΄ λνλ₯Ό νμΈμ. |
|
- νμ μ‘΄λλ§λ‘ λ΅λ³νμΈμ. |
|
|
|
### Conversation: |
|
{λν λ§₯λ½} |
|
|
|
### Context: |
|
{κ²μλ λ¬Έμ μ²ν¬} |
|
|
|
### Input: |
|
{μ¬μ©μ μ§λ¬Έ} |
|
|
|
### Response: |
|
{λͺ¨λΈμ΄ μμ±ν μλ΅} |
|
``` |
|
|
|
# μμ λν μν |
|
|
|
## 1. κ²μμ΄ νμ μλ κ²½μ° |
|
### μμ 1: μΈμ¬ λ° μΌλ°μ μΈ λν |
|
``` |
|
User> μλ
? λ λꡬλ? |
|
|
|
[QCR λ¨κ³] κ²μ 쿼리 μμ±... |
|
{'search': ''} β κ²μ λΆνμλ‘ νλ¨. |
|
|
|
[λ΅λ³ μμ± μ€]... |
|
Assistant> μλ
νμΈμ! μ λ μΈλΆκ²μμ ν΅ν΄ λ€μν μ 보λ₯Ό νμ©νμ¬ μ¬μ©μλκ» λμμ μ£Όλ μΈκ³΅μ§λ₯ μ‘°μμ
λλ€. μ΄λ€ μ£Όμ λ μ§λ¬Έμ΄λ νΈνκ² λ§μν΄ μ£ΌμΈμ. μ€λ νλ£¨κ° μ΄λ μ
¨λμ? |
|
``` |
|
|
|
## 2. κ²μμ΄ νμν κ²½μ° |
|
### μμ 2: μν μΆμ² μμ² |
|
``` |
|
User> λ·νλ¦μ€μμ λ³Όλ§ν μν μΆμ²ν΄μ€. |
|
|
|
[QCR λ¨κ³] κ²μ 쿼리 μμ±... |
|
{'search': 'λ·νλ¦μ€ μΆμ² μν λͺ©λ‘'} β κ²μ νμ. |
|
|
|
[κ²μλ λ¬Έμ νμ© ν λ΅λ³ μμ±] |
|
Assistant> λ·νλ¦μ€μμ μΈκΈ° μλ μν λͺ©λ‘μ λ€μκ³Ό κ°μ΅λλ€. |
|
1. 'λΈλ λ―Έλ¬: λ°΄λμ€λ΄μΉ' |
|
2. 'λ 룩 μ
' |
|
3. 'μ΅μ€νΈλμ
' |
|
λ κΆκΈν μ μ΄ μμΌμλ©΄ λ§μν΄μ£ΌμΈμ! |
|
``` |
|
|
|
### μμ 3: νΉμ μ 보 μμ² (μ€ν¬μΈ κ·μΉ) |
|
``` |
|
User> 볡μ±μ λ£°μ΄ μ΄λ»κ² λλμ? |
|
|
|
[QCR λ¨κ³] κ²μ 쿼리 μμ±... |
|
{'search': 'λ³΅μ± λ£° μ€λͺ
'} β κ²μ νμ. |
|
|
|
[κ²μλ λ¬Έμ νμ© ν λ΅λ³ μμ±] |
|
Assistant> λ³΅μ± κ²½κΈ°μ κΈ°λ³Έ λ£°μ λ€μκ³Ό κ°μ΅λλ€. |
|
- κ° λΌμ΄λλ 3λΆ μ§νλλ©°, 1λΆμ ν΄μμ΄ μ£Όμ΄μ§λλ€. |
|
- κΈλ¬λΈ μ°©μ©μ νμμ΄λ©°, λ€μ΄λ μ μλ 10μ΄ μμ μΌμ΄λμΌ ν©λλ€. |
|
- μ£Όμ ν격 κΈ°μ λ‘λ μ€νΈλ μ΄νΈ, ν
, μ΄νΌμ»· λ±μ΄ μμ΅λλ€. |
|
λ κΆκΈν μ¬νμ΄ μμΌμλ©΄ μ§λ¬Έν΄μ£ΌμΈμ! |
|
``` |
|
|
|
## 3. κ³Όκ±° λν κΈ°λ° μ§λ¬Έ |
|
### μμ 4: λ¬Έλ§₯μ μ μ§ν μ§λ¬Έ |
|
``` |
|
User> λ·νλ¦μ€ μν μΆμ²ν΄μ€. |
|
|
|
[QCR λ¨κ³] κ²μ 쿼리 μμ±... |
|
{'search': 'λ·νλ¦μ€ μΆμ² μν λͺ©λ‘'} β κ²μ νμ. |
|
|
|
[κ²μλ λ¬Έμ νμ© ν λ΅λ³ μμ±] |
|
Assistant> λ·νλ¦μ€μμ μΈκΈ° μλ μν λͺ©λ‘μ λ€μκ³Ό κ°μ΅λλ€. |
|
1. 'λΈλ λ―Έλ¬: λ°΄λμ€λ΄μΉ' |
|
2. 'λ 룩 μ
' |
|
3. 'μ΅μ€νΈλμ
' |
|
|
|
User> μ€μ§μ΄ κ²μμ μ΄λ? |
|
|
|
[QCR λ¨κ³] κ²μ 쿼리 μμ±... |
|
{'search': 'μ€μ§μ΄ κ²μ μ 보'} β κ²μ νμ. |
|
|
|
[κ²μλ λ¬Έμ νμ© ν λ΅λ³ μμ±] |
|
Assistant> 'μ€μ§μ΄ κ²μ'μ λ·νλ¦μ€μμ λ°©μλ μΈκΈ° μλ°μ΄λ² λλΌλ§λ‘, 456μ΅ μμ μκΈμ 건 μμ‘΄ κ²μμ λ€λ£Ήλλ€. κ²μμλ '무κΆνκ½μ΄ νΌμμ΅λλ€', 'λ¬κ³ λ λ½κΈ°' λ±μ νκ΅ μ ν΅ λμ΄κ° ν¬ν¨λμ΄ μμ΅λλ€. μμ¦ 2 μ μμ΄ νμ λμμΌλ©°, 2024λ
λ°©μ μμ μ
λλ€. λ μμΈν μ λ³΄κ° νμνμλ©΄ μλ €μ£ΌμΈμ! |
|
``` |
|
|
|
## 4. κ°μμ€λ¬μ΄ ν ν½ λ³κ²½ |
|
### μμ 5: κ²μ μ€κ°μ μ£Όμ μ ν |
|
``` |
|
User> λ·νλ¦μ€μμ λ³Όλ§ν μν μΆμ²ν΄μ€. |
|
|
|
[QCR λ¨κ³] κ²μ 쿼리 μμ±... |
|
{'search': 'λ·νλ¦μ€ μΆμ² μν λͺ©λ‘'} β κ²μ νμ. |
|
|
|
User> κ·Όλ° λ μ¬λ§ κ·μΉμ μ΄λ»κ² λΌ? |
|
|
|
[QCR λ¨κ³] κ²μ 쿼리 μμ±... |
|
{'search': 'λ μ¬λ§ κ·μΉ μ€λͺ
'} β κ²μ νμ. |
|
|
|
[κ²μλ λ¬Έμ νμ© ν λ΅λ³ μμ±] |
|
Assistant> λ μ¬λ§μ λμ§κΈ°, μ°λ¬λ¨λ¦¬κΈ°, κΊΎκΈ° λ±μ κΈ°μ μ μ΄μ©νμ¬ μλλ₯Ό μ μνλ μ€ν¬μΈ μ
λλ€. κ²½κΈ° λ°©μμ μ¬λ¦Όν½ μ€νμΌμΈ 'κ·Έλ μ½λ‘λ§ν'κ³Ό 'μμ ν'μΌλ‘ λλ©λλ€. νΉμ κ·μΉμ΄ κΆκΈνμλ€λ©΄ μΆκ°λ‘ μ§λ¬Έν΄μ£ΌμΈμ! |
|
``` |
|
|
|
μ΄λ¬ν μμλ€μ μ°Έκ³ νμ¬ κ²μ κΈ°λ° λͺ¨λΈμ ν¨κ³Όμ μΌλ‘ νμ©ν μ μμ΅λλ€. |
|
|
|
## ν
μ€νΈ λ
ΈνΈλΆ (Colab) |
|
|
|
κ°λ¨ν μ½λλ₯Ό μ€νν΄λ³΄λ €λ©΄ [test_run.ipynb](https://colab.research.google.com/github/Austin9/gemma-2-9b-it-Ko-RAG/blob/main/test_run.ipynb) νμΌμ Google Colabμμ λ°λ‘ μ΄μ΄λ³΄μΈμ. |
|
- **λ°νμ μ ν**μμ GPUλ₯Ό **T4**λ‘ μ ννμΈμ. |
|
- μ μ½λ© νμΌμ 9b λͺ¨λΈ μΆλ‘ νμΌμ΄κΈ° λλ¬Έμ, λͺ¨λΈ λ‘λ©μ 9b -> 2bλ‘ λ³κ²½νκ³ load_in_4bit λ³μλ₯Ό Falseλ‘ λ³κ²½ ν μ¬μ©ν΄μΌν©λλ€. |
|
- μ΄ν, **μ
μ μμλλ‘ μ€ν**νλ©° νμν λΌμ΄λΈλ¬λ¦¬λ₯Ό μ€μΉνκ³ λͺ¨λΈ λ° FAISS μΈλ±μ€λ₯Ό λ‘λν©λλ€. |
|
- μμ±λ RAG κΈ°λ° μ±λ΄ μμ μ½λλ₯Ό 체νν μ μμ΅λλ€. |
|
|
|
## μ£Όμμ¬ν |
|
- κ²μ μμ§κ³Ό ν¨κ» μ¬μ©ν κ²½μ° **QCRμ λ¨Όμ μ€ννμ¬ κ²μ 쿼리λ₯Ό μμ±**ν ν, κ²μλ λ¬Έμ μ²ν¬λ₯Ό λ°νμΌλ‘ **GENμ μ€ν**ν΄μΌ ν©λλ€. |
|
- κ²μλ μ²ν¬λ μ΅λ **512 ν ν°** κΈΈμ΄μ΄λ©°, νμ΅ κ³Όμ μμ **μ΅λ 5κ°μ μ²ν¬**λ₯Ό λ°μνμμΌλ―λ‘ μ΄μ λ§μΆ° νμ©νλ κ²μ΄ μ€μν©λλ€. |
|
- QCRμ **ν둬ννΈ νμμ λ°λμ μ§μΌμΌ** κ²μ 쿼리 μμ±μ΄ μ¬λ°λ₯΄κ² μ΄λ£¨μ΄μ§λλ€. |
|
- GENμ λ΅λ³μμλ κ²μλ λ¬Έμ μΆμ²(Index)λ₯Ό μ νν κΈ°μ¬ν΄μΌ νλ©°, κ΄λ ¨μ±μ΄ μμΌλ©΄ μλλλ‘ μλ΄ν΄μΌ ν©λλ€. |
|
- μ 2b λͺ¨λΈ κ°μ κ²½μ°λ 9b λͺ¨λΈμ λΉνμ¬ μΈμ΄μ , λ
Όλ¦¬μ μΈ‘λ©΄μμ μ¦μ ν 루μλ€μ΄μ
μ 체νν μ μμ΅λλ€. |
|
|
|
μ΄ λͺ¨λΈμ ν΅ν΄ λ³΄λ€ **ν¨μ¨μ μΈ κ²μ + μ νν λ΅λ³**μ μ 곡νλ AI μμ€ν
μ ꡬμΆν μ μμ΅λλ€. |
|
|
|
|