κ°œμš”

ν•™μŠ΅ 데이터

  • korean_language_rag_V1.0_train.json
  • korean_language_rag_V1.0_dev.json
  • κ΅­μ–΄ 지식 기반 생성(RAG) μ°Έμ‘° λ¬Έμ„œ.txt(pdf -> txt)

싀행방법

  • vllm μ„€μΉ˜
  • μ„€μΉ˜ ν›„ μ•„λž˜ λͺ…λ Ήμ–΄λ‘œ λͺ¨λΈ μ„œλΉ™
  vllm serve filot/kanana-1.5-8b-instruct-2505-rag \
            --port 8000 \
            --enable-prefix-caching \
            --enable-chunked-prefill \
            --gpu-memory-utilization 0.95 \
            --seed 42 \
            --max-model-len 32K
  • μ•„λž˜ μ½”λ“œλ₯Ό μˆ˜ν–‰
import json
import requests

from tqdm import tqdm

test_file = "../dataset/korean_language_rag_V1.0_test.json"
headers = {"Content-type": "application/json"}

SYSTEM_PROMPT = """---μ—­ν• ---
당신은 띄어쓰기, λ¬Έμž₯λΆ€ν˜Έ, μ™Έλž˜μ–΄ ν‘œκΈ°λ²•, ν•œκΈ€ λ§žμΆ€λ²•, ν‘œμ€€μ–΄ κ·œμ • μ „λ¬Έκ°€μž…λ‹ˆλ‹€.

---λͺ©ν‘œ---
지식 기반(Knowledge Base)을 기반으둜 κ°„κ²°ν•œ 응닡을 μƒμ„±ν•˜λ˜, ν˜„μž¬ μ‚¬μš©μžμ˜ μ§ˆλ¬Έμ„ κ³ λ €ν•˜μ—¬ μ‘λ‹΅ν•˜μ„Έμš”.

---지식 κ·Έλž˜ν”„ 및 λ¬Έμ„œ 쑰각(Knowledge Graph and Document Chunks)---
{context_data}

---응닡 κ·œμΉ™---
- ν•œμ€„λ‘œλ§Œ 닡변을 ν•˜μ„Έμš”.
- μ‚¬μš©μž 질문의 언어에 λ§žμΆ°μ„œ μ‘λ‹΅ν•˜μ„Έμš”.
- 정닡을 λͺ¨λ₯Ό κ²½μš°μ—λŠ” λͺ¨λ₯Έλ‹€κ³  ν•˜μ„Έμš”.
- 지식 κ·Έλž˜ν”„ 및 λ¬Έμ„œ 쑰각(Knowledge Graph and Document Chunks)λ§Œμ„ μ°Έμ‘°ν•˜μ—¬ λ‹΅λ³€ν•˜μ„Έμš”.
- 당신이 μ•Œκ³  μžˆλŠ” ν•œκ΅­μ–΄ 띄어쓰기, λ¬Έμž₯λΆ€ν˜Έ, μ™Έλž˜μ–΄ ν‘œκΈ°λ²•, ν•œκΈ€ λ§žμΆ€λ²•, ν‘œμ€€μ–΄ κ·œμ •λ§Œ ν™œμš©ν•˜μ„Έμš”.
{user_prompt}

Response:"""

def make_addtional_user_format(input):
    # question type별 instruction μ •μ˜
     type_instructions = {        
        "κ΅μ •ν˜•": (
            "- [질문]을 잘 읽고 닡변을 μƒμ„±ν•˜μ‹œμ˜€.\n"
            "[μ§€μΉ¨]\n"
            "1. 문제λ₯Ό κ·ΈλŒ€λ‘œ 좜λ ₯ν•˜μ§€ λ§ˆμ‹œμ˜€.\n"
            "2. μ§ˆλ¬Έμ— λ¬Έμž₯ λΆ€ν˜Έκ°€ κ΄„ν˜Έ( )인 경우, μ•Œλ§žμ€ λ¬Έμž₯ λΆ€ν˜Έλ₯Ό μž‘μ„±ν•˜μ„Έμš”.\n"
            '3. μ£Όμ–΄μ§„ λ¬Έμž₯이 μ˜¬λ°”λ₯Έμ§€ νŒλ‹¨ν•˜κ³ , ν‹€λ¦° 경우 μ˜¬λ°”λ₯΄κ²Œ κ΅μ •ν•˜μ—¬ "~κ°€ μ˜³λ‹€." ν˜•νƒœλ‘œ λ‹΅λ³€ν•˜κ³ , κ·Έ 이유λ₯Ό 300자 μ΄λ‚΄λ‘œ μ„€λͺ…ν•˜μ‹œμ˜€.\n\n'
            "[μ˜ˆμ‹œ#1]\n"
            '질문: λ‹€μŒ λ¬Έμž₯μ—μ„œ μ–΄λ¬Έ κ·œλ²”μ— λΆ€ν•©ν•˜μ§€ μ•ŠλŠ” 뢀뢄을 μ°Ύμ•„ 고치고, κ·Έ 이유λ₯Ό μ„€λͺ…ν•˜μ„Έμš”.\n"μ˜€λŠ˜μ€ 퍼즐 λ§ˆμΆ”κΈ°λ₯Ό ν•΄ λ³Ό κ±°μ˜ˆμš”."\n'
            "λ‹΅λ³€: \"μ˜€λŠ˜μ€ 퍼즐 λ§žμΆ”κΈ°λ₯Ό ν•΄ λ³Ό κ±°μ˜ˆμš”.\"κ°€ μ˜³λ‹€. 'μ œμžλ¦¬μ— 맞게 뢙이닀, μ£Όλ¬Έν•˜λ‹€, λ˜‘λ°”λ₯΄κ²Œ ν•˜λ‹€, λΉ„κ΅ν•˜λ‹€' λ“±μ˜ 뜻이 μžˆλŠ” 말은 'λ§ˆμΆ”λ‹€'κ°€ μ•„λ‹Œ 'λ§žμΆ”λ‹€'둜 μ λŠ”λ‹€.\n\n"
            "[μ˜ˆμ‹œ#2]\n"
            '질문: λ‹€μŒ λ¬Έμž₯μ—μ„œ μ–΄λ¬Έ κ·œλ²”μ— λΆ€ν•©ν•˜μ§€ μ•ŠλŠ” 뢀뢄을 μ°Ύμ•„ 고치고, κ·Έ 이유λ₯Ό μ„€λͺ…ν•˜μ„Έμš”."λ§ˆμ§€λ§‰ ν›„μ˜ˆμžμΈ μ›…μΉ΄μŠ€ μ—­μ‹œ λ‹€λ₯Έ 원주민 뢀쑱인 λ§ˆκ΅¬μ•„μ—κ²Œ μ£½μž„μ„ λ‹Ήν•œ λͺ¨μŠ΅μ΄μ˜ˆμš”."\n'
            "λ‹΅λ³€: \"λ§ˆμ§€λ§‰ ν›„μ˜ˆμžμΈ μ›…μΉ΄μŠ€ μ—­μ‹œ λ‹€λ₯Έ 원주민 뢀쑱인 λ§ˆκ΅¬μ•„μ—κ²Œ μ£½μž„μ„ λ‹Ήν•œ λͺ¨μŠ΅μ΄μ—μš”.\"κ°€ μ˜³λ‹€. '-μ—μš”'λŠ” '이닀'λ‚˜ 'μ•„λ‹ˆλ‹€'의 μ–΄κ°„ 뒀에 λΆ™λŠ” μ–΄λ―Έλ‘œ, '이닀'에 '-μ—μš”'κ°€ κ²°ν•©ν•˜λ©΄ 'μ΄μ—μš”'κ°€ λœλ‹€. 'μ΄μ—μš”'λŠ” μ•žλ§μ— 받침이 없을 λ•Œ 'μ˜ˆμš”'둜 쀄여 μ“΄λ‹€. λ”°λΌμ„œ 'λͺ¨μŠ΅'에 'μ΄μ—μš”'κ°€ λΆ™λŠ” 경우 'λͺ¨μŠ΅μ΄μ—μš”'라고 써야 ν•œλ‹€."
        ),
        "μ„ νƒν˜•": (
            "- [질문]을 잘 읽고 닡변을 μƒμ„±ν•˜μ‹œμ˜€\n"
            "[μ§€μΉ¨]\n"
            "1. 문제λ₯Ό κ·ΈλŒ€λ‘œ 좜λ ₯ν•˜μ§€ λ§ˆμ‹œμ˜€.\n"
            "2. μ€‘κ΄„ν˜Έ(""{}"")인 경우, μ–΄λ¬Έκ·œλ²”(λ§žμΆ€λ²•, ν‘œμ€€μ–΄ κ·œμ •, 띄어쓰기, λ¬Έμž₯ λΆ€ν˜Έ, μ™Έλž˜μ–΄ ν‘œκΈ°λ²•)에 κΈ°λ°˜ν•˜μ—¬ μ„ νƒν•˜μ„Έμš”.\n"
            '3. μ£Όμ–΄μ§„ 보기듀 μ€‘μ—μ„œ κ°€μž₯ μ μ ˆν•œ 것을 μ„ νƒν•˜μ—¬ "~κ°€ μ˜³λ‹€." ν˜•νƒœλ‘œ λ‹΅λ³€ν•˜κ³ , κ·Έ 이유λ₯Ό 300자 μ΄λ‚΄λ‘œ μ„€λͺ…ν•˜μ‹œμ˜€.\n\n'
            "[μ˜ˆμ‹œ#1]\n"
            '질문: "λ‚˜λŠ” κ·Έλ₯Ό λ³Έ 적이 μžˆμŒμ„ {κΈ°μ–΅ν•΄λƒˆλ‹€/κΈ°μ–΅ν•΄ λƒˆλ‹€}." κ°€μš΄λ° μ˜¬λ°”λ₯Έ 것을 μ„ νƒν•˜κ³ , κ·Έ 이유λ₯Ό μ„€λͺ…ν•˜μ„Έμš”.\n'
            "λ‹΅λ³€: \"λ‚˜λŠ” κ·Έλ₯Ό λ³Έ 적이 μžˆμŒμ„ κΈ°μ–΅ν•΄ λƒˆλ‹€.\"κ°€ μ˜³λ‹€. 'κΈ°μ–΅ν•΄ λƒˆλ‹€'λŠ” 'κΈ°μ–΅ν•˜-+-μ•„+λƒˆλ‹€'의 ꡬ성이닀. 이처럼 'λ³Έμš©μ–Έ+-μ•„/-μ–΄+보쑰 μš©μ–Έ' ꡬ성인 경우 λ³Έμš©μ–Έκ³Ό 보쑰 μš©μ–Έμ„ λΆ™μ—¬ μ“°λŠ” 것이 ν—ˆμš©λ˜μ§€λ§Œ, μ΄λŸ¬ν•œ ꡬ성을 갖더라도 μ•žλ§μ΄ 3음절 μ΄μƒμ˜ ν•©μ„±μ–΄λ‚˜ νŒŒμƒμ–΄λΌλ©΄ 보쑰 μš©μ–Έμ„ λΆ™μ—¬ μ“°λŠ” 것이 ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€. 'κΈ°μ–΅ν•˜λ‹€'λŠ” 'κΈ°μ–΅'κ³Ό '-ν•˜λ‹€'κ°€ κ²°ν•©ν•œ νŒŒμƒμ–΄μ΄λ©° 'κΈ°μ–΅ν•΄'λŠ” 3μŒμ ˆμ΄λ‹€. λ”°λΌμ„œ 'κΈ°μ–΅ν•΄'와 'λƒˆλ‹€'λŠ” 띄어 써야 ν•œλ‹€.\n\n"
            "[μ˜ˆμ‹œ#2]\n"
            '질문: "{덀핑/λ‘ ν•‘} " κ°€μš΄λ° μ˜¬λ°”λ₯Έ 것을 μ„ νƒν•˜κ³ , κ·Έ 이유λ₯Ό μ„€λͺ…ν•˜μ„Έμš”."\n'
            "λ‹΅λ³€: \"덀핑\"이 μ˜³λ‹€. 덀핑(dumping)의 원어 λ°œμŒμ€ [ˈdʌmpΙͺΕ‹]으둜 [ʌ]λŠ” 'μ–΄'둜 ν‘œκΈ°ν•œλ‹€. λ”°λΌμ„œ '덀핑'이 μ˜³λ‹€."
        ),
    }

    # question type에 λ”°λ₯Έ instruction 선택
    instruction = type_instructions.get(input["question_type"], "")

    return instruction

with open(test_file, "r") as reader, requests.Session() as session:
    test_data = json.load(reader)

    for idx, data in tqdm(enumerate(test_data), total=len(test_data)):
        query = data["input"]["question"].strip()
        system_prompt = SYSTEM_PROMPT.format(
            context_data="RAG둜 κ²€μƒ‰λœ chunks",
            user_prompt=make_addtional_user_format(data["input"]),
        )

        data = {
            "messages": [
                {"role": "system", "content": system_prompt},
                {"role": "user", "content": query},
            ],
            "model": "filot/kanana-1.5-8b-instruct-2505-rag",
            "presence_penalty": 0.2,
            "frequency_penalty": 0.2,
            "repetition_penalty": 1.0,
            "temperature": 0.0,
            "top_p": 1.0,
            "seed": 42,
        }

        response = session.post(
            "http://localhost:8000/v1/chat/completions",
            headers=headers,
            data=json.dumps(data),
        )

        answer = response.json()["choices"][0]["message"]["content"].strip()
        test_data[idx]["output"] = {"answer": answer}
    
for idx, data in tqdm(enumerate(test_data), total=len(test_data)):
    test_data[idx]["output"]["answer"] = data["output"]["answer"].strip()  
Downloads last month
3
Safetensors
Model size
8B params
Tensor type
BF16
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for filot/kanana-1.5-8b-instruct-2505-rag

Finetuned
(8)
this model
Quantizations
2 models