GPT in action - 2. chatGPT 로 만드는 지능형 검색엔진

Dongyoung Kim·2023년 5월 6일
2

GPT

목록 보기
12/12
post-thumbnail

지난 Chatbot (https://velog.io/@dongyoungkim/GPT-in-action-1.-chatbot) 에 이어 검색엔진에 대해 이야기해보고자 합니다.

이번 포스트에서는 OpenAI 의 GPT-4 를 사용하는 Microsoft Bing 과 같은 검색엔진을 만드는 방법에 대한 내용입니다. 이는 GPT 에 Non-parametric memory 를 결합시켜 할루시네이션 없이 정확하게 이용가능한 방법 입니다. (https://velog.io/@dongyoungkim/OpenAI-GPT-fine-tuning-3.-memory)

포스트를 적는 시점에서 Google 은 Bard 을 이용한 검색엔진을 준비중에 있고, NAVER 도 HyperCLOVA 를 이용한 SearchGPT 를 준비중에 있고, Kakao 는 다음을 없에고 AI Search 하는 CIC 를 만드려고 하는 중에 있습니다. 관심은 많지만 아직 적용은 Microsoft 의 Bing 외에는 보이지 않는데요, GPT 를 가장 정확하게 이용할수 있는 방법임에도 불구하고 Bing 외에 그 적용사례가 아직 나오지 않는것은, 이 방법론의 문제가 있는것안 아니고 "비용" 문제가 있기 때문입니다. Microsoft 는 굉장히 공격적인 마케팅을 하고 있는것으로 보입니다.

bing chat

Bing 의 Chat 화면을 보면 다음과 같이 구성되어 있습니다. 사용자 입장에서는 그냥 물어보고 답을 구하는 방식이지만, 그 화면에는 많은 GPT 요소들이 존재합니다. 각 componet 요소에 대해 빨간색 동그라미로 번호를 매겨두었습니다. 참고로 다음의 component 들이 GPT 로 되어있을수도 있고, 다른 모델로 만들어져있을수도 있으나 GPT 로 만들었다고 가정하고 설명하겠습니다.

1. 입력 생성 (자동 완성)

Bing Chat 의 입력창에 질문을 입력하면 이라는 UI 와 함께 자동완성이 적용됩니다. 일반적으로 자동 완성은 자동완성을 할 딕셔너리가 있고 해당 딕셔너리에서 검색을 통해 자동완성을 시키는 방식으로 작동합니다. 이 방식은 보통 매우 잘 작동하고, 쇼핑몰 등 도메인 특화된 경우에도 검색 랭킹등의 방식을 통해 광고 등의 방법으로도 사용됩니다.

Bing 의 자동완성을 써보면 그 성능이 형편없습니다. 이 성능을 보고 짐작하건데, 공개된바는 없지만 이는 GPT-3 의 completion task 를 이용한것 같습니다. (ChatGPT 이후 GPT 의 성능에 대한 환상이 있지만, 대부분의 NLP Task 는 여전히 encoder 기반의 모델 또는 전통적인 방식이 대체로 성능이 좋습니다.)

GPT 를 이용한 자동완성 (auto-completion) 은 사용자 입력에 대해 GPT-3 를 이용한 completion 을 수행하면 됩니다. 보통의 경우와 조금 다른점은, 입력에 대한 예상이 길지 않을것이므로 max token 값이 매우 작습니다. 아래는 예시코드로 input 으로 go 를 입력하면, google chrome 이라는 output 을 만듭니다.

input = "go"

response = openai.Completion.create(
  model="text-davinci-003",
  prompt=input,
  suffix="",
  temperature=0.7,
  max_tokens=3,
  top_p=1,
  frequency_penalty=0,
  presence_penalty=0
)

위 api call 에서 특이할점은 max token 을 아주 짧게 줌으로 (max_tokens=3), 자동 완성격의 기능을 하게금 유도한 것입니다.

2. 검색어 생성

2번의 동작을 보면 gpt가 뭐야? 라는 질문에 대해 gpt 뜻 이라는 키워드로 검색을 수행합니다. 이는 chat 형태로 입력받은 내용이 키워드 등을 통해 검색하는 검색엔진에 잘 맞지 않기 때문입니다. 물론 Google 등의 자연어 검색이 가능한 경우 문제가 되지 않지만, Bing 검색을 사용하는 Bing Chat 은 어려울수도 있을것 같습니다. 이러한 동작을 할 수 있는 여러 모델이 존재하지만, GPT 를 사용한다면 다음과 같이 작성해볼수 있습니다.

message = [{"role": "system",
            "content": "from user input, recommend good search text. one good keyword. make output in json format."},
          {"role": "user",
           "content": "GPT 가 뭐야?"]

response = openai.Completion.create(
        engine="gpt-4",
        prompt=message,
        n=1,
        stop=None,
        temperature=0.7,
    )

위와 같이 GPT를 실행시키면 {"keyword": "GPT 설명"} 라고 답을 합니다.
위 내용은 gpt-4 api 를 call 하고, system message 로서 사용자 입력으로부터 좋은 검색결과를 만들수 있는 검색어를 하나 만들고 이를 json 출력을 하라는 내용입니다 (from user input, recommend good search text. one good keyword. make output in json format.).

3. 검색

Bing Chat 에서의 검색은 Bing 을 사용합니다. Bing 에서 검색한 문서들과 그 내용을 가지고 옵니다. 5개에서 10개정도의 상위 검색결과를 기준으로 하는것으로 보입니다. 이때 검색된 문서의 전체 내용을 사용할 수도 있고, 그 길이의 제한이 있으니 가장 유사도가 높은 내용의 스닙핏 을 사용할 수도 있겠습니다. 좋게는 1차적으로 MRC 등으로 필요한 내용만 발췌하거나, 문장에 대해 GPT-3 나 BERT 등을 활용한 유사도 검색 (https://velog.io/@dongyoungkim/GPT-in-action-1.-chatbot 의 검색 참조) 등도 해볼수 있습니다.

검색단계의 핵심은 GPT 가 참고할 수 있는 정확하고 좋은 내용을 추출하는것입니다. 저희 팀에서 여러 방법으로 구현해봤을때, Bing 보단 역시 Google 의 검색 결과가 좋았고, 다만 Google Search API (무료) 의 경우 일부 스닙핏만 가지고 올수 있어 GPT 에게 해석시키기에 조금 아쉽다 정도 입니다. 또한 검색 결과의 질이 GPT 답변 생성에 많은 영향을 미치기에 GPT 를 사용한 생성형 답변에 있어서 여전히 검색 성능은 중요하다 하겠습니다.

참고로 GPT 뜻 이라고 검색했을때의 google api 결과는 다음과 같습니다

[1] 챗GPT란 무엇인가:가장 쉽게 설명해드립니다[서영빈의 데이터경제 ... | Feb 27, 2023 ... GPT가 나타내는 'Generative Pre-trained Transformer'의 'Pre-trained(미리 학습됨)'은 바로 질문에 답하기, 번역하기 등 특정한 행동을 학습시키기 전에 ...
[2] 범용 AI의 선두주자 GPT-3가 가져온 충격 | 나라경제 | KDI 경제정보센터 | GPT는 Generative Pre–Training의 약어로 기존 GPT–2의 개량 모델인 GPT–3는 방대한 양의 데이터셋(3천억 개의 토큰)과 매개변수(1,750억 개)를 갖춘 자연어 모델 기반의 ...
[3] [똑똑 과학용어] 챗GPT - 조선비즈 | Feb 17, 2023 ... GPT를 그대로 풀면 'Generative Pre-trained Transformer(사전 훈련된 생성 변환기)'가 됩니다. 'Generative(생성)'는 답변을 생성한다는 의미에서 붙은 ...
[4] 챗GPT란 | 사용법, 문제점, 가능성과 산업 전망 - 코드스테이츠 공식 ... | Feb 1, 2023 ... GPT는 'Generative Pre-trained Transformer'의 약자로 머신러닝을 통해 방대한 데이터를 '미리 학습(Pre-trained)'해 이를 문장으로 '생성(Generative)' ...
[5] 챗GPT(Chat GPT)는 왜 열풍일까? | Jan 9, 2023 ... GPT(Generative Pre-trained Transformer)는 어떤 텍스트가 주어졌을 때 다음 텍스트가 무엇인지까지 예측하며 글을 만드는 모델이에요. 네이버나 구글 ...
[6] '챗GPT 시대'에 배운다는 의미는 뭔가 - 지디넷코리아 | Jan 6, 2023 ... '챗GPT 시대'에 배운다는 의미는 뭔가 ... 네이버 국어사전은 지식(知識)을 '어떤 대상에 대하여 배우거나 실천을 통하여 알게 된 명확한 인식이나 이해' ...
[7] GPT - 위키백과, 우리 모두의 백과사전 | GPT의 다른 뜻은 다음과 같다. GUID 파티션 테이블(GUID Partition Table); 알라인 전달 효소(Alanine transaminase); GPT (언어 모델): OpenAI에서 만든 딥 러닝 언어 ...
[8] 챗GPT, 기회인가 위협인가 : 삼일회계법인 | 인간의 고유영역인 '창조'의 영역에 진입한 생성 AI, ChatGPT의 등장이 전세계적으로 충격을 주고 있는 상황에서 ChatGPT의 경제적, 기술적 영향 분석과 함께 시사점을 ...
[9] GPT-3 - 나무위키 | 매개변수란 언어모델이 학습 중에 신경망에서 조정되는 값으로, 보통 매개변수가 많으면 AI의 성능이 당연히 좋아진다. 2. 상세[편집]. GPT-3는 자기회귀 언어 모델이다.
[10] 챗GPT | 챗GPT란 ? | 챗GPT 안내 | 챗GPT는 Open AI가 만든 딥러닝 프로그램으로 '언어를 만들도록 만들어진 인공지능', 즉, '대화형 인공지능 챗봇'을 뜻합니다. (GPT: Generative Pre-trained ...

4. 답변 생성

본 답변 생성은 일반적인 ChatGPT 의 parametric memory 기반의 답변을 하는것이 아닌 검색 결과를 기반으로한 답변 생성을 하는것이 목표입니다. 즉 gpt 가 학습한 내용을 배재하여 할루시네이션을 없에고, gpt 생성답변에 refernece 를 달아 그 답변의 근기를 주어 정확한 답변만을 하도록 하는것이지요. 이렇게 하면 국내 뉴스 기자들이 너무나 사랑하는 세종대왕 맥북 사건을 만들지 못하는 gpt 가 될 수 있습니다.

gpt 할루시네이션에 대해 궁금하시거나, 그 이유로 gpt 를 사용하지 못한다고 생각하시는분이 계시다면 제 블로그 포스트들을 한번 읽어봐주셔도 좋겠습니다 (https://velog.io/@dongyoungkim/series/GPT). gpt 의 할루시네이션은, 우리가 점심먹으면서 내말이 맞다 니말이 맞다 라고 이야기하는것과 크게 다르지 않습니다. 아이폰 시대에 사는 우리는 이제 니말 내말 가지고 싸우지 않지요, 구글에 검색해보고 그렇네 라고 합니다. 이번 포스트에서 이야기하는 내용이 딱 이겁니다. 구글에서 검색해서 그 내용으로 말하는겁니다.

3번의 gogole 검색 결과를 기반으로 답변을 생성하는것은 다음과 같이 할 수 있습니다.

message = [{"role": "system",
            "content": "you answer the users questions kindly based on the given reference. each reference are numbered and you should give the reference number where you refers. For example, if you make text  by referring second document, you should note [2] right next to the text. You do not say you refer the document but answer like human. you only speaks Korean."},
          {"role": "user",
           "content": """GPT 가 뭐야?
---
[1] 챗GPT란 무엇인가:가장 쉽게 설명해드립니다[서영빈의 데이터경제 ... | Feb 27, 2023 ... GPT가 나타내는 'Generative Pre-trained Transformer'의 'Pre-trained(미리 학습됨)'은 바로 질문에 답하기, 번역하기 등 특정한 행동을 학습시키기 전에 ...
[2] 범용 AI의 선두주자 GPT-3가 가져온 충격 | 나라경제 | KDI 경제정보센터 | GPT는 Generative Pre–Training의 약어로 기존 GPT–2의 개량 모델인 GPT–3는 방대한 양의 데이터셋(3천억 개의 토큰)과 매개변수(1,750억 개)를 갖춘 자연어 모델 기반의 ...
[3] [똑똑 과학용어] 챗GPT - 조선비즈 | Feb 17, 2023 ... GPT를 그대로 풀면 'Generative Pre-trained Transformer(사전 훈련된 생성 변환기)'가 됩니다. 'Generative(생성)'는 답변을 생성한다는 의미에서 붙은 ...
[4] 챗GPT란 | 사용법, 문제점, 가능성과 산업 전망 - 코드스테이츠 공식 ... | Feb 1, 2023 ... GPT는 'Generative Pre-trained Transformer'의 약자로 머신러닝을 통해 방대한 데이터를 '미리 학습(Pre-trained)'해 이를 문장으로 '생성(Generative)' ...
[5] 챗GPT(Chat GPT)는 왜 열풍일까? | Jan 9, 2023 ... GPT(Generative Pre-trained Transformer)는 어떤 텍스트가 주어졌을 때 다음 텍스트가 무엇인지까지 예측하며 글을 만드는 모델이에요. 네이버나 구글 ...
[6] '챗GPT 시대'에 배운다는 의미는 뭔가 - 지디넷코리아 | Jan 6, 2023 ... '챗GPT 시대'에 배운다는 의미는 뭔가 ... 네이버 국어사전은 지식(知識)을 '어떤 대상에 대하여 배우거나 실천을 통하여 알게 된 명확한 인식이나 이해' ...
[7] GPT - 위키백과, 우리 모두의 백과사전 | GPT의 다른 뜻은 다음과 같다. GUID 파티션 테이블(GUID Partition Table); 알라인 전달 효소(Alanine transaminase); GPT (언어 모델): OpenAI에서 만든 딥 러닝 언어 ...
[8] 챗GPT, 기회인가 위협인가 : 삼일회계법인 | 인간의 고유영역인 '창조'의 영역에 진입한 생성 AI, ChatGPT의 등장이 전세계적으로 충격을 주고 있는 상황에서 ChatGPT의 경제적, 기술적 영향 분석과 함께 시사점을 ...
[9] GPT-3 - 나무위키 | 매개변수란 언어모델이 학습 중에 신경망에서 조정되는 값으로, 보통 매개변수가 많으면 AI의 성능이 당연히 좋아진다. 2. 상세[편집]. GPT-3는 자기회귀 언어 모델이다.
[10] 챗GPT | 챗GPT란 ? | 챗GPT 안내 | 챗GPT는 Open AI가 만든 딥러닝 프로그램으로 '언어를 만들도록 만들어진 인공지능', 즉, '대화형 인공지능 챗봇'을 뜻합니다. (GPT: Generative Pre-trained ..."""]

response = openai.Completion.create(
        engine="gpt-4",
        prompt=message,
        n=1,
        stop=None,
        temperature=0.7,
    )

메시지 구조를 보면 우선 시스템 메시지로 사용자의 질문에 대해 주어진 내용을 참조하고, 참조했을경우 참조 번호를 달아 이야기하라고 명령하였습니다.

system: you answer the users questions kindly based on the given reference. each reference are numbered and you should give the reference number where you refers. For example, if you make text by referring second document, you should note [2] right next to the text. You do not say you refer the document but answer like human. you only speaks Korean.

그리고 사용자 메시지에는 사용자의 질문 및 구글 검색결과를 함께 넣었습니다. (위 참조).

이렇게 call 된 메시지에 대한 답변은 다음과 같습니다.

GPT는 'Generative Pre-trained Transformer'의 약자로, 머신러닝을 통해 방대한 데이터를 미리 학습해 문장을 생성하는 인공지능 모델입니다[4]. 즉, 주어진 텍스트를 바탕으로 다음 텍스트를 예측하여 글을 만들어내는 기능을 가지고 있어요[5].

답변을 살펴보면 4번 내용에 GPT는 'Generative Pre-trained Transformer'의 약자로 머신러닝을 통해 방대한 데이터를 '미리 학습(Pre-trained)'해 이를 문장으로 를 참조해서 문장을 작성하고 [4] 를 붙였습니다. 마찬가지로 [5]어떤 텍스트가 주어졌을 때 다음 텍스트가 무엇인지까지 예측하며 글을 만드는 모델이에요 를 붙어 문장을 생성하고 레퍼런스를 해주었습니다. 위 답변 내용은 GPT 의 parametric memory 로 부터 생성된 내용이 아닌 사용자가 준 google 검색결과를 참고해서 만든 nonparametric 기반의 답변 생성 과정으로, 할루시네이션을 최소화 할 수 있습니다.

5. 추가 질문 생성

Bing Chat 답변이 끝난 후 질문과 답변 내용을 기반으로 가능한 추가질문들을 보여줍니다. 이또한 GPT 로 다음과 같이 구현해볼수 있습니다.

message = [{"role": "system",
            "content": "from the users question and answers, please give three possible followup questions. questions should be in korean, and make it in json format of Q1, Q2, Q3."},
          {"role": "user",
           "content": """Q. GPT 가 뭐야?
A. GPT는 'Generative Pre-trained Transformer'의 약자로, 머신러닝을 통해 방대한 데이터를 미리 학습해 문장을 생성하는 인공지능 모델입니다[4]. 즉, 주어진 텍스트를 바탕으로 다음 텍스트를 예측하여 글을 만들어내는 기능을 가지고 있어요[5]."""]

response = openai.Completion.create(
        engine="gpt-4",
        prompt=message,
        n=1,
        stop=None,
        temperature=0.7,
    )

추가 질문 생성을 위해 시스템 메시지에는 사용자의 질문과 답변으로부터 f/u 질문을 3개 만들고 이를 json 으로 출력하라고 하였습니다.

from the users question and answers, please give three possible followup questions. questions should be in korean, and make it in json format of Q1, Q2, Q3.

그리고 사용자 메시지에는 사용자 질문과 GPT 의 답변을 넣었습니다.

Q. GPT 가 뭐야?
A. GPT는 'Generative Pre-trained Transformer'의 약자로, 머신러닝을 통해 방대한 데이터를 미리 학습해 문장을 생성하는 인공지능 모델입니다[4]. 즉, 주어진 텍스트를 바탕으로 다음 텍스트를 예측하여 글을 만들어내는 기능을 가지고 있어요[5].

이때 답변은 다음과 같습니다.

{
"Q1": "GPT의 주요 기능은 무엇인가요?",
"Q2": "GPT를 활용한 인공지능 서비스는 어떤 것들이 있나요?",
"Q3": "GPT와 같은 인공지능 모델을 개발하는 주요 기업들은 어떤 것들이 있나요?"
}

6. Temperature

5번의 내용까지 해서 Bing Chat 의 답변은 완료됩니다. 그리고 ChatGPT 와 동일하게 추가적으로 멀티턴 질답이 가능하며 이는 앞선 포스트에서 소개드린것 처럼 기존 내용을 user / assisant 로 연결해서 가지고 가는것으로 보입니다. 화면의 6번에는 창의적인, 균형있는, 정밀한 답변을 할 수 있도록 버튼이 있으며 이는 gpt API 의 temperature 과 관련이 있는것으로 보입니다. temperature 는 높을 수록 창의적이고, 낮을수록 사실적인 답변을 하도록 하는 hyperparamter 로 0~2사이의 값을 씁니다 (https://platform.openai.com/docs/api-reference/chat/create#chat/create-temperature). bing chat 에서는 어떤 값을 쓸지는 모르겠으나, 창의적인, 균형있는, 정밀한 각각에 대해 2,1,0 정도를 쓸수도 있겠습니다.

openai gpt api

위 방식으로 간단히 openai 의 gpt api call 만으로 답변 생성을 하는 검색 엔진을 만들수 있습니다. 본 포스트를 쓰는 시점에서 위와 같은 방법을 사용할 수 있는 gpt 는 openai 의 gpt-4 밖에 없습니다. 참고로 2달 전만 해도 openai 의 gpt-3.5-turbo 로 위 방식을 사용할 수 있었으나, 현재는 해당 api 의 성능 하락으로 더이상 말을 듣지 않고, 다만 gpt-4 는 잘 됩니다. Microsoft 의 bing 은 openai 의 gpt-4를 사용한다고 직접 밝혔습니다 (https://blogs.bing.com/search/march_2023/Confirmed-the-new-Bing-runs-on-OpenAI%E2%80%99s-GPT-4)

위 내용을 보면 한번의 bing chat 에 최소 4번의 gpt api call 이 이루어집니다. 또한 nonparametric memory 형태의 답변 생성은 다량의 추론 (large token) 이 필요하게 됩니다. 즉 상당히 비싼 검색으로 아마 google 과 같은 주 검색 회사에서는 선듯 해보기 쉽지않은 방식일것 같습니다.

다만 모바일 검색에 있어서 이러한 검색 결과 도출은 상당히 도움이 될것 같습니다. 굳이 여러 페이지의 정보를 읽고 조합하지 않고 한번에 답변을 줄수 있는 방법으로 모바일 검색에서 필요한 내용으로 보입니다. 이에 삼성 등에서 bing 을 기본검색으로 가지고 가려는 움직임이 있는것 같습니다 (https://www.etnews.com/20230417000105).

more examples

gpt 를 기반으로 저희 팀에서는 여러 어플리케이션을 만들고 이를 테스트해보고 있습니다. 행내에서는 데모 페이지를 운영하며 비지니스로의 연결을 위해 고민중에 있습니다. 이어지는 포스트에서 검색, 챗봇에 이어 아래 소개된 gpt 활용 내용에 대해 하나씩 설명해보고자 합니다.

profile
AI professional for science and industry

0개의 댓글