인프런 커뮤니티 질문&답변

장은조님의 프로필 이미지

작성한 질문수

RAG를 활용한 LLM Application 개발 (feat. LangChain)

3.5 Retrieval 효율 개선을 위한 데이터 전처리 - 동일한 결과가 안나옴

24.10.22 13:19 작성

·

13

0

안녕하세요, 강의 수강 중 아무리 실행해도 결과가 영상과 동일하게 나오지 않아서 질문드립니다.

 

실습에 사용중인 tax.docx 파일에서 제55조의 그림으로 되어 있는 테이블을 마크다운으로 변환한 tax_with_markdown.docx로 실습 진행하고 있습니다 .

강의에서 올려주신 마크다운 변환된 파일과 코드로 실행했는데, retriever.invoke(query) 결과에서 제55조가 나오지 않아서 result 값이 제대로 나오지 않습니다. 파인콘 인덱스를 삭제하고 새로 만들어도 결과는 동일하게 나옵니다. 원인이 무엇인지 알 수 있을까요?

from langchain_community.document_loaders import Docx2txtLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size = 1500,   # 문서를 쪼갤 때, 하나의 chunk가 가질 수 있는 토큰 수
    chunk_overlap = 200  # 문서를 쪼갤 떄, 중복을 허용하는 토큰 수
)

loader = Docx2txtLoader("tax_with_markdown.docx")

document_list = loader.load_and_split(text_splitter=text_splitter)

document_list[52]  # 마크다운 부분 잘 나오는 거 확인

from dotenv import load_dotenv
from langchain_openai import OpenAIEmbeddings

load_dotenv()  # API Key 필요 (환경 변수)
embedding = OpenAIEmbeddings(model='text-embedding-3-large') 

import os
import time
from pinecone import Pinecone
from langchain_pinecone import PineconeVectorStore

index_name = 'tax-index-markdown'

pinecone_api_key = os.environ.get("PINECONE_API_KEY")

pc = Pinecone(api_key=pinecone_api_key)
database = PineconeVectorStore.from_documents(document_list, index_name=index_name, embedding=embedding)

query = '연봉 5천만원인 직장인의 소득세는 얼마인가요?'

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model='gpt-4o')

from langchain import hub

prompt = hub.pull("rlm/rag-prompt")

from langchain.chains import RetrievalQA

retriever = database.as_retriever()
qa_chain = RetrievalQA.from_chain_type(
    llm,
    retriever = retriever,
    chain_type_kwargs = {"prompt":prompt}
)  # llm 모델과 벡터데이터베이스와 프롬프트 템플릿 준다.

retriever.invoke(query)

답변 2

0

강병진님의 프로필 이미지
강병진
지식공유자

2024. 10. 22. 13:24

안녕하세요!

k 값을 늘려서 한번 확인해보시고, 그래도 retrieval이 안되면 3.6강에 해답이 있습니다!

강병진님의 프로필 이미지
강병진
지식공유자

2024. 10. 22. 13:25

retriever = database.as_retriever( search_kwargs={"k": 3})

이런식으로 시도해보시면됩니다!

0

인프런 AI 인턴님의 프로필 이미지

2024. 10. 22. 13:21

안녕하세요, 인프런 AI 인턴입니다.

장은조님의 질문은 강의에서 제공된 tax_with_markdown.docx 파일을 사용하여 실습을 진행할 때, retriever.invoke(query)에서 예상한 결과가 나오지 않는 부분입니다. 이런 경우 여러 가지 원인이 있을 수 있습니다. 우선, 유사한 문제를 겪은 다른 학습자의 경우를 참고하여 해결책을 제시해드리겠습니다.

원인 및 해결책:

  1. 벡터 검색 설정 값 (k 값 조정):
    retriever 설정에서 k 값(검색할 문서의 수)을 변경해보는 것이 좋습니다. 일반적으로 k 값을 늘리면 더 많은 문서를 검색할 수 있으며, 이로 인해 원하는 결과가 포함될 확률이 높아집니다.

관련된 질문과 해결 방법은 다음 링크에서 보실 수 있습니다. 같은 강의에서 비슷한 문제가 다루어졌습니다. 이 스레드에서는 사용된 k 값을 늘려 제55조를 포함시켜 원하는 답변을 얻을 수 있었습니다.

  1. Pinecone 인덱스 재설정:
    인덱스를 삭제 후 재생성하셨다고 하셨지만, 인덱스 생성 시 데이터가 정확히 로드되었는지 확인하는 것도 중요합니다. 데이터 로딩 단계에서 에러가 발생하지 않았는지 살펴보시기 바랍니다.

  2. 문서의 텍스트 내용 확인:
    실습에 사용된 문서 파일 내 텍스트 내용이 정확히 처리되고 있는지도 확인해보세요. 특히, 변환된 마크다운 파일이 올바르게 로드되고 있는지 문서 내용을 검토해야 합니다.

코드 검토:

  • text_splitter 설정으로 쪼개지는 문서의 크기가 적절한지 여부도 확인 필요합니다. 특정 구간에서의 텍스트 분할이 적절히 수행되고 있는지 본인 문서에서 직접 확인해보시기 바랍니다.

만약 위의 해결책으로 해결되지 않는다면, 강의의 문제 탐구 방법과 강의 내에서 다루어진 다양한 사례들을 참고하여 추가적인 디버깅을 시도해보시기를 권장드립니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.