ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 임베딩 검색을 사용하여 질문 답변하기 (유사어 검색 구현)
    프로그래밍/기계학습 2024. 2. 29. 12:17
    728x90
    반응형

     

     

     

     

     

     

    출처 : openai-cookbook 예제코드 한국어 번역입니다. 

     

     

    GPT는 훈련 데이터에서 기억하는 주제에 대한 질문에 답하는 데 뛰어납니다.

    그러나 GPT에게 익숙하지 않은 주제에 대한 질문에 답하려면 어떻게 해야 할까요?

     

    예를 들어,

    - 2021년 9월 이후의 최근 사건

    - 비공개 문서

    - 과거 대화에서의 정보 등등.

     

     

    1. 검색: 텍스트 라이브러리에서 관련 텍스트 섹션을 검색합니다.

    2. 질문: 검색된 텍스트 섹션을 GPT에게 메시지로 삽입하고 질문을 합니다.

     

    왜 검색이 파인튜닝보다 낫나요

     

    GPT는 두 가지 방법으로 지식을 학습할 수 있습니다:

     

    - 모델 가중치를 통해 (즉, 훈련 세트에서 모델을 파인튜닝)

    - 모델 입력을 통해 (즉, 지식을 입력 메시지로 삽입)

     

    파인튜닝이 데이터에 대한 학습이 GPT가 다른 모든 지식을 학습한 방법이라는 점에서 더 자연스러운 옵션처럼 느껴질 수 있지만, 우리는 지식을 가르치는 방법으로 모델을 파인튜닝하는 것을 일반적으로 권장하지 않습니다. 파인튜닝은 전문화된 작업이나 스타일을 가르치는 데 더 적합하며, 사실적인 회상(factual recall)에 대해서는 덜 신뢰할 수 있습니다.

     

    비유하자면, 모델 가중치는 장기 기억과 같습니다. 모델을 파인튜닝할 때, 이는 마치 일주일 후 시험을 위해 공부하는 것과 같습니다. 시험 날이 되면, 모델은 세부 사항을 잊거나 절대 읽지 않은 사실을 잘못 기억할 수 있습니다.

     

    반면에, 메시지 입력은 단기 기억과 같습니다. 지식을 메시지에 삽입할 때, 이는 마치 개방된 노트와 함께 시험을 치르는 것과 같습니다. 노트를 손에 들고 있으면, 모델이 정확한 답을 찾을 가능성이 더 높습니다.

     

    파인튜닝과 비교하여 텍스트 검색의 단점 중 하나는 각 모델이 한 번에 읽을 수 있는 텍스트의 최대량에 의해 제한된다는 것입니다.

     

     

     

    (새로운 모델이 긴 컨텍스트를 지원합니다, gpt-4-1106-preview는 128K 컨텍스트 윈도우를 가지고 있습니다.)

     

    비유를 계속해서, 모델을 책상에 놓인 몇 페이지의 노트만 볼 수 있는 학생으로 생각할 수 있습니다. 비록 서가에 교과서가 가득할지라도 말이죠. 그러므로, 대량의 텍스트를 활용하여 질문에 답변할 수 있는 시스템을 구축하기 위해, 우리는 검색-질문(Search-Ask) 접근 방식을 사용하는 것을 추천합니다.

     

     

    검색

     

    텍스트를 검색하는 방법은 많습니다. 예를 들어,

    - 어휘 기반 검색

    - 그래프 기반 검색

    - 임베딩 기반 검색

     

    이 예시 노트북은 임베딩 기반 검색을 사용합니다. 임베딩은 구현하기 간단하며, 특히 질문과 잘 작동합니다. 왜냐하면 질문은 종종 그들의 답과 어휘적으로 겹치지 않기 때문입니다.

     

    자신의 시스템을 위한 출발점으로 임베딩만을 사용한 검색을 고려해보세요. 더 나은 검색 시스템은 여러 검색 방법을 결합할 수 있으며, 인기도, 최신성, 사용자 이력, 이전 검색 결과와의 중복성, 클릭률 데이터 등과 같은 기능을 포함할 수 있습니다. Q&A 검색 성능은 질문을 가설적인 답변으로 변환한 후에 임베딩하는 HyDE와 같은 기술로 향상될 수도 있습니다. 마찬가지로, GPT는 질문을 자동으로 키워드 또는 검색 용어 세트로 변환하여 검색 결과를 개선할 수도 있습니다.

     

     

    전체 과정

     

    이 노트북은 다음 절차를 보여줍니다:

     

    1. 검색 데이터 준비 (문서당 한 번)

      A. 수집: 2022 올림픽에 관한 몇 백 개의 위키피디아 기사를 다운로드할 것입니다.

      B. 분할: 문서는 임베딩될 짧고 대부분 자체 포함된 섹션으로 분할됩니다.

      C. 임베딩: 각 섹션은 OpenAI API를 사용하여 임베딩됩니다.

      D. 저장: 임베딩은 저장됩니다 (대규모 데이터셋의 경우, 벡터 데이터베이스 사용)

     

    2. 검색 (쿼리당 한 번)

       A. 사용자 질문이 주어지면 OpenAI API에서 쿼리의 임베딩을 생성합니다.

       B. 임베딩을 사용하여 쿼리와 관련하여 텍스트 섹션을 순위별로 정렬합니다.

     

    3. 질문 (쿼리당 한 번)

    A. 질문과 가장 관련 있는 섹션을 GPT에게 메시지로 삽입합니다.

    B. GPT의 답변을 반환합니다.

     

     

    비용

     

     

    비용 GPT는 임베딩 검색보다 비용이 더 많이 들기 때문에, 쿼리의 양이 상당한 시스템은 비용이 3단계에 의해 지배될 것입니다.

     

    - gpt-3.5-turbo를 사용하여 쿼리당 약 1,000 토큰을 사용하는 경우, 쿼리당 비용은 약 $0.002이며, 달러당 약 500 쿼리입니다 (2023년 4월 기준).

    - gpt-4를 사용하여 다시 쿼리당 약 1,000 토큰을 가정할 경우, 쿼리당 비용은 약 $0.03이며, 달러당 약 30 쿼리입니다 (2023년 4월 기준).

     

    물론, 정확한 비용은 시스템의 세부 사항과 사용 패턴에 따라 달라질 것입니다.

     

     

     


     

     

    임베딩 검색과 GPT를 사용하면 내부 데이터를 사용한 자체 GPT 서비스를 쉽게 구축할 수 있는데 openai에서 관련 노트북 스크립트를 제공해서 관련 내용을  한국어 번역을 해보았습니다. 

     

     

    보다 구체적인 내용이 궁금하신 분들은 다음 링크에서 확인해보세요. 

     

     

    https://github.com/openai/openai-cookbook/blob/main/examples/Question_answering_using_embeddings.ipynb

     

     

     

     

     

     

     

     

     

    728x90
    반응형
Designed by Tistory.