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

박지우님의 프로필 이미지

작성한 질문수

모두를 위한 대규모 언어 모델 LLM(Large Language Model) Part 2 - 랭체인(LangChain)으로 나만의 ChatGPT 만들기

SelfQueryRetriever 사용시

24.07.02 17:26 작성

·

141

0

안녕하세요 SelfQueryRetriever를 이용하여 메타데이터별로 문제를 생성하는 코드를 작성 중에 궁금한 것이 생겨서 질문드립니다. 데이터별로 메타데이터에 카테고리를 저장해놓았는데 카테고리별로 llm을 돌릴때마다 각 카테고리 내에서 문서를 랜덤하게 가져올 수 있는 방법이 있을까요??

카테고리를 잘 인식해서 가져오는데 llm을 돌릴때마다 같은 데이터를 벡터db에서 받아와 생성합니다.

 

 

답변 2

0

AISchool님의 프로필 이미지
AISchool
지식공유자

2024. 07. 06. 21:49

안녕하세요~. 반갑습니다.

  1. retriever를 선언할때 top_k 값을 큰 값으로 지정해서 여러개의 Document list를 반환하도록 세팅하고 (아래 예시의 경우 top_k = 10개로 설정)

    retriever = SelfQueryRetriever.from_llm(
        llm,
        vectorstore,
        document_content_description,
        metadata_field_info,
        top_k=10
    )

    2. invoke 함수 호출결과로 return된 Document list에서 랜덤하게 원하는 개수만큼의 Document를 선택하도록 별도의 함수를 정의해서 사용

     

    import random
    
    def random_retrieve(retriever, query, sample_size):
        # 원래 Retriever를 사용하여 도큐먼트 검색
        documents = retriever.invoke(query)
        # 도큐먼트에서 랜덤 샘플링
        random_documents = random.sample(documents, min(sample_size, len(documents)))
        return random_documents
    
    # 예시 쿼리
    query = "example query"
    # 랜덤하게 선택할 도큐먼트 개수
    sample_size = 5
    
    # 랜덤하게 도큐먼트 리턴
    random_documents = random_retrieve(retriever, query, sample_size)


    위와 같은 형태로 구현하시면 원하시는 결과를 얻으실 수 있을 것 같습니다.


    좋은 하루되세요.


    감사합니다.

0

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

2024. 07. 04. 17:31

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

SelfQueryRetriever를 사용하여 카테고리별로 문서를 랜덤하게 가져오기 위해서는 몇 가지 접근 방식을 고려할 수 있습니다.

  1. 데이터 로딩 단계에서 랜덤성 주기: 메타데이터를 로딩할 때, 특정 카테고리에 속한 문서들을 먼저 필터링하고 그 중에서 랜덤하게 문서를 선택하여 llm에 입력하는 방식입니다. Python의 random.choice() 함수를 사용하여 구현할 수 있습니다.

  2. 벡터 데이터베이스 쿼리 수정: 벡터 데이터베이스에서 쿼리를 날릴 때, 카테고리별로 문서를 랜덤하게 가져오는 조건을 추가하는 방법입니다. 이는 사용하고 있는 벡터 데이터베이스의 쿼리 언어나 API에 따라 구현 방법이 달라질 수 있습니다.

  3. 포스트 프로세싱 단계에서 랜덤 선택: llm에 의해 반환된 카테고리별 문서 목록에서, 후처리 과정을 통해 랜덤하게 하나를 선택하는 방식입니다. 이 방법은 llm이 반환한 결과 중에서 후속 처리로 랜덤 선택을 하는 것이므로, 전처리 단계에서 랜덤성을 주는 것보다는 제한적일 수 있습니다.

정확한 구현 방법은 사용하고 있는 llm의 API와 벡터 데이터베이스의 기능, Python 라이브러리 등에 따라 다를 수 있으므로, 개별 환경에 맞게 적용해 보시기 바랍니다.