--- base_model: unsloth/gemma-2-9b-it-bnb-4bit tags: - text-generation-inference - transformers - unsloth - gemma2 - trl license: creativeml-openrail-m language: - en - ko --- ### Gemma-2 RAG Generator 모델 README --- ## 소개 이 모델은 RAG(Retrieval-Augmented Generation) 시스템의 Generator 부분을 최적화한 한국어 기반 9B 모델, **Gemma-2**입니다. Gemma-2는 외부 검색에서 반환된 정보를 기반으로 자연스러운 답변을 생성하며, 필요한 경우 각주를 붙여 출처를 명시합니다. 특히, **대화 기록**, **컨텍스트 정보**(문서 제목, 랭크, 본문 청크), 그리고 **사용자 입력**을 조합하여 높은 품질의 응답을 제공합니다. --- ## 주요 특징 1. **RAG Generator 최적화**: 검색 결과를 기반으로 답변을 생성하며, 정보를 선택적으로 활용하여 신뢰성을 높였습니다. 2. **각주 처리**: 정보의 출처를 명확히 알 수 있도록 컨텍스트에서 가져온 정보를 각주 형태로 표시합니다. 3. **한국어 최적화**: 한국어 데이터에 특화된 모델로, 한국어 사용자에게 최적의 성능을 제공합니다. --- ## 사용법 ### 1. **프롬프트 템플릿** Gemma-2 모델은 다음과 같은 프롬프트 구조를 사용합니다. ``` ### Instruction: {시스템 프롬프트} ### Conversation: User: {사용자 대화} Assistant: {어시스턴트 응답} ### Context: # Index [랭크]: {문서 제목} {문서 청크} # Index [랭크]: {문서 제목} {문서 청크} ... ### Input: {사용자 입력} ### Response: {모델 응답} ``` --- ### 2. **구성 요소 설명** #### - `Instruction` - Gemma-2가 따르는 시스템 지침입니다. 모델에 내장된 기본 시스템 프롬프트를 사용하며, 필요에 따라 커스터마이징 가능합니다. - 예: ``` 당신은 외부검색을 이용하여 사용자에게 도움을 주는 인공지능 조수입니다. ``` #### - `Conversation` - 사용자와 어시스턴트 간의 대화 기록입니다. 아래 형식을 따릅니다: - 사용자: **`User:`**로 시작 - 어시스턴트: **`Assistant:`**로 시작 - 예: ``` User: 서울의 날씨는 어때요? Assistant: 오늘 서울은 맑고 화창합니다. ``` #### - `Context` - 외부 검색 결과의 랭크, 문서 제목, 본문 청크로 구성됩니다. - **순서**: 1. **랭크**: `# Index [랭크]` 2. **문서 제목**: `{문서 제목}` 3. **본문 청크**: `{문서 청크}` - 예: ``` # Index [1]: 서울의 날씨 서울은 오늘 맑고 화창하며 낮 최고 기온은 25도입니다. # Index [2]: 기상청 정보 이번 주 서울은 전반적으로 맑은 날씨가 이어질 예정입니다. ``` #### - `Input` - 사용자가 추가로 입력한 질문이나 요청을 포함합니다. #### - `Response` - 모델이 생성한 답변이 들어가는 부분입니다. --- ### 3. **예시** #### 입력 예시 ``` ### Instruction: 당신은 외부검색을 이용하여 사용자에게 도움을 주는 인공지능 조수입니다. - Context는 외부검색을 통해 반환된 사용자 요청과 관련된 정보들입니다. - Context를 활용할 때 문장 끝에 사용한 문서 조각의 [Index]를 붙이고 자연스러운 답변을 작성하세요. (e.g. [1]) - Context의 정보가 사용자 요청과 관련이 없거나 도움이 안될수도 있습니다. 관련있는 정보만 활용하고, 없는 정보를 절대 지어내지 마세요. - 되도록이면 일반 지식으로 답변하지말고, 최대한 Context를 통해서 답변을 하려고 하세요. Context에 없을 경우에는 이 점을 언급하며 사죄하고 다른 주제나 질문을 추천해주세요. - 사용자 요청에 알맞는 자연스러운 대화를 하세요. - 항상 존댓말로 답변하세요. ### Conversation: User: 서울의 날씨는 어때요? Assistant: 오늘 서울은 맑고 화창합니다. ### Context: # Index [1]: 서울의 날씨 서울은 오늘 맑고 화창하며 낮 최고 기온은 25도입니다. # Index [2]: 기상청 정보 이번 주 서울은 전반적으로 맑은 날씨가 이어질 예정입니다. ### Input: 이번 주말에는 비가 올 가능성이 있나요? ### Response: 기상청 정보에 따르면, 이번 주 서울은 전반적으로 맑은 날씨가 이어질 예정입니다. 주말에도 비가 올 가능성은 낮습니다. [2] ``` --- ### 4. **컨텍스트 추가 가이드** 1. 검색 결과를 수집하여 `Context`에 추가합니다. 2. **랭크**는 검색 결과의 우선순위를 기반으로 지정합니다. 3. **문서 제목**과 **본문 청크**는 각 검색 결과의 정보를 압축하여 넣습니다. 4. 여러 개의 검색 결과를 포함하려면 위 예시처럼 여러 `# Index` 섹션을 추가합니다. --- ## 추론 방법 1. Hugging Face에서 모델을 로드합니다: ```python from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("Austin9/gemma-2-9b-it-ko-generator-v2.5") model = AutoModelForCausalLM.from_pretrained("Austin9/gemma-2-9b-it-ko-generator-v2.5") ``` 2. 프롬프트를 생성합니다: ```python prompt = """\ ### Instruction: 당신은 외부검색을 이용하여 사용자에게 도움을 주는 인공지능 조수입니다. - Context는 외부검색을 통해 반환된 사용자 요청과 관련된 정보들입니다. - Context를 활용할 때 문장 끝에 사용한 문서 조각의 [Index]를 붙이고 자연스러운 답변을 작성하세요. (e.g. [1]) - Context의 정보가 사용자 요청과 관련이 없거나 도움이 안될수도 있습니다. 관련있는 정보만 활용하고, 없는 정보를 절대 지어내지 마세요. - 되도록이면 일반 지식으로 답변하지말고, 최대한 Context를 통해서 답변을 하려고 하세요. Context에 없을 경우에는 이 점을 언급하며 사죄하고 다른 주제나 질문을 추천해주세요. - 사용자 요청에 알맞는 자연스러운 대화를 하세요. - 항상 존댓말로 답변하세요. ### Conversation: User: 서울의 날씨는 어때요? Assistant: 오늘 서울은 맑고 화창합니다. ### Context: # Index [1]: 서울의 날씨 서울은 오늘 맑고 화창하며 낮 최고 기온은 25도입니다. # Index [2]: 기상청 정보 이번 주 서울은 전반적으로 맑은 날씨가 이어질 예정입니다. ### Input: 이번 주말에는 비가 올 가능성이 있나요? ### Response: """ input_ids = tokenizer(prompt, return_tensors="pt").input_ids ``` 3. 추론을 실행합니다: ```python output = model.generate(input_ids, max_length=512, do_sample=True, top_p=0.1) response = tokenizer.decode(output[0], skip_special_tokens=True) print(response) ``` --- ## 데이터셋 이 모델은 대화 기록, 검색 결과, 사용자 입력을 포함한 **특화된 RAG 학습 데이터셋**을 사용하여 학습되었습니다. --- ## 모델의 강점 - 컨텍스트를 활용한 높은 신뢰성 있는 답변 제공. - 각주를 통해 출처를 명확히 표시. - 대화형 태스크에서 유연하고 자연스러운 응답.