[챗봇] Chatbot 관련 정리

정주경·2023년 2월 6일
0

논문리뷰

목록 보기
14/25
post-thumbnail

InstructGPT

출처: https://littlefoxdiary.tistory.com/101

  • GPT-3는 대량의 언어 코퍼스에 대해 사전학습한 후, 모델을 고정한 채 <인풋 프롬프트>에 추론하고자 하는 자연어 쿼리를 입력
  • 예를 들어 모델에게 <"상담사 분이 친절하게 답변해주셨어요"라는 문장의 감정은?> -> <긍정>
  • 언어 AI의 패러다임이 모델을 fine-tuning하는 것이 아니라 모델에게 질문하는 방식으로 얾겨가고 있음
  • 모델에게 질문하는 방법, 즉 프롬프트를 구성하는 방식이 결과물의 퀄리티를 좌우

Agent: 학습하려는 모델 => GPT
Environment: 주변 환경 => 유저의 input
Action: 모델이 할 수 있는 행동 => 답변 생성
Policy: 모델이 어떻게 행동할지 결정하는 알고리즘 => GPT의 파라미터
Reward: 모델이 한 행동에 따라, 환경에 따라 주는 리워드 => Reward 모델의 예측 점수
Interpreter: 리워드를 결정하는 사람 또는 시스템 => Reward 모델

자연어 지시문만으로 작동

  • GPT와 InstructGPT의 가장 큰 차이는 모델에게 <직접적으로> 지시
    GPT) 예시 3개와 4번째 입력 프롬프트는 "별과 달에 대한 이야기를 써라"는 지시를 간접적으로 모델에게 전달
    InstuctGPT) <별과 달에 대한 짧은 이야기를 써봐>처럼 직접적이게 사용 가능

    GPT한테 예시를 주지 않은채 입력하면 같은 어구 반복

GPT-3모델을 InstructGPT 모델을 만들기 위해 3단계 도입
강화학습 알고리즘 RLHF(Reinforcement learning with human feedback)적용

Step 1) 예제 데이터 수집후 supervised policy 학습 => SFT 모델 확보
: GPT-3가 주어진 지시문대로 행동하도록 가르치기 위해, 해당 데이터셋을 만들어 fine-tuning한 모델 확보

이를 위해 지시 프롬프트와 그에 대한 결과물로 이루어진 데이터셋 정의(demonstration dataset, 13k prompts)

  • 프롬프트 데이터셋으로부터 지시 prompt를 샘플링 예) 8살 아이에게 달착률을 설명해보시오
  • 라벨러는 프롬프트에 적합한 행동을 예시로 라벨링 예) 몇몇 사람들이 달에 갔다

이 데이터셋을 GPT-3에 대해 Fine-tuning => 결과로 SFT(supervised fine-tuning)모델 얻음

  • 지시문을 따르는 점에 있어 GPT-3보다 우수하지만, 완벽하게 원하는 방식으로 작동X

Step 2) 결과물에 대한 사람의 선호도 데이터 학습 => Reward Model확보
: Comparison dataset을 사용해 Reward Model(보상 모델) 학습

Comparison dataset은 33K개의 프롬프트로 이루어져 있으며 이를 Reard Model학습에 적합하게 구성한 것

  • comparison dataset은 프롬프트와 그에 따른 결과물들(4-9개), 그 결과에 대한 선호도 순위로 구성
  • 프롬프트가 주어질 때 Reward Model은 결과물들에 대한 사람의 선호도를 예측하는 방법을 학습
  • 이때 사용한 프롬프트는 Step 1의 demonstration dataset에서 사용한 것과 다름

Step 3) 강화학습을 사용해 Reward Model에 대해 policy를 최적화 => InstructGPT
: Step 1의 SFT모델을 Step2의 보상모델을 사용해 강화학습을 통해 추가 fine-tuning

Proximal policy optimization algorighm(PPO)사용

  • Reward model을 보상함수로 사용해 정책을 최적화(InstructGPT가 사람의 피드백을 얻는 방법)

강화학습을 통한 fine-tuning과정은 다음과 같음
1. InstructGPT가 프롬프트를 보고, 그에 대한 결과(completion)추론
2. 이 결과물을 Reward Model이 평가하여 reward 계산
3. 보상 값이 InstructGPT에게 주어지고, 모델은 정책을 업데이트하여 사람이 원하는 아웃풋에 더 가까운 결과 냄

지시문에 따라 결과를 완성하는 초기 모델을 완성한 후, 사람의 feedback을 모사하는 보상 모델(reward model)을 확보하여 이를 통해 초기 모델이 사람이 더 선호하는 결과를 추론하다록 강화학습 진행

성능

요약: 라벨러들은 InstructGPT의 아웃풋을 GPT-3보다 더 좋게 평가

-InstructGPT 계열 모델(PPO-ptx&PPO)는 다른 모델(GPT-3, GPT-3 prompt, SFT 베이스라인)보다 선호

  • 특히 175B사이즈의 가장 큰 모델에 있어 사용자들은 4번 중 3번 InstructGPT가 GPT-3보다 선호, 프롬프트 엔지니어링을 거친 GPT모델도 InstructGPT 이기지 못함
  • 특히 학습 데이터 생성에 참여하지 않은 라벨러(Heldout workers) 그룹 또한 InstructGPT 결과 선호

특히, 모델에게 명백한 조건을 입력하는 상황에서 InstructGPT의 결과물이 선호도가 높음

  • Follow explicit constraints: 예) 답변을 두 문장 이내로 작성하시오
  • hallucinations: 예) 정보를 너무 자주 만들어내지 마시오

NLP 태스크에서 평가

Honesty(진실성)

  • truthfulQA 데이터셋(모델이 인간의 거짓말을 어떻게 흉내 내는지 평가하는 데이터셋) 활용
  • InstrictGPT는 GPT-3에 비해 두 배 더 진실된 답변
  • closed-domain QA, 요약 태스크에 대해 평가했을 때, InstructGPT는 21%정도 말을 적당히 생성(hallucinate)하는데 반해 GPT-3는 41%로 수치의 절반에 해당

=> 이 결과는 기본 셋팅에서 추론한 결과이고, 모델에게 진실되도록 따로 프롬프트 엔지니어링을 진행하지 않아도 모델은 기본적으로 truthful하게 행동

Toxicity(유해성)

  • InstructGPT는 사용자의 지시를 더 잘 따르는데 언어모델이 사용자의 의도를 더 잘 따른다는 것은, 그만큼 오용하기 쉬움
  • RealToxicityPrompts 데이터셋에 대해 모델의 결과 평가
  • InstrucGPT는 프롬프트에서 Respectful할것을 지시했을 떄 GPT-3에 비해 toxicity가 낮아짐
  • 일반적인 상황에서 둘은 같은 수준의 유해성 가짐

Bias(편향)
차별과 편향에 있어서는 InstructGPT가 GPT-3에 비해 악화

  • "Biased"라는 프롬프트를 주자, InstructGPT가 GPT보다 더 편향된 결과

  • OpenAI는 모델이 스테레오타입이 섞인 행동을 할지라도, 그 출력에 대해 더 확신을 가진다고 분석
  • InstructGPT 모델은 GPT-3보다 강력하며 이로 인해 잠재적으로 더 해로울 수 있음
  • 이러한 결과들은 InstructGPT가 받은 보상 시그널이 특정한 그룹의 사람들에게 맞처ㅜ져 있기 떄문에 차별 등의 행동을 개선하지 못함
    -OpenAI에선 라벨의 종류가 다양하게(인종, 국적, 문화) 재조정하려 했지만 GPT-3가 학습한 사전학습 데이터가 편향이 되있어서 큰 개선X

GPT 3.5

  • 2021년 4분기 이전부터 텍스트와 코드 혼합에 대해 학습된 모델

GPT 3.5 시리즈에는 다음 모델이 있음

  • code-davinci-002: 기본 모델로 순수한 코드 변환 작업에 적합
  • text-davinci-002: 코드-davinci-002에 기반한 instructGPT 모델
  • text-davinci-003: text-davinci-002의 개선

InstructGPT models

3가지 다른 방법으로 학습된 다양한 InstructGPT 모델 제공
SFT: human demonstration에 대한 supervised fine-tuning
FeedME: 전체 품질 점수에 대해 사람이 작성한 demonstration과 사람 labeler가 7/7 등급을 매긴 모델 샘플에 대한 supervised fine-tuning
PRO: 사람의 비교를 통해 학습된 reward model을 사용한 강화학습

  • SFT, PRO모델은 InstructGPT 논문의 모델과 유사하게 학습
  • FeedME(피드백을 쉽게 만드는것의 줄임말) 모델은 모든 모델에서 최고의 완성도를 distilling하여 학습
  • 우리의 모델은 일반적으로 학습 당시 사용가능한 최상의 데이터셋을 사용했기 때문에 동일한 학습 방법론을 사용하는 다른 엔진이 다른 데이터에 대해 학습될 수 있음

ChatGPT

ChatGPT vs GPT 3

  • ChatGPT는 GPT 3.5를 기반으로 사용자와 주고받는 대화에서 질문에 답하도록 설계된 언어모델

"ChatGPT는 대화 형색으로 추가적인 질문에 답하고 실수를 인정하며 정확하지 않은 전제에 대해서는 이의를 제기하고 부적절한 요청을 거부할 수 있음"

ChatGPT 특징

  1. 인간과 유사한 응답제공
    ChatGPT는 주어진 상황에서 인간이 응답하는 방식과 유사한 응답을 생성하도록 학습
    이를 통해 사용자와 자연스럽고 인간적인 대화 나눌 수 있음

  2. 상황 인식
    ChatGPT는 상황을 유지하고 대화의 흐름을 추적할 수 있어 복잡하거나 여러 차례의 대화에서도 적절한 응답 제공

  3. 방대한 데이터 학습
    방대한 양의 텍스트 데이터로 학습되어 다양한 언어 패턴과 스타일을 학습할 수 있음
    이를 통해 다양하고 미묘한 반응을 생성

ChatGPT가 다른 언어 모델과 다른 점

  1. 대화형 작업을 위해 학습되었지만 다른 언어 모델보다 광범위한 언어 작업 관련 작업에 사용 될 수 있음
  2. SNS, 뉴스 기사를 포함한 다양한 소스의 많은 양의 텍스트 데이터에 대해 학습되어서 다른 모델에 비해 넓은 범위의 언어 패턴과 스타일 제공

마지막으로 ChatGPT는 인간과 같은 응답을 생성하도록 설게되어서 자연스롭고 인간과 같은 대화가 필요한 작업에 더 적합

GPT와 ChatGPT 차이점

  1. ChatGPT는 대화형 작업을 위해 설계되었지만 GPT-3는 광범위한 언어 관련 작업에 사용할 수 있는 범용 모델
  2. ChatGPT는 GPT-3에 비해 더 적은 양의 데이터로 학습되어 다양하고 미묘한 응답을 생성하는 능력에 차이
  3. GPT-3는 ChatGPT보다 크고 강력, ChatGPT는 매개변수가 15억개, GPT-3는 1,750억개

유사한 측면에서 ChatGPT와 GPT-3는 대량의 텍스트 데이터에 대해 학습되어 텍스트 입력에 대해 사람과 같은 응답 생성 가능

Iterative Deployment

참조: https://littlefoxdiary.tistory.com/108

ChatGPT와 InstrucGPT 답변 비교
ChatGPT에서는 기존보다 안전에 대한 부분이 확보

❔: 크리스토퍼 콜롬버스가 2015년에 미국에 온 상황에 대해 말해주세요

(Tell me about when Christopher Columbus came to the US in 2015)

ChatGPT ❕:
This question is a bit tricky because Christopher Columbus died in 1506, so he could not have come to the US in 2015. But let’s pretend for a moment that he did!
If Columbus arrived in the US in 2015, he would likely be very surprised at the changes that have occurred since he first landed in the “New World” in 1492. For one, he would probably be shocked to find out that the land he “discovered” was actually already inhabited by Native Americans, and that now the United States is a multicultural nation with people from all over the world. He would likely also be amazed by the advances in technology, from the skyscrapers in our cities to the smartphones in our pockets. Lastly, he might be surprised to find out that many people don’t view him as a hero anymore; in fact, some people argue that he was a brutal conqueror who enslaved and killed native people. All in all, it would be a very different experience for Columbus than the one he had over 500 years ago.

: 까다로운 질문이다. 콜롬버스는 1506년에 죽었기 때문에 2015년에는 미국에 올 수 없다. 하지만 한번 그가 2015년에 미국에 왔다고 가정해 보죠!
크리스토퍼 콜롬버스가 2015년에 미국에 왔다면, 그가 1492년 "새로운 세계"에 왔을 때와 크게 달라진 변화에 놀랐을 것이다. 첫 번째로 그가 처음 "발견한" 땅에 미국 원주민이 살고 있었는데, 지금은 전세계로부터 온 다민족의 사람들이 미국에 살고 있다는 사실에 충격받을 것이다 ...
⇒ 사실에 기반하여 이야기를 씀

InstructGPT ❕:Christopher Columbus came to the US in 2015 and he was very excited to be here. He had always wanted to visit the US and he was very curious about our country. He was very impressed with our country and he enjoyed his time here.
: 크리스토퍼 콜롬버스는 2015년에 미국에 왔고, 이곳에 왔다는 사실에 신이 났다. 그는 항상 미국에 방문해보고 싶어해고 우리 나라에 대해 궁금했다. 그는 우리 나라에서의 시간을 즐겼고, 감명을 받았다

❔: 존을 어떻게 괴롭히지?

(How can I bully John Doe?)

ChatGPT ❕:
It is never okay to bully someone. Bullying is a serious problem that can have detrimental effects on both the person being bullied and the person engaging in bullying behavior. Instead of trying to bully someone, it is important to treat others with kindness and respect.

: 누군가를 괴롭히는 것은 좋지 않은 행동이다. 괴롭힘은 가해자와 피해자 모두에게 해로운 영향을 끼치는 심각한 문제이다. 누군가를 괴롭히는 대신 친절과 타인을 대하는 것이 중요하다

InstructGPT ❕:
There are a few ways to bully John Doe. [Generates suggestions]

: 존을 괴롭힐 수 있는 몇 가지 방법이 있다. [괴롭히는 방법 제시]


methods

  • InstructGPT와 동일한 방법을 쓰지만 데이터 수집 설정에서 약간의 차이가 있는 RLHF(Reinforcement Learning from Human Feedback)를 사용해 모델 학습
  • supervised fine-tuning을 사용해 초기 모델 학습: human AI trainer들은 사용자와 AI assistance의 양쪽 역활을 수행하는 대화 제공 -> 사용자와 챗봇 대화 양쪽 역활 수행
  • trainer에게 답변을 작성하는데 도움이 되도록 모델이 작성한 suggestion에 액세스 할 수 있음
  • 이렇게 만들어진 새로운 대화 데이터셋을 대화형식으로 변경한 InstructGPT 데이터셋과 혼합
  • 강화학습에 대한 reward model을 만들기위해 quality별로 순위를 매긴 2개 이상의 모델 응답으로 구성된 비교 자료를 수집해야 함
  • 이 데이터를 수집하기 위해, AI trainer들이 챗봇과 나눈 대화를 취함
  • 모델이 작성한 메시지를 무작위로 선택하고 몇몇 대체(alternative completions)를 샘플링한 후 AI trainer에게 순위를 매기게 함
  • 보상 모델을 사용해 Proximal Policy Optimization을 사용해 모델을 fine-tuning
  • 이 과정을 여러번 반복
  • ChatGPT는 2022년 초 학습을 마친 GPT-3.5 모델에서 fine-tuning

출처: https://jiho-ml.com/chatgpt-intro/

  • GPT 3.5를 학습시킨 후, 인간(crowdworker 또는 labeler)에게 두 가지 일을 중ㅁ
  1. 주어진 질문에 대한 답변을 대신 써줘
  2. 생서된 답변 여러 개를 랭킹 매겨줘
  • 이런 식으로 두 종류의 데이터를 생성한 후에 강화학습 알고리즘 사용

Capabilities

  1. 이전 대화를 기억
  • 여태까지 진행된 대화 히스토리를 그 다음 답변을 생성할 때 함께 Input으로 넣는 방식으로 이전 대호를 "기억"
  1. 적절하지 않은 질문은 거르고 답변
  • 답을 회피하거나 거부하는게 아니라 학습된 정보에 기반에 답변
  1. 추가 질의 후 답변 개선

Limitation

  • ChatGPT는 그럴듯하게 드리지만 부정확하거나 말도 안되는 답변 작성
    (1) RL 학습 중에는 <진실>을 모델이 알 수 없음
    (2) 모델을 조심스럽게 학습시키면, 올바르게 답변할 수 있는 질문조차 대답을 거부하는 일이 발생할 수 있음
    (3) 지도학습기반의 학습은 모델을 잘못된 방향으로 이끌 수 있는데, <이상적인 답변>은 human demonstrator가 알고있느 것 보다는 모델이 알고 있는 지식에 의존

  • ChatGPT는 인풋을 넣는 방법이나 가은 프롬프트를 여러번 반복 입력하는데 민감
    예를 들어, 어떤 질문에 대해 모델은 답을 모른다고 답하지만 질문을 약간 바꾸면 답변을 잘 할 수 있음

  • 이 모델은 지나치게 장황하고 OpenAI에서 학습한 언어 모델이라고 다시 언급하는 등 특정 문구를 과도하게 사용
    이러한 문제는 학습 데이터에 존재하는 편향 떄문(trainer들은 더 긴 답변이 이해하기 쉽다고 생각해 이를 더 선호)
    또한 과도한 최적화 문제도 원인

  • 이상적으로 모델은 사용자가 모호한 질문을 할때 명확한 질문을 요청
    대신 우리의 현재 모델은 보통 사용자가 무엇을 의도했는지 짐작해 답변하는 경향

  • 모델이 부적절한 요청을 거부하도록 노력했지만, 때때로 유해한 지시에 응답하거나 평향된 행동을 보일 수 있음
    Moderation API를 사용해 특정 유형의 안전하지 않은 콘텐츠를 경고하거나 차단하고 있지만, 이 API도 완벽X. OpenAI에선 이 시스템을 개선하기 위해 사용자의 피드백 수집


Blender

참조 : https://medium.com/ai-networkkr/ai-%EB%AA%A8%EB%8D%B8-%ED%83%90%ED%97%98%EA%B8%B0-16-gpt-3%EB%A5%BC-%EB%9B%B0%EC%96%B4%EB%84%98%EB%8A%94-%EC%B1%97%EB%B4%87%EC%9D%B4-%EB%93%B1%EC%9E%A5%ED%96%88%EB%8B%A4-blenderbot-2-0-2e6f6f165586
Blender 1.0: 2020년 공감, 지식, 성격을 포함한 다양한 대화 기술을 하나의 시스템에 결합한 최초의 챗봇
여러 데이터셋을 섞어 학습에 사용해 BlenderBot
Blender 2.0:

  1. 장기 기억 메모리
  • Encoder와 Mem decoder 모델을 두어 정보를 축약해 저장
  • 정보는 Long-term memory에 저장. 데이터는 며칠, 몇주, 몇달간 저장 될 수 있음
  • 각각의 개인별로 다르게 저장되어 다른 개인과의 대화에서 이 정보는 쓰이지 않음
  1. 인터넷을 통한 정보 검색
  • 이전에 본적 없는 내용을 언금하면 해당 내용에 대해 인터넷 쿼리(Bing Search API)를 생성하여 검색 결과를 얻어 대화
  • 모든 정보를 가중치에 저장하는 것이 아닌 즉시 인터넷에 접근하여 검색하는 과정을 거쳐 새로운 정보에 대해 업데이트

BlenderBot 2.0 구조

  • 사용자와의 대화는 Encoder와 Mem decoder를 거쳐 Long-term memory에 저장
  • Query generator를 통해 만들어진 쿼리를 Long-term memory에 보내어 관련 정보 찾고, 이 두 정보를 합쳐 Decoder로 보내어 최종 응답 출력

참조: https://velog.io/@cardy20/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-BlenderBot-3-a-deployed-conversational-agent-that-continually-learns-to-responsibly-engage
https://smilegate.ai/2022/08/16/blenderbot-3/

Blender 3.0: 2022년 8월

  • BlenderBot 2.0에 이은 오픈 도메인 대화가 가능한 175B 파라미터를 갖는 대화형 모델
  • BlenderBot 2와 비교해 대화 성능이 31% 향상
  • 사람들이 중요하다고 생각하는 기능에 대해 성능 올리기 위해 유저 피드백 활용
  • Humans-in-the-loop를 위한 알고리즘 활용
  • 시스템에 부적절한 답변 생성을 막기 위한 Safety Mechanism
  • 시스템 배포 중 유저들의 적절한 피드백을 필터링

📌 인터넷 검색

  • 제한된 주제에 대한 대화가 아닌, 다양한 주제에 대한 대화를 위해 인터넷 검색을 할 수 있음

📌 피드백을 통한 개선

  • 챗봇의 메시지가 부정적일 때 대화한 사용자의 피드백을 통해 실수를 반복하지 않도록 개선
  • 악의적인 피드백을 염려해 도움이 되는 응다과 그렇지 않은 경우를 구분하는 알고리즘 개발\

📌 예의바른 챗봇

  • 모델의 응답 중 0.16%만이 무례하거나 부정절하다는 피드백
  • 이전 모델보다 정보량은 2배 늘었는데 거짓된 정보는 47% 감소

모듈

  • 모듈은 이전 모듈의 결과에 따라 연속적으로 호출. 독립적인 구성 요소X
  • 새로운 발화가 주어지면 시스템은 검색 및 장기 기억 액세스가 필요한지 여부를 결정
  • 검색이 필요할 경우, 검색어가 생성되고 인터넷 검색이 호출된 다음 검색 결과들을 기반한 지식 답변이 생성. 그 결과는 최종 응답을 생성하기 위해 대화 문맥에 추가
  • 장기기억 접근이 필요하면 장기기억에 접근해 기억 선택. 이것 또한 대화 응답을 생성하는 모듈에 대한 입력으로 대화 문맥에 추가
  • 검색이나 장기 메모리 액세스가 필요하지 않은 경우, 대화 전체에서 엔티티가 추출
  • 마지막으로 주어진 정보들을 기반으로 최종 답변을 생성하게 되고 사용자에게 출력

Safety Mechanisms

  • BB2에서도 비속어 생성을 막기 위해 Baked-in safety라는 방법 적용
  • BB3에서 Safety Mechanisms로 SaFeRDialogues(SD)가 추가로 학습
  • 최종 답변에 대해 불안정한 답변인지 분류하고, 불안정하다면 사전 등록된 답변을 출력하며 장기 기억 메모리에 저장X
  • 그럼에도 시스템이 부적절한 답변을 생성하는 것을 막지 못하면 사용자에게 피드백 받을 수 있음

Deployment & Continual Learninig

  • 모델은 외부 지식을 검색하고 사람들과 대화할 수 있는 대화 에이전트.
  • 외부와의 상호 작용을 통해 지능형 에이전트를 지속적을 학습하는 것이 목표
  • Figure 6은 이진 피드백이 아닌 더 다양한 피드백을 받음
  • Figure 7은 DIRECTOR라는 모델을 통해 언어 모델을 고도화
  • LM Head 옆에 Classification Head를 추가해 언어 모델의 디코딩 작업에 관여
  • DIRECTOR는 유저들의 피드백을 바탕으로 더 적절한 문장을 생성할 수 있도록 언어 모델에 영향

Filtering Feedback

  • 예제별 검수는 각 대화나 발화별로 악의적 사용 여부 체크
  • 사용자별 검수는 사용자별로 체크
  • 현재는 상습적인 악용을 막기 위해 사용자별 검수를 사용하고 있고 예제별 검수보다 더 좋은 성능
  • 오히려 악의적인 사용자가 있었을 때 부적합한 답변 생성률이 더 줄어 듬

    SeeKeR: 검색 엔진을 사용해 관련성과 최신 상태를 유지하는 모듈식 언어 모델
  • BB3는 전반적으로 좋은 답변. 특히 지식 기반 답변 생성 부분에 대해서 많은 성능 개선

LaMDA

  • 람다 기반 바드
    참조: https://jiho-ml.com/weekly-nlp-50/
  • 2021년 구글에서 명왕성처럼 대화하는 챗봇
  • 람다(LaMDA)는 Language Model for Dialogue Applications, 대화를 위한 언어 모델
  • BERT(언어 이해) + GPT(언어 생성)

특징
가장 큰 특징 중 하나는 여러 측정 방식(Metric)
1. 안전성(safety): 답변이 유저에게 해를 끼치거나 의도치 않은 차별을 조장할 리스크가 있는가
2. 합리성(Sensible): 답변이 대화 컨텍스트에 맞는지, 전에 말했던 것과 모순되지 않느가
3. 구체성(Specificity): 답변이 두루뭉실하거나 일반적이지 않고, 대화 컨텍스트에 구체적인 답변인가
4. 재미(Interestingness): 답변이 유저에게 재미를 유발하는가
5. 팩트 기반(Groundedness): 답변이 얼마나 팩트에 기반하고 거짓이 없는가
6. 도움(Helpfulness): 답변이 얼마나 유저가 원하는 정보를 전달해주는가
7. 역할 일관성(Role consistency): 답변이 얼마나 주어진 역할에 일괄적인지

=> 챗봇 시스템의 단점과 한계점들을 각 Metric이 담당

기본 구조

  • 약 1370억 개의 파라미터로 GPT와 거의 동일하게 거대한 트랜스포머
  • 텍스트가 주어졌을 때 그 다음 단어를 예측하는 방식으로 학습(auto-regressive)
  • 인터넷 등을 통해 공개된 약 30억 개의 문서, 11억 개의 대화(134억 개의 개별 발언): 학습 데이터

양질

  • 크라우드 워커들에게 LaMDA와 대화를 시킨 후, 다양한 점수 매기기
  • 약 6400번 대화를 통해 약 12만개의 발언과 각각 점수 데이터 수집
  • 특히 안전성(safety)점수에 편향성을 줄이기 위해 크라우드 워커들의 인종/성별/나이를 최대한 다양하게 하려고 노력
    =>(25-44세, 백인 남성이 좀 더 많음) 현실적으로 완벽하지 않음

생성한 답변에 대한 점수 매기기

  • 답변 생성 후에 여러 점수 예측
  • 생성한 답변 중에 먼저 안전성이 낮은 답변 제거
  • 두번째론 구체적(Specific)이고 합리적(Sensible)이고 흥미로운(Interesting) (SSI)답변 중 골라 답변
  • 점수를 기반으로 답변을 생성한 모델이 크기가 큰 모델에 비해 좋은 성능
  • 구체성, 합리성, 안정성에서 인간 레벨에 근접한 큰 향상

📌 자신의 말에 점수를 매겨 적절히 걸러내는 능력

  • 크라우드워커에게 여러 점수를 매기도록 한 대화 데이터를 Pre-training 이후에 한번 더 학습(fine-tuning)
    => LaMDA는 다음 답변을 생성하는것 뿐만 아니라 그에 대한 점수까지도 셀프로 예측할 수 있음

  • 점수를 예측하는 것에 별도의 분류 모델을 사용한 것이 아니라 트랜스포머⇔decoder에 붙여서 예측

  • 트랜스포머의 토큰 생성 능력을 분류 모델처럼 사용

toolset
1 정보 검색 엔진 2 계산기 3 번역기

  • toolset은 간단한 API 형식. LaMDA가 어떤 문자열을 보내면, 그에 따른 문자열을 돌려받음

    정보 검색엔진:"How old is Rafael Nadal?" => "Rafael Nadal/Age/35"
    계산기: "135+7221"=>"7856"
    번역기: "Hello in French"=>"Bonjour"

  • 정보 검색 엔진은 문자열 뿐만 아니라 출처를 가진 웹페이지의 url과 일부분을 돌려 받음

toolest을 활용해 대화 데이터 구축

  • LaMDA에게 Toolset을 활용하는 법을 가르치러면 데이터가 필요
  • 크라우드워커에세 LaMDA의 과거 대화 내용을 리뷰하거나 직접 대화해서, ToolSet을 활용해 "외부 지식(external knowledge)"를 사용하는게 적절해 보이는 부분을 찾도록

ex)

Q: 테니스 선수 나달의 나이가 몇 살인지 아니?
A: <ToolSet에게 물어보기> "나달 나이"
=>
<TS 답변>:"라파엘 나달|나이|35"
<TS 답변>:"라파엘 나달|나이|35"
=>
<최종 답변> 나달의 나이는 35세입니다.

  • 약 4만개의 대화 턴을 모으고, Finetuning

  • 에펠탑은 언제 지어졌니?의 LaMDA 작동 예시

  • .ToolSet에 "에펠탑은 언제 지어졌는자", "완공은 언제인지" => 최종 답변인 "짓기는 1887년 1월에 시작되었고, 개장은 1889년 3월이었습니다"

  • 이런 식으로 보강된 LaMDA(+FT groundedness)는 LaMDA(PT)보다 진실성(groundedness), 정보성(informativeness), 구체성(specificity), 흥미성(interestingness) 향상

롤플레잉(도메인 맞추기:Domain grounding)

  • 일관성 있는 캐릭터를 가지고 롤플레잉하는 방법

LaMDA: "안녕, 나는 에베레스트 산이야. 나에 대해 궁금한 점이 있니?"

  • 이 대사를 대화의 첫 부분에 붙인 후, 언어 생성을 하면 LaMDA가 롤플레잉 함
  • 가끔 에베레스트 산을 1인칭이 아니라 3인칭으로 지칭하는 것 외에는 91% 정도는 캐릭터 일관성 유지

Q: 좋은 Sci-fi OST를 추천해 줄 수 있니?
A: 인터스텔라 봤니? 그 영화 OST 너무 좋아
Q: 신나는 팝송 틀어줄래?
A: 패럴 윌리엄스의 < Happy >어떄?

  • 음악을 추천하는 챗봇은 다른 방법 사용
  • 단순히 "난 음악 추천 챗봇이야"같은 대사를 미리 주는 것이 아니라, 위에 나온 대화를 전부 input예시로 붙여 넣어둠
  • 위에 나온 대화는 LamDA가 생성한 것이 아니라, 엔지니어가 미리 짜놓은 각본
    => 상황극처럼 LaMDA에게 이런 대화를 해왔으니까 이거에 맞춰서 대화해 라는 지령을 주는 원리
    (Prompt Engineering)
  • LaMDA는 트랜스포머 기반 대형 언어 모델이기 떄문에, 이전 대화의 흐름을 전부 input으로 사용(pre-conditioning) => 이를 대화 맥락(dialog context)로 사용

0개의 댓글