Text Generation
Transformers
Safetensors
Korean
llama
korean
kanana
grammar-correction
국립국어원
말평
conversational
text-generation-inference
Instructions to use sooh098/kanana-ko-rag with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use sooh098/kanana-ko-rag with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="sooh098/kanana-ko-rag") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("sooh098/kanana-ko-rag") model = AutoModelForCausalLM.from_pretrained("sooh098/kanana-ko-rag") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use sooh098/kanana-ko-rag with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "sooh098/kanana-ko-rag" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "sooh098/kanana-ko-rag", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/sooh098/kanana-ko-rag
- SGLang
How to use sooh098/kanana-ko-rag with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "sooh098/kanana-ko-rag" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "sooh098/kanana-ko-rag", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "sooh098/kanana-ko-rag" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "sooh098/kanana-ko-rag", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use sooh098/kanana-ko-rag with Docker Model Runner:
docker model run hf.co/sooh098/kanana-ko-rag
| license: apache-2.0 | |
| language: | |
| - ko | |
| tags: | |
| - korean | |
| - kanana | |
| - grammar-correction | |
| - 국립국어원 | |
| - 말평 | |
| base_model: | |
| - kakaocorp/kanana-1.5-2.1b-instruct-2505 | |
| pipeline_tag: text-generation | |
| library_name: transformers | |
| # 🏛️ 과제 개요 | |
| 본 모델은 **국립국어원 ‘AI 말평 경진대회’**의 「2025 한국어 어문 규범 기반 생성 (RAG) (가 유형)」 과제를 위해 개발되었습니다. | |
| 해당 과제는 한국어 어문 규범 관련 질문에 대해 정답과 그 이유를 문장으로 생성하는 모델을 요구하며, **RAG 기반 문서 활용이 핵심 요소**입니다. | |
| > **🧑💻 팀명: 다마고치** | |
| --- | |
| # 🔤 Korean Language RAG Model (한국어 어문 규범 QA) | |
| 본 모델은 위 과제 수행을 위해 설계된 RAG 기반 한국어 QA 모델입니다. | |
| 어문 규범 정보를 효과적으로 검색 및 활용하기 위해서는 규범 문서 검색기(Retriever)와 생성형 언어 모델(LLM)을 조합해야 합니다. | |
| --- | |
| ## 📌 모델 개요 | |
| - **베이스 모델**: `kakaocorp/kanana-1.5-2.1b-instruct-2505` | |
| - **파인튜닝 방식**: Full fine-tuning "[아홀로틀 사용](https://github.com/axolotl-ai-cloud/axolotl)" | |
| - **사용 목적**: 한국어 어문 규범 기반의 QA 태스크 (교정형, 선택형) | |
| - **RAG 구성**: 규범 규칙 DB 기반 검색기(ChromaDB) + LLM 생성기 | |
| --- | |
| ## 🧪 모델 사용 예시 | |
| ```python | |
| from transformers import AutoTokenizer, AutoModelForCausalLM | |
| import torch | |
| model_path = "sooh098/kanana-ko-rag" | |
| tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) | |
| model = AutoModelForCausalLM.from_pretrained(model_path, trust_remote_code=True).eval() | |
| instruction = """당신은 한국어 어문 규범(맞춤법, 띄어쓰기, 표준어, 문장부호, 외래어 표기법 등)에 따라 문장에서 올바른 표현을 선택하고 그 이유를 설명하는 AI입니다. | |
| - 틀린 표현을 정확히 찾아 수정하되, 그 외 표현은 변경하지 마십시오. | |
| - 답변은 반드시 다음 형식을 따라야 합니다: | |
| "{수정문}이 옳다. {이유}" | |
| [예시] | |
| 문제: 다음 문장에서 어문 규범에 부합하지 않는 부분을 찾아 고치고, 그렇게 고친 이유를 설명하세요. | |
| "어서 쾌차하시길 바래요." | |
| 정답: "어서 쾌차하시길 바라요."가 옳다. 동사 '바라다'에 어미 '-아요'가 결합한 형태이므로 '바라요'로 써야 한다. '바래요'는 비표준어다.""" | |
| question = "\"나는 그를 본 적이 있음을 {기억해냈다/기억해 냈다}.\" 가운데 올바른 것을 선택하고, 그 이유를 설명하세요." | |
| # 참고 규범을 추가할 경우 프롬프트 형식은 다음과 같이 변경됩니다. | |
| # input_text = f"[참고 규범]\n{retrieved_rules}\n=====\n문제: {question}\n정답:" | |
| prompt = ( | |
| "<|begin_of_text|>\n" | |
| f"[|system|]{instruction}<|eot_id|>\n" | |
| f"[|user|]문제: {question}\n정답:<|eot_id|>\n" | |
| "[|assistant|]" | |
| ) | |
| inputs = tokenizer(prompt, return_tensors="pt").to(model.device) | |
| inputs.pop("token_type_ids", None) | |
| with torch.no_grad(): | |
| outputs = model.generate( | |
| **inputs, | |
| max_new_tokens=256, | |
| do_sample=False, | |
| eos_token_id=tokenizer.eos_token_id, | |
| pad_token_id=tokenizer.pad_token_id | |
| ) | |
| result = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True) | |
| print(result) | |
| ``` | |
| --- | |
| ## 🔎 RAG 활용 방식 | |
| **본 과제에서는** 정답 생성 시 어문 규범 정보를 효과적으로 반영하기 위해 사전에 구축된 **규범 문서 DB**에서 관련 규범을 검색하고 이를 LLM 입력에 포함하는 **RAG(Retrieval-Augmented Generation)** 방식을 사용하였습니다. | |
| - 검색에는 **dense retrieval 방식**을 적용하였고, | |
| - 한국어 전용 임베딩 모델과 **ChromaDB 기반의 규범 문서 벡터 DB**를 결합하여 구현하였습니다. | |
| --- | |
| ### ✅ 규범 검색 방식 | |
| ```python | |
| def retrieve_context(query_text, top_k=3): | |
| query_vec = embed_query(query_text) | |
| results = collection.query(query_embeddings=[query_vec], n_results=top_k * 4) | |
| seen_rules = set() | |
| contexts = [] | |
| for doc, meta in zip(results["documents"][0], results["metadatas"][0]): | |
| rule_text = meta.get("rule", "").strip() | |
| if rule_text not in seen_rules: | |
| seen_rules.add(rule_text) | |
| context = f"[{meta['title']}]\n{rule_text}" | |
| contexts.append(context) | |
| if len(contexts) == top_k: | |
| break | |
| return "\n\n".join(contexts) | |
| ``` | |
| - **임베딩 모델**: [`dragonkue/snowflake-arctic-embed-l-v2.0-ko`](https://huggingface.co/dragonkue/snowflake-arctic-embed-l-v2.0-ko) | |
| - **문서 저장소**: ChromaDB로 구축된 규범 벡터 DB | |
| - **검색 대상**: 띄어쓰기, 맞춤법, 표준어 등 규칙 본문 | |
| --- | |
| ### 🧾 프롬프트 내 규범 삽입 예시 | |
| 검색된 규범은 다음과 같이 모델 입력에 포함됩니다: | |
| ```python | |
| question = "가축을 기를 때에는 {먹이량/먹이양}을 조절해 주어야 한다." | |
| input_text = f"[참고 규범]\n{retrieved_rules}\n=====\n문제: {question}\n정답:" | |
| ``` | |
| --- | |
| ## 📑 인스트럭션 포맷 | |
| 모델은 아래와 같은 프롬프트 구성을 사용하여 질의에 응답합니다. 이는 ‘AI 말평 경진대회’ 과제에서 요구한 형식을 반영한 구조입니다. | |
| ### 교정형 | |
| ``` | |
| 당신은 한국어 어문 규범(맞춤법, 띄어쓰기, 표준어, 문장부호, 외래어 표기법 등)에 따라 문장을 교정하고 그 이유를 설명하는 AI입니다. | |
| [문제 유형: 교정형] | |
| - 문제와 함께 관련 규범이 주어질 수 있으나, 규범의 타당성을 스스로 판단하여 정답을 도출해야 합니다. | |
| - 제시된 문장은 반드시 어문 규범에 어긋난 표현을 포함하고 있습니다. | |
| - 틀린 표현을 정확히 찾아 수정하되, 그 외 표현은 변경하지 마십시오. | |
| - 답변은 반드시 다음 형식을 따라야 합니다: | |
| "{수정문}이 옳다. {이유}" | |
| [예시] | |
| 문제: 다음 문장에서 어문 규범에 부합하지 않는 부분을 찾아 고치고, 그렇게 고친 이유를 설명하세요. | |
| "어서 쾌차하시길 바래요." | |
| 정답: "어서 쾌차하시길 바라요."가 옳다. 동사 '바라다'에 어미 '-아요'가 결합한 형태이므로 '바라요'로 써야 한다. '바래요'는 비표준어다." | |
| ``` | |
| ### 선택형 | |
| ``` | |
| 당신은 한국어 어문 규범(맞춤법, 띄어쓰기, 표준어, 문장부호, 외래어 표기법 등)에 따라 문장에서 올바른 표현을 선택하고 그 이유를 설명하는 AI입니다. | |
| [문제 유형: 선택형] | |
| - 문제와 함께 관련 규범이 주어질 수 있으나, 규범의 타당성을 스스로 판단하여 정답을 도출해야 합니다. | |
| - 보기 중 단 하나의 정답이 있으며, 반드시 어문 규범에 따라 하나의 표현만 선택해야 합니다. | |
| - 선택한 표현 이외의 문장 구성은 수정하지 마십시오. | |
| - 답변은 반드시 다음 형식을 따라야 합니다: | |
| "{정답문}이 옳다. {이유}" | |
| [예시] | |
| 문제: "가축을 기를 때에는 {먹이량/먹이양}을 조절해 주어야 한다." 가운데 올바른 것을 선택하고, 그 이유를 설명하세요. | |
| 정답: "가축을 기를 때에는 먹이양을 조절해 주어야 한다."가 옳다. '먹이'는 고유어이므로, 한자어 '量'은 두음 법칙에 따라 '양'으로 표기해야 한다. | |
| ``` | |
| ### 사용자 | |
| ``` | |
| [참고 규범] | |
| {retrieved_rules} | |
| ===== | |
| 문제: {question} | |
| 정답: | |
| ``` | |
| ## 📎 참고 | |
| - 데이터 출처: [국립국어원 문화·규범 QA 말뭉치 V1.0](https://kli.korean.go.kr/benchmark/taskOrdtm/taskList.do?taskOrdtmId=182) |