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κ°μ§ λ€μν λ°μ΄ν° ꡬμ±:
- κ΄λ ¨ μ λ³΄κ° μλ λ΅λ³
- κ΄λ ¨ μ λ³΄κ° μλ λ΅λ³
- κ΄λ ¨μ±μ΄ νΌμ¬λ μν©
- κ²μ μ²ν¬κ° μ ν μλ κ²½μ° λ±
μ΄λ¬ν λ°μ΄ν° ꡬμ±μ ν΅ν΄ λ μμ°μ€λ¬μ΄ λνλ₯Ό ꡬνν μ μλλ‘ νμ΅λμμ΅λλ€.
λͺ¨λΈ μ¬μ© λ°©μ
- QCRμ ν΅ν΄ κ²μ 쿼리 μμ± β κ²μ μμ§μ ν΅ν΄ λ¬Έμ κ²μ β GENμΌλ‘ λ΅λ³ μμ±
- λΆνμν κ²μ λ°©μ§(QCRμ΄ λΉ λ¬Έμμ΄ λ°ν) β μΈμ¬, μ‘λ΄ λ±μ μ§μ μλ΅ κ°λ₯.
- 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 νμΌμ Google Colabμμ λ°λ‘ μ΄μ΄λ³΄μΈμ.
- λ°νμ μ νμμ GPUλ₯Ό T4λ‘ μ ννμΈμ.
- μ΄ν, μ μ μμλλ‘ μ€ννλ©° νμν λΌμ΄λΈλ¬λ¦¬λ₯Ό μ€μΉνκ³ λͺ¨λΈ λ° FAISS μΈλ±μ€λ₯Ό λ‘λν©λλ€.
- μμ±λ RAG κΈ°λ° μ±λ΄ μμ μ½λλ₯Ό 체νν μ μμ΅λλ€
μ£Όμμ¬ν
- κ²μ μμ§κ³Ό ν¨κ» μ¬μ©ν κ²½μ° QCRμ λ¨Όμ μ€ννμ¬ κ²μ 쿼리λ₯Ό μμ±ν ν, κ²μλ λ¬Έμ μ²ν¬λ₯Ό λ°νμΌλ‘ GENμ μ€νν΄μΌ ν©λλ€.
- κ²μλ μ²ν¬λ μ΅λ 512 ν ν° κΈΈμ΄μ΄λ©°, νμ΅ κ³Όμ μμ μ΅λ 5κ°μ μ²ν¬λ₯Ό λ°μνμμΌλ―λ‘ μ΄μ λ§μΆ° νμ©νλ κ²μ΄ μ€μν©λλ€.
- QCRμ ν둬ννΈ νμμ λ°λμ μ§μΌμΌ κ²μ 쿼리 μμ±μ΄ μ¬λ°λ₯΄κ² μ΄λ£¨μ΄μ§λλ€.
- GENμ λ΅λ³μμλ κ²μλ λ¬Έμ μΆμ²(Index)λ₯Ό μ νν κΈ°μ¬ν΄μΌ νλ©°, κ΄λ ¨μ±μ΄ μμΌλ©΄ μλλλ‘ μλ΄ν΄μΌ ν©λλ€.
μ΄ λͺ¨λΈμ ν΅ν΄ λ³΄λ€ ν¨μ¨μ μΈ κ²μ + μ νν λ΅λ³μ μ 곡νλ AI μμ€ν μ ꡬμΆν μ μμ΅λλ€.
Model tree for Austin9/gemma-2-9b-it-Ko-RAG
Base model
google/gemma-2-9b