Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

RAG

검색 보강 생성 (Retrieval-Augmented Generation), 또는 RAG는 외부 문서를 검색하여 그 결과를 바탕으로 답변을 생성하는 방식입니다. 기존의 생성형 언어 모델은 학습된 지식만을 기반으로 답변을 생성하지만, RAG는 질문과 관련된 정보를 문서에서 찾아 활용함으로써 더 정확하고 신뢰도 높은 응답을 생성할 수 있습니다.

RAG는 크게 두 가지 구성 요소로 이루어져 있습니다:

  1. 검색기(retriever)는 사용자의 질문과 관련된 문서를 외부에서 검색하는 역할을 합니다.

  2. 생성기(generator)는 검색된 문서를 바탕으로 자연어 형태의 답변을 생성합니다.

이 구조는 정보 검색과 텍스트 생성을 결합한 형태로, 단순한 질의응답을 넘어 다양한 분야에서 응용될 수 있습니다. 예를 들어, 도메인 특화 질문응답 시스템, 문서 요약, 실시간 지식 기반 챗봇 등에 활용할 수 있습니다.

RAG는 Facebook AI에서 제안한 방식이며, Hugging Face Transformers 라이브러리를 통해 쉽게 구현할 수 있습니다.

한국어 환경에서는 KoSBERT, KoT5, KoGPT 등의 사전학습 언어 모델과 함께 사용할 수 있습니다.

문서 검색기(retriever)는 사용자의 질문에 대해 관련 문서를 외부 데이터에서 찾아주는 구성 요소입니다. RAG에서의 첫 단계이며, 문서 기반 질문 응답 시스템의 핵심입니다.

retriever는 주로 다음 단계를 포함합니다:

  1. 질문을 임베딩 벡터로 변환

  2. 미리 임베딩된 문서 벡터들과 비교

  3. 가장 유사한 문서 n개 반환

pip install sentence-transformers faiss-cpu
from datasets import load_dataset

dataset_id = 'traintogpb/aihub-koen-translation-integrated-small-100k'
한영쌍 = load_dataset(dataset_id)
import pandas as pd

특허데이터 = 한영쌍.filter(lambda x: x['source'] in [563]).remove_columns(['en', 'source'])
특허데이터 = 특허데이터.rename_column('ko', 'text')
pd.DataFrame(특허데이터['train'].shuffle().take(5))
Loading...

문서 임베딩

from sentence_transformers import SentenceTransformer

# 한국어 SBERT 모델
문서인코더 = SentenceTransformer("snunlp/KR-SBERT-V40K-klueNLI-augSTS")
문서임베딩 = 문서인코더.encode(특허데이터['train']["text"], convert_to_numpy=True)

검색용 색인 생성

import faiss

dimension = 문서임베딩.shape[1]
index = faiss.IndexFlatL2(dimension)
index.add(문서임베딩)

faiss.write_index(index, "patent_index.faiss")

검색 수행

# 사용자 질문
query = "컴퓨터 관련 특허"
query_embedding = model.encode([query], convert_to_numpy=True)

# 유사 문서 검색 (상위 2개)
index = faiss.read_index("patent_index.faiss")
D, I = index.search(query_embedding, k=5)

# 검색된 문서 출력
for i in I[0]:
    print(특허데이터['train']["text"][i])
본 발명은 키보드를 가지는 이동 통신 장치 및 그와 같은 이동 통신 장치의 키보드의 오퍼레이션을 제어하기 위한 방법에 관한 것이다. 키보드는 ITU-T 키패드에 유사한 키패드를 포함하는 QWERTY 스타일의 레이아웃을 제공한다. 이동 통신 장치 상에서 실행되는 어플리케이션들은 키보드의 오퍼레이션 모드를 스위치하도록 적응되어, 소정의 예상된 정보 입력에 따라, 키보드의 키의 서로 다른 할당들을 활성화하게 한다. 키보드 오퍼레이션 모드들은 키보드의 이용 가능성을 향상시키고, 이동 통신 장치를 작동하기 위한 전체 키들의 수를 감소시켜 제조 비용을 낮추게 한다.
본 발명은 개방 된 윈도우에 대한 보호 장벽에 관한 것이다.
본 발명은 실시간 고해상도 fMRI(functional magnetic resonance imaging) 방법 및 시스템을 포함하는 고해상도 fMRI 방법 및 시스템을 제공한다.
 본 발명은, 예를 들면, 착탈가능한 기억매체에 기록되어 있는 데이터를 일시적으로 보관하는 경우에 사용하기 적합한 기록장치 및 방법에 관한 것이다. 스텝 501에서, MS에 기록되어 있는 스토어의 대상이 되는 디렉토리를 검색하고, 용량을 산출하여 디스플레이에 표시하게 한다. 스텝 S502에서, 스토어의 대상으로 하는 디렉토리를 선택하는 사용자의 조작을 접수한다. 스텝 503에서, 스토어의 대상으로 선택된 디렉토리에 속하는 모든 파일을 판독하고, 1개의 아카이브 파일로서 HDD에 기록한다. 스텝 S504에서, 기록한 아카이브 파일에, 원래의 대상 디렉토리 및 아카이브 파일의 파일명을 대응시켜 기록한다. 스텝 505에서, HDD에 스토어한 디렉토리를 MS로부터 소거한다. 본 발명은, 예를 들면, 오디오 데이터 서버에 적용할 수 있다.
전압 게인이 1과 같은 소스 폴로워를 실현한 반도체 장치가 제공되며, 소스 폴로워가 그의 전출력 전압에 달하는데 필요한 시간이 단축된다. 또한, 다중치 또는 아날로그 출력전압이 이 회로로 용이하게 2진 형태로 변화될 수 있다. 상기 반도체 회로는 적어도 하나의 MOS 트랜지스터를 구비한다. 다중치 또는 아날로그 데이타선이 다중치 비교기의 입력에 연결되고, 상기 비교기들의 출력은 소스 폴로워 회로의 입력 게이트에 결합되며, 상기 소스 폴로워 회로의 출력이 데이타선에 피드백된다.

응용

from sentence_transformers import SentenceTransformer

# 한국어 SBERT 모델
문서인코더 = SentenceTransformer("snunlp/KR-SBERT-V40K-klueNLI-augSTS")

# 예시 질문
question = "컴퓨터 관련 특허를 획득하기 위해서는 어떤 절차가 필요한가요?"

# 질문 임베딩 및 검색
question_embedding = 문서인코더.encode([question], convert_to_numpy=True)
D, I = index.search(question_embedding, k=2)

# 검색된 문서 추출
retrieved_docs = [특허데이터['train']['text'][i] for i in I[0]]
context = "\n".join(retrieved_docs)
print(f'검색된 문서:\n{context}')
검색된 문서:
컴퓨터 게임, 체스, 테니스 및 임의의 다른 적절한 유형의 게임과 같은 게임의 플레이어들의 상대적 스킬을 결정하기 위한 방법을 제공하려는 바람이 있다. 이전의 베이지안 스코어링 시스템(Bayesian Scoring system)이 Xbox Live(상표)에 구현되며 현재 상표명 TrueSkill(상표)로 상업적으로 입수가능하다. 본 출원인은 기존의 작업을 토대로 하고, 프로세싱 시간이 두드러지게 감소될 수 있도록 하기 위해 새로운 계산의 방법을 사용한다. 메시지 전달 기술들은, 복수의 플레이어들이 있는 복수의 팀들이 있는 경우에서도 업데이트된 스킬 신뢰의 계산이 신속하게 획득될 수 있도록 구성된다.
본 발명은, ASP와 후속 기술을 모두 사용하는 서버 측 소프트웨어 프로그램으로 판매자와 구매자가 온라인 경매에 항목을 쉽게 입력하고 입찰할 수 있다. 판매자가 판매 보고서를 생성하고, 구매자 보고서를 만들고, 배송 정보를 생성하고, 특정 품목을 추적할 수 있도록 하는 관리 기술이 포함되어 있다.
from transformers import PreTrainedTokenizerFast, GPT2LMHeadModel

tokenizer = PreTrainedTokenizerFast.from_pretrained("skt/kogpt2-base-v2")
model = GPT2LMHeadModel.from_pretrained("skt/kogpt2-base-v2")

# 질문 + 검색 문서 기반 생성 입력
prompt = f"{context}\n\n질문: {question}\n답변:"

input_ids = tokenizer.encode(prompt, return_tensors="pt")
output = model.generate(input_ids, max_new_tokens=256, do_sample=True, top_p=0.95, top_k=50)

answer = tokenizer.decode(output[0], skip_special_tokens=True)
print("생성된 답변:\n", answer)
The tokenizer class you load from this checkpoint is not the same type as the class this function is called from. It may result in unexpected tokenization. 
The tokenizer class you load from this checkpoint is 'GPT2Tokenizer'. 
The class this function is called from is 'PreTrainedTokenizerFast'.
생성된 답변:
 컴퓨터 게임, 체스, 테니스 및 임의의 다른 적절한 유형의 게임과 같은 게임의 플레이어들의 상대적 스킬을 결정하기 위한 방법을 제공하려는 바람이 있다. 이전의 베이지안 스코어링 시스템(Bayesian Scoring system)이 Xbox Live(상표)에 구현되며 현재 상표명 TrueSkill(상표)로 상업적으로 입수가능하다. 본 출원인은 기존의 작업을 토대로 하고, 프로세싱 시간이 두드러지게 감소될 수 있도록 하기 위해 새로운 계산의 방법을 사용한다. 메시지 전달 기술들은, 복수의 플레이어들이 있는 복수의 팀들이 있는 경우에서도 업데이트된 스킬 신뢰의 계산이 신속하게 획득될 수 있도록 구성된다.
본 발명은, ASP와 후속 기술을 모두 사용하는 서버 측 소프트웨어 프로그램으로 판매자와 구매자가 온라인 경매에 항목을 쉽게 입력하고 입찰할 수 있다. 판매자가 판매 보고서를 생성하고, 구매자 보고서를 만들고, 배송 정보를 생성하고, 특정 품목을 추적할 수 있도록 하는 관리 기술이 포함되어 있다.

질문: 컴퓨터 관련 특허를 획득하기 위해서는 어떤 절차가 필요한가요?
답변: 특허 출원인은 다음과 같이 정의하고 싶다.
ASP는 Bayesian의 서비스 네트워크에 있는 서비스 관련 자료를 수집하기 위하여 사용하는 서버 측 데이터베이스이다.
이 데이터를 분석함으로써 Bayesian 데이터베이스에 등록된 업데이트를 자동으로 추출, 전송, 삭제하는 업무를 수행할 수 있다.
ASP는 데이터베이스 상에 있는 자료를 분석하여 데이터 처리 및 데이터 유출의 가능성을 계산하고 그 예측을 가능하게 한다.
Bayesian의 서비스 네트워크를 구축하기 위해서는 서비스 네트워크를 구성하는 데이터베이스에 접속하는 프로그램인 오라클 오라클 OS가 필요하다.
이 프로그램은 Bayesian 시스템의 운영체제 시스템에 들어가기 전에 필요한 정보 데이터베이스를 자동으로 데이터베이스 상에 생성하는 프로그램이다.
일반적으로 서비스 제공자에게 서비스 제공자들이 데이터베이스를 보유하고 있는지 여부 및 데이터베이스의 목록의 정의와 분석을 의뢰하고 관리할 수 있다.
따라서 시스템 운영자들이 서비스 네트워크의 구축을 위하여 데이터 처리용 프로그램의 제공자를 선정하고 관리하는 데 도움을 줄 수 있다.
또한 서비스 제공자들이 데이터베이스에 데이터베이스를 가지고 있는지 여부를 판단하기 위하여 오라클 OS를 사용하므로 서비스 제공자가 데이터베이스상의 자료 및 정보를 수집하기 위해서 반드시 데이터를 처리해야 한다.
자료 수집, 공유의 경우, 데이터베이스 상의 데이터에 대한 접근으로부터 데이터베이스 상에서의 데이터와 데이터베이스 상의 데이터간의 관계를 파악한다.
데이터 수집은 데이터의 활용 및 관리에