Downloads · 30 days
9
6% of all-time downloads
sooh098/kanana-ko-rag
kanana-ko-rag is a text generation model from sooh098. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as apache-2.0.
본 모델은 국립국어원 ‘AI 말평 경진대회’의 「2025 한국어 어문 규범 기반 생성 (RAG) (가 유형)」 과제를 위해 개발되었습니다.
Downloads · 30 days
9
6% of all-time downloads
All-time downloads
139
Public
Parameters
2.1B
4.7 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors4.6 GB · 100%
How the weights are stored.
BF161.9B · 89%
From the Hugging Face model README
본 모델은 **국립국어원 ‘AI 말평 경진대회’**의 「2025 한국어 어문 규범 기반 생성 (RAG) (가 유형)」 과제를 위해 개발되었습니다.
해당 과제는 한국어 어문 규범 관련 질문에 대해 정답과 그 이유를 문장으로 생성하는 모델을 요구하며, RAG 기반 문서 활용이 핵심 요소입니다.
🧑💻 팀명: 다마고치
본 모델은 위 과제 수행을 위해 설계된 RAG 기반 한국어 QA 모델입니다.
어문 규범 정보를 효과적으로 검색 및 활용하기 위해서는 규범 문서 검색기(Retriever)와 생성형 언어 모델(LLM)을 조합해야 합니다.
kakaocorp/kanana-1.5-2.1b-instruct-2505from 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)
본 과제에서는 정답 생성 시 어문 규범 정보를 효과적으로 반영하기 위해 사전에 구축된 규범 문서 DB에서 관련 규범을 검색하고 이를 LLM 입력에 포함하는 RAG(Retrieval-Augmented Generation) 방식을 사용하였습니다.
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검색된 규범은 다음과 같이 모델 입력에 포함됩니다:
question = "가축을 기를 때에는 {먹이량/먹이양}을 조절해 주어야 한다."
input_text = f"[참고 규범]\n{retrieved_rules}\n=====\n문제: {question}\n정답:"
모델은 아래와 같은 프롬프트 구성을 사용하여 질의에 응답합니다. 이는 ‘AI 말평 경진대회’ 과제에서 요구한 형식을 반영한 구조입니다.
당신은 한국어 어문 규범(맞춤법, 띄어쓰기, 표준어, 문장부호, 외래어 표기법 등)에 따라 문장을 교정하고 그 이유를 설명하는 AI입니다.
[문제 유형: 교정형]
- 문제와 함께 관련 규범이 주어질 수 있으나, 규범의 타당성을 스스로 판단하여 정답을 도출해야 합니다.
- 제시된 문장은 반드시 어문 규범에 어긋난 표현을 포함하고 있습니다.
- 틀린 표현을 정확히 찾아 수정하되, 그 외 표현은 변경하지 마십시오.
- 답변은 반드시 다음 형식을 따라야 합니다:
"{수정문}이 옳다. {이유}"
[예시]
문제: 다음 문장에서 어문 규범에 부합하지 않는 부분을 찾아 고치고, 그렇게 고친 이유를 설명하세요.
"어서 쾌차하시길 바래요."
정답: "어서 쾌차하시길 바라요."가 옳다. 동사 '바라다'에 어미 '-아요'가 결합한 형태이므로 '바라요'로 써야 한다. '바래요'는 비표준어다."
당신은 한국어 어문 규범(맞춤법, 띄어쓰기, 표준어, 문장부호, 외래어 표기법 등)에 따라 문장에서 올바른 표현을 선택하고 그 이유를 설명하는 AI입니다.
[문제 유형: 선택형]
- 문제와 함께 관련 규범이 주어질 수 있으나, 규범의 타당성을 스스로 판단하여 정답을 도출해야 합니다.
- 보기 중 단 하나의 정답이 있으며, 반드시 어문 규범에 따라 하나의 표현만 선택해야 합니다.
- 선택한 표현 이외의 문장 구성은 수정하지 마십시오.
- 답변은 반드시 다음 형식을 따라야 합니다:
"{정답문}이 옳다. {이유}"
[예시]
문제: "가축을 기를 때에는 {먹이량/먹이양}을 조절해 주어야 한다." 가운데 올바른 것을 선택하고, 그 이유를 설명하세요.
정답: "가축을 기를 때에는 먹이양을 조절해 주어야 한다."가 옳다. '먹이'는 고유어이므로, 한자어 '量'은 두음 법칙에 따라 '양'으로 표기해야 한다.
[참고 규범]
{retrieved_rules}
=====
문제: {question}
정답: