Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20240928 RAG 본문

개발Article

[TIL]20240928 RAG

최밤빵 2024. 9. 28. 21:46

RAG는 자연어 처리(NLP) 분야에서 최근 많이 주목받고 있는 기술로, 이번 해커톤을 준비하면서, 이 기술에 대해 조금은 알아 둘 필요가 있다고 느꼈다....! RAG는 챗봇, 질의응답 시스템, 문서 생성 등 다양한 프로젝트에 적용될 수 있는 도구로, 자연어 생성을 위한 AI 모델을 만들어 준다.

 

▶ RAG란 ?

RAG(Retrieval-Augmented Generation)는 자연어 처리에서 대형 언어 모델(Large Language Models, LLM)과 검색 기술을 결합한 방식이다. 일반적인 생성형 모델은 주어진 입력에 따라 텍스트를 생성하지만, RAG는 검색 시스템을 통해 외부에서 정보를 가져와서 그 정보를 바탕으로 정확하고  더풍부한 답변을 생성하는 방식이다.

이 방식은 기존의 생성형 모델보다 더 유용한 정보를 제공할 수 있다. 예를 들어, 단순한 LLM은 사전에 학습한 데이터에만 의존하여 답변을 생성하지만, RAG는 질문에 맞는 최신 정보를 검색하여 그 결과를 기반으로 더 신뢰성 있는 답변을 생성할 수 있다. 이는 특히 최신 정보를 필요로 하는 챗봇, 질의응답 시스템, 문서 생성에 유용하다.

 

▶ RAG의 작동 원리

RAG는 크게 두 단계로 나뉜다.

 

→ 검색 단계:

질문(입력)이 들어오면 먼저 검색 모듈이 질문과 관련된 문서를 검색한다. 이 검색 모듈은 미리 준비된 문서 데이터베이스에서 정보를 찾아온다.

→ 생성 단계:

검색한 정보를 바탕으로 대형 언어 모델(예: GPT)이 답변을 생성한다. 이 과정에서 검색된 문서들이 답변 생성을 보조하는 역할을 한다.

 

이 두 가지 단계는 RAG가 단순히 모델이 사전에 학습한 정보에만 의존하지 않고, 외부의 최신 정보를 활용할 수 있는 이유다. 예를 들어, 특정 이벤트에 대한 최신 정보를 생성하고 싶을 때, RAG는 먼저 그 이벤트에 대한 최신 기사를 검색한 후, 그 정보를 바탕으로 답변을 생성할 수 있다.

 

▶ RAG의 장점과 단점

 

▷장점

→ 최신 정보 제공:

RAG는 검색 시스템을 통해 외부에서 최신 정보를 가져올 수 있기 때문에, 모델이 학습한 데이터에만 의존하지 않는다.

→ 더 정확한 응답:

검색된 문서나 정보를 기반으로 답변을 생성하기 때문에, 단순히 언어 모델만 사용하는 것보다 더 정확한 정보를 제공할 수 있다.

→ 유연성:

RAG는 다양한 질의응답 시스템, 정보 검색 엔진, 챗봇 등에서 활용될 수 있으며, 다양한 데이터를 기반으로 적용 가능하다.

 

▷단점

→ 성능:

검색과 생성의 두 단계를 거치기 때문에, 단순한 언어 모델을 사용하는 것보다 성능이 느릴 수 있다.

→ 검색 시스템의 품질 의존:

RAG는 검색된 문서를 기반으로 답변을 생성하기 때문에, 검색된 정보가 부정확하거나 품질이 낮을 경우 최종 생성된 응답도 신뢰도가 떨어질 수 있다.

 

▶ RAG의 적용 사례

→ 질의응답 시스템:

RAG는 사용자가 질문한 내용에 대해 최신 정보를 검색하고, 그 정보를 바탕으로 구체적이고 정확한 답변을 제공하는 질의응답 시스템을 구축하는 데 유용하다. 예를 들어, 어떤 제품의 최신 리뷰나 기술적인 이슈에 대한 답변을 제공하는 데 사용될 수 있다.

→ 문서 요약 및 생성:

RAG는 검색된 문서를 기반으로 자동으로 문서를 요약하거나 새로운 문서를 생성하는 데에도 사용할 수 있다. 뉴스 요약, 리포트 작성, 논문 작성 등 다양한 분야에 적용 가능하다.

→ 챗봇:

챗봇은 사용자 질문에 실시간으로 답변을 제공해야 하는데, RAG는 이를 위해 필요한 최신 정보를 실시간으로 검색하고 그 정보를 바탕으로 적절한 답변을 제공할 수 있다. 일반적인 챗봇은 미리 학습된 정보만 사용할 수 있지만, RAG 기반의 챗봇은 최신 데이터를 기반으로 사용자의 질문에 답할 수 있다.

 

▶RAG를 활용한 프로젝트 구상

RAG를 사용한 정보 검색 기반 챗봇을 구상할 수 있다. 이 챗봇은 사용자가 질문을 입력하면, 먼저 질문과 관련된 최신 정보를 웹에서 검색한 후 그 정보를 바탕으로 답변을 생성하는 방식으로 동작한다. 이렇게 하면 단순한 FAQ 답변 챗봇이 아니라, 실시간으로 정보를 제공하는 도구를 만들 수 있다.

import openai
import requests
from urllib.parse import quote

openai.api_key = 'your-openai-api-key'

def search_web(query):
    encoded_query = quote(query)
    url = f"https://api.search-engine.com/search?q={encoded_query}"
    response = requests.get(url)

    if response.status_code == 200:
        results = response.json()
        return results['items']
    return None

def generate_answer(query, documents):
    context = "\n".join([doc['snippet'] for doc in documents])
    prompt = f"사용자가 질문한 내용: {query}\n\n 이 문서들을 바탕으로 답변을 생성해줘! :\n{context}"

    response = openai.Completion.create(
        model="gpt-3.5-turbo",
        prompt=prompt,
        max_tokens=100
    )

    return response.choices[0].text.strip()

def rag_chatbot():
    query = input("질문을 입력하세요: ")

    documents = search_web(query)
    if documents:
        answer = generate_answer(query, documents)
        print(f"AI의 답변: {answer}")
    else:
        print("관련된 정보를 찾을 수 없습니다.")

if __name__ == "__main__":
    rag_chatbot()

→ RAG의 기본 개념을 활용하여, 웹에서 검색한 정보를 바탕으로 질문에 대한 답변을 생성하는 방식이다.

 

▶결론

 RAG는 기존의 언어 모델과 검색 기술을 결합하여 더 정확하고 풍부한 답변을 생성하는 데 매우 유용한 기술이다. 해커톤이나 프로젝트에서 실시간으로 최신 정보를 제공해야 하는 서비스, 혹은 구체적인 정보를 기반으로 응답해야 하는 서비스에 적합하다. 이 기술을 통해 챗봇이나 정보 검색 시스템을 구현할 수 있으며, 앞으로 더 많은 프로젝트에서 활용할 가능성이 높다고 느꼈다. RAG를 이용한 프로젝트는 단순히 언어 모델만을 사용하는 것보다 더 고급 정보 처리 능력을 제공해주고, 특히 실시간 데이터 기반 응답이 필요한 서비스에 적합하다.