프로그래밍/기계학습

임베딩 검색을 사용하여 질문 답변하기 (유사어 검색 구현)

kugancity 2024. 2. 29. 12:17
반응형

 

 

 

 

 

 

출처 : 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
반응형