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 νŒŒμΌμ„ Google Colabμ—μ„œ λ°”λ‘œ μ—΄μ–΄λ³΄μ„Έμš”.

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

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

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

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

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model is not currently available via any of the supported third-party Inference Providers, and HF Inference API was unable to determine this model’s pipeline type.

Model tree for Austin9/gemma-2-9b-it-Ko-RAG

Base model

google/gemma-2-9b
Finetuned
(170)
this model