QCR + GEN for Conversational RAG Chatbot

κ°œμš”

이 λͺ¨λΈμ€ QCR(Query Context Rewriter)κ³Ό GEN(Generator) κΈ°λŠ₯을 λ™μ‹œμ— μˆ˜ν–‰ν•˜λŠ” 4λΉ„νŠΈλ‘œ 머지&μ–‘μžν™”λœ λͺ¨λΈμž…λ‹ˆλ‹€. 검색 기반 μ±—λ΄‡μ΄λ‚˜ RAG(Retrieval-Augmented Generation) μ‹œμŠ€ν…œμ—μ„œ ν™œμš©ν•  수 μžˆλ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  • QCR κΈ°λŠ₯: μ‚¬μš©μžμ˜ μž…λ ₯을 λΆ„μ„ν•˜μ—¬ 검색에 ν•„μš”ν•œ 쿼리λ₯Ό μƒμ„±ν•˜κ±°λ‚˜, ν•„μš”ν•˜μ§€ μ•Šμ„ 경우 빈 λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.
  • GEN κΈ°λŠ₯: κ²€μƒ‰λœ λ¬Έμ„œ 청크(λ˜λŠ” μ»¨ν…μŠ€νŠΈ)λ₯Ό ν™œμš©ν•˜μ—¬ μžμ—°μŠ€λŸ¬μš΄ 닡변을 μƒμ„±ν•©λ‹ˆλ‹€.

λ‘œλ”©μ‹œ 였직 5.2GB만의 VRAM을 μ‚¬μš©ν•©λ‹ˆλ‹€.

데이터셋 및 ν•™μŠ΅ νŠΉμ§•

  • 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μ–΅ μ›μ˜ μƒκΈˆμ„ 건 생쑴 κ²Œμž„μ„ λ‹€λ£Ήλ‹ˆλ‹€. κ²Œμž„μ—λŠ” '무ꢁ화꽃이 ν”Όμ—ˆμŠ΅λ‹ˆλ‹€', 'λ‹¬κ³ λ‚˜ 뽑기' λ“±μ˜ ν•œκ΅­ 전톡 놀이가 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.[1][2] μ‹œμ¦Œ 2 μ œμž‘μ΄ ν™•μ •λ˜μ—ˆμœΌλ©°, 2024λ…„ 방영 μ˜ˆμ •μž…λ‹ˆλ‹€.[3] 더 μžμ„Έν•œ 정보가 ν•„μš”ν•˜μ‹œλ©΄ μ•Œλ €μ£Όμ„Έμš”!

4. κ°‘μž‘μŠ€λŸ¬μš΄ ν† ν”½ λ³€κ²½

예제 5: 검색 쀑간에 주제 μ „ν™˜

User> λ„·ν”Œλ¦­μŠ€μ—μ„œ λ³Όλ§Œν•œ μ˜ν™” μΆ”μ²œν•΄μ€˜.

[QCR 단계] 검색 쿼리 생성...
{'search': 'λ„·ν”Œλ¦­μŠ€ μΆ”μ²œ μ˜ν™” λͺ©λ‘'} β†’ 검색 ν•„μš”.

User> 근데 레슬링 κ·œμΉ™μ€ μ–΄λ–»κ²Œ 돼?

[QCR 단계] 검색 쿼리 생성...
{'search': '레슬링 κ·œμΉ™ μ„€λͺ…'} β†’ 검색 ν•„μš”.

[κ²€μƒ‰λœ λ¬Έμ„œ ν™œμš© ν›„ λ‹΅λ³€ 생성]
Assistant> λ ˆμŠ¬λ§μ€ λ˜μ§€κΈ°, μ“°λŸ¬λœ¨λ¦¬κΈ°, κΊΎκΈ° λ“±μ˜ κΈ°μˆ μ„ μ΄μš©ν•˜μ—¬ μƒλŒ€λ₯Ό μ œμ••ν•˜λŠ” μŠ€ν¬μΈ μž…λ‹ˆλ‹€. κ²½κΈ° 방식은 μ˜¬λ¦Όν”½ μŠ€νƒ€μΌμΈ 'κ·Έλ ˆμ½”λ‘œλ§Œν˜•'κ³Ό 'μžμœ ν˜•'으둜 λ‚˜λ‰©λ‹ˆλ‹€.[1] νŠΉμ • κ·œμΉ™μ΄ κΆκΈˆν•˜μ‹œλ‹€λ©΄ μΆ”κ°€λ‘œ μ§ˆλ¬Έν•΄μ£Όμ„Έμš”!

μ΄λŸ¬ν•œ μ˜ˆμ‹œλ“€μ„ μ°Έκ³ ν•˜μ—¬ 검색 기반 λͺ¨λΈμ„ 효과적으둜 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈ λ…ΈνŠΈλΆ (Colab)

κ°„λ‹¨νžˆ μ½”λ“œλ₯Ό 싀행해보렀면 test_run.ipynb νŒŒμΌμ„ Google Colabμ—μ„œ λ°”λ‘œ μ—΄μ–΄λ³΄μ„Έμš”.

  • λŸ°νƒ€μž„ μœ ν˜•μ—μ„œ GPUλ₯Ό T4둜 μ„ νƒν•˜μ„Έμš”.
  • 이후, 셀을 μˆœμ„œλŒ€λ‘œ μ‹€ν–‰ν•˜λ©° ν•„μš”ν•œ 라이브러리λ₯Ό μ„€μΉ˜ν•˜κ³  λͺ¨λΈ 및 FAISS 인덱슀λ₯Ό λ‘œλ“œν•©λ‹ˆλ‹€.
  • μ™„μ„±λœ RAG 기반 챗봇 μ˜ˆμ‹œ μ½”λ“œλ₯Ό μ²΄ν—˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€

μ£Όμ˜μ‚¬ν•­

  • 검색 엔진과 ν•¨κ»˜ μ‚¬μš©ν•  경우 QCR을 λ¨Όμ € μ‹€ν–‰ν•˜μ—¬ 검색 쿼리λ₯Ό μƒμ„±ν•œ ν›„, κ²€μƒ‰λœ λ¬Έμ„œ 청크λ₯Ό λ°”νƒ•μœΌλ‘œ GEN을 μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • κ²€μƒ‰λœ μ²­ν¬λŠ” μ΅œλŒ€ 512 토큰 길이이며, ν•™μŠ΅ κ³Όμ •μ—μ„œ μ΅œλŒ€ 5개의 청크λ₯Ό λ°˜μ˜ν•˜μ˜€μœΌλ―€λ‘œ 이에 맞좰 ν™œμš©ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.
  • QCR의 ν”„λ‘¬ν”„νŠΈ ν˜•μ‹μ„ λ°˜λ“œμ‹œ μ§€μΌœμ•Ό 검색 쿼리 생성이 μ˜¬λ°”λ₯΄κ²Œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.
  • GEN의 λ‹΅λ³€μ—μ„œλŠ” κ²€μƒ‰λœ λ¬Έμ„œ 좜처(Index)λ₯Ό μ •ν™•νžˆ κΈ°μž¬ν•΄μ•Ό ν•˜λ©°, 관련성이 μ—†μœΌλ©΄ μ—†λŠ”λŒ€λ‘œ μ•ˆλ‚΄ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • 이 λͺ¨λΈμ€ input output 포함 전체 8192 토큰을 μ§€μ›ν•˜λ‚˜, λŒ€ν™”κΈ°λ‘μ— ν•œν•˜μ—¬ μ΅œλŒ€ 토큰 μˆ˜λŠ” 2000 μ΄λ‚΄λ‘œ λ§žμΆ°μ„œ μ‚¬μš©ν•˜λŠ”κ²ƒμ΄ κ°€μž₯ μ•ˆμ •μ μž…λ‹ˆλ‹€.

이 λͺ¨λΈμ„ 톡해 보닀 효율적인 검색 + μ •ν™•ν•œ 닡변을 μ œκ³΅ν•˜λŠ” AI μ‹œμŠ€ν…œμ„ ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€.

Downloads last month
155
Safetensors
Model size
5.21B params
Tensor type
F32
Β·
BF16
Β·
U8
Β·
Inference Providers NEW
This model is not currently available via any of the supported third-party Inference Providers, and the model is not deployed on the HF Inference API.

Model tree for Austin9/gemma-2-9b-it-Ko-ChatRAG-bnb-4bit

Base model

google/gemma-2-9b
Quantized
(48)
this model
Quantizations
1 model