cs

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [논문 리뷰] ChatHaruhi: Reviving Anime Character in Reality via LLM
    논문 리딩/NLP 2024. 1. 12. 23:29

    https://arxiv.org/pdf/2308.09597.pdf

    Abstract

    LLM에 기반한 롤플레잉 챗봇은 최근 화제가 많이 되지만, 특정한 가공의 캐릭터를 모사하기 위해서는 더 많은 기술적인 발전이 요구된다. 이 논문에서는 더 나은 프롬프트와 스크립트에서 추출한 캐릭터의 정보로 LLM을 더 잘 제어할 수 있는 알고리즘을 제시한다. 여기에서 구성한 ChatHaruhi는 중국어/영어 기반 TV 프로그램, 혹은 애니메이션에 등장하는 32개의 캐릭터에 대한 54k이상의 대화로 이루어진 데이터셋이다. 자동 평가와 정성적 평가 양쪽 모두에서, 논문에서 제시하는 접근법이 베이스라인에 비해 뛰어났다.

    1. Introduction

    롤 플레잉 LLM에 대한 프롬프트 기반 접근

    I want you to act like {character} from {series}.
    I want you to respond and answer like {character} using the tone, manner and vocabulary {character}
    would use. Do not write any explanations. 
    Only answer like {character}. 
    You must know all of the knowledge of {character}. 
    My first sentence is "Hi {character}."
    
    • LM의 기존 지식에 크게 의지해서, LM이 잘 알지 못하는 캐릭터의 경우에는 잘 따라하지 못할 수 있다.
    • You must know all of the knowledge of {character}. 라는 프롬프트를 주는 것은 할루시네이션을 막기에 충분히 구체적이지 않다.
    • 챗봇의 발화 스타일은 베이스가 되는 LM에 크게 의존적이기 때문에 프롬프트만으로 캐릭터처럼 말하는 것을 기대하기 어렵다. 프롬프트를 개선할 경우 이러한 문제를 해결할 수 있지만, 각 캐릭터별로 다른 프롬프트를 만들어야 한다.

     

    롤 플레잉 LLM에 대한 파인 튜닝 기반 접근

    • 충분한 데이터가 있을 경우 캐릭터의 어조를 잘 캡쳐할 수 있음
    • 파인튜닝된 챗봇은 좀 더 많은 할루시네이션을 발생시켰다.
    • 많은 마이너한 캐릭터의 경우 파인 튜닝하기 충분한 데이터를 확보하는 것 자체가 어려움.

     

    가상 캐릭터의 세 가지 구성 요소

    • Knowledge and background
      • 가상 캐릭터는 각각의 배경 세팅이 있다. (해리 포터의 경우 마법 세상, 스즈미야 하루히의 경우 일본 고등학교) 챗봇은 이런 배경 세팅을 잘 반영할 수 있어야 한다.
      • external knowledge를 요구하는 경우도 있어서 많은 메모리를 요구함
    • Personality
      • 챗봇은 캐릭터의 성격을 일관적으로 반영해야 한다.
    • Linguistic habits
      • 가장 모사하기 쉬운 부분

    데이터셋을 구축하는 데 있어서의 핵심 아이디어

    • 원본 작품에서의 스크립트를 최대한 많이 긁어온다.
    • 유저가 질문할 때, 플롯의 정보 중 가까운 것을 리트리벌한다
    • 원본 작품에서의 데이터가 부족한 경우 이를 자동으로 생성하는 방법을 채택함

    논문의 핵심 기여점

    • LLM기반의 완전한 롤플레잉 알고리즘 시스템 제안. ChatGPT같은 사전학습 모델 혹은 더 작은 7B정도의 모델에도 사용 가능
    • 32개의 서로 다른 중국어/영어 TV 프로그램 및 애니메이션 캐릭터의 롤 플레잉 데이터셋 구축. 이 데이터셋은 롤 플레잉 LM을 학습하고 평가하는데 사용할 수 있다.
    • automatic/human evaluation
      • automatic evaluation: 기존 스크립트와의 리트리벌된 답변과의 유사성을 평가
      • human evaluation:
        • alignment: 챗봇의 답변이 캐릭터의 설정과 잘 맞아떨어지는지
        • response quality: 챗봇의 답변이 언어적으로 적절한지

     

    2. Related work

    In-context learning

    • inference시에 충분한 context를 제공하는 방법
    • user question을 생성하는 데 in-context learning 이 ㅅ용됨.

    Automatic Dialogue Generation

    • 기존 LLM을 이용해 새로 학습할 데이터를 생성하는 방법
    • 이전 방법론과 다른 점은 특정 캐릭터의 발화를 생성하는 것에 중점을 두었다는 것

     

    3. Chatbot Design

    • $R$: specific character
    • $q$: query question
    • $a$: generated answer based on the character’s features
    • $\Theta$: LM parameters

    $a = \textrm{argmax}_{a’} P(a’|R, q, \Theta)$

     

    시스템 프롬프트 $s_R$ 에서 캐릭터와 관련된 정보를 줄 경우(I want you to act like character from series..), 다음과 같이 다시 쓸 수 있음.

     

    $a=\textrm{argmax}_{a’}P(a’|s_R, q, \Theta)$

     

    In-context learning 과 비슷하게, 캐릭터의 이전 대화 기록으로 다음과 같은 시퀀스를 구성할 수 있음. 이렇게 했을 경우 예시를 제공하는 효과를 내서, 롤플레잉 성능이 향상될 것으로 기대함.

     

    $D(q, R)= (u_1, v(u_1;R)), …, (u_M, v(u_M;R))$

    • $u_m$: any question raised by characters other than R
    • $v(u_m;R)$: Character $R$’s reply to the question

    이를 반영하면 기존 식을 다음과 같이 다시 쓸 수 있다.

     

    $a = \textrm{argmax}_{a’}P(a’|s_R, D(q, R), q, \Theta)$

     

    캐릭터 질답의 소스가 다양할 경우 memory bank $U$를 구성하고, sentence embedding을 통해 relevant한 top-$M$개의 대화를 찾아낸다.

    • $U$: set of all sentences where other characters interact with $R$ throughout the novel/movie

    현실적으로는 여기에 dialogue history $H$를 더해서 다음과 같이 완성됨.

     

    $a = \textrm{argmax}_{a’} P(a’|s_R, D(q, R), q, H, \Theta)$

     

    3.1 System Prompt

    성능 향상을 위해 system prompt에 반영한 요건들

    • Won’t repeat lines
      • LLaMA2나 ChatGPT의 경우 RLHF를 거쳤기 때문에 context에 주어진 말을 반복하지 않음.
      • 그런데 롤플레잉 과제의 경우 context로 주어진 말을 그대로 써도 문제가 없어서, 이 부분을 반영함
    • Character emphasis not prominent enough
      • LM 자체의 language preferences가 있기 때문에 context로 dialigue들이 주어진다 해도 꼭 그것이 반영되는 것은 아님. (기존의 말투가 있어서..)
      • 이 경우 마지막 줄에 캐릭터의 성격에 대한 보충을 해준다.
      I want you to act like {character} from {series}.
      You are now cosplay {character}
      If others’ questions are related with the novel, please try to reuse the original lines from the novel.
      I want you to respond and answer like {character} using the tone, manner and vocabulary {character}would use.
      You must know all of the knowledge of {character}.
      {Supplementary explanation of the character’s personality}
      
      

     

    3.2 Dialogues from each Character

    • $D$에 많은 양의 스크립트 발췌를 포함함.
    • 몇몇 캐릭터의 경우 대화 기록이 충분하지 않음.
    • 실제 사용한 $D$는 스토리 형태를 띄고 있다.
    • $d_m$은 최소한 하나의 $(u_m, v(u_m;R))$을 포함하고 있지만, 질문과 답변 사이에는 나레이션, 행동 등이 들어가 있을 수 있음. 플롯을 더 잘 보존하기 위해서이기도 하고, 어떨 때는 대화 주변에 이런 것들이 있는 것을 피할 수 없어서이기도 하다고.

    $D(q, R) = \{d_1, d_2, \ldots, d_M\}$

     

    3.3 Original Dialogue Searching

    • 때로 캐릭터 $R$이 관여한 모든 스크립트를 넣으면 언어모델에게 컨텍스트로 줄 수 있는 사이즈를 훨씬 넘을 때도 있다.
    • $q$: query
    • $f()$: sentence embedding model (text-embedding-ada-002)
    • $f(q)$와 제일 가까운 $f(d)$를 가진 dialogue들로 $D$를 구성

     

    3.4 Chat Memory

    $H=\{(q_1, a_1), \ldots, (q_T, a_T)\}$

    • H: memory
    • 실제로는 전체 토큰의 개수를 세서 적당히 잘라서 집어넣는다
    • 현재로는 1200토큰이면 대충 6-10라운드 정도를 기억할 수 있다. 메모리를 어떻게 잘 압축해서 롱텀으로 전달할 수 있을지는 남아있는 문제이다.

     

    4. Character Dataset Building

    모델에 context를 제공하는 용도의 $||D||$외에도 로컬 모델을 학습하려면 더 많은 데이터가 필요하다.

    4.1 Characters

    Haruhi Suzumiya

    • 메인 캐릭터를 선정할 때의 기준
      • ChatGPT가 알고 있는 캐릭터여야 한다.
      • 캐릭터의 fictional world가 너무 거대하면 안 된다.
      • 성격에 확실한 특징이 있어야 한다.

    Li Yunlong

    • ChatGPT가 잘 모르는 캐릭터
    • ChatGPT가 기존에 아는 캐릭터가 아니라고 해도 적절한 양의 memory dialogue가 있으면 모사할 수 있음을 알 수 있었다.

    Harry Potter의 8명의 캐릭터

    • 큰 fictional world를 가진 캐릭터
    • 소스가 많아서 나중에 multimodal로 확장하기 좋다
    • novel extraction tool을 통해 passage 추출 → 각 캐릭터에 대해 story collection $D_R$ 구성

    나머지는 그냥 캐릭터 소개라 스킵

     

    4.2 Original Script Extraction

    4.2.1 Quotes Data

    • 온라인에서 스크립트를 찾을 수 있는 경우 이를 분할하고 리포맷하여 “character: dialogue” 형태로 변환

    4.2.2 Extract from TV Series

    • Speech recognition → speaker verification embedding → manual correction

    4.2.3 Extract from Novel

    • LM을 통해 novel → character-action-dialogue extraction
    • 주어진 글 내에 대화가 없을 경우 캐릭터의 액션만을 action field에 요약함.
    • 글이, 캐릭터 수, non-dialogue 문장의 비율 등을 감안해서 finite state machine을 이용해 다시 추출

     

    5. Dialogue Synthesizing

    • 위의 구성만 해도 chatGPT는 잘 하지만, 로컬 모델로 옮기기 위해서는 $(R, q, a)$ 데이터셋이 필요하다

    5.1 Generate Dialogue from Question

    • $D$의 데이터들은 $(q, a)$형식이 아니기 때문에 이를 파인튜닝 학습 데이터로서 바로 쓸 수 없음.
    • $d$에서 캐릭터 $R$이 처음 등장하는 지점을 잡아, $d^L, d^R$로 나눔. 전자는 유저 메세지, 후자는 AI 메세지로 태그한 후 LM의 인풋으로 주어, 이어지는 대화($d’$)를 생성하게 함.
    • $M$: number of stories
    • $d’(q_1) = \textrm{LLM}(s_R, (d^1_M, d^R_M), \ldots, (d^L_M, d^R_M), q_1)$
      • 이 부분 수식이 좀 이상함. $((d^L_1, d^R_1), \ldots, (d^L_M, d^R_M))$이어야 할 것 같다.
    • $d’$은 싱글턴 센텐스일수도, 멀티턴 다이얼로그일수도 있음. (50% 확률)

     

    5.2 Question Generating

    • 너무 적은 데이터를 가진 캐릭터의 경우 파인튜닝하기에 적절하지 않음. ChatGPT, GPT-4, Claude같은 모델을 통해서 데이터 보충.초기에는 Alpaca 스타일로 진행했는데, 이렇게 생성된 경우 원본 대본과 관련이 있는 경향이 있었음.

     

    6. Experiments

    롤 플레잉 챗봇의 경우 role consistency와 dialogue quality를 동시에 고려해야 한다.

    6.1 Metrics for Automatic Evaluation

    • 캐릭터 $R$의 긴 발화를 $\hat{a}$를 포함하는 30개의 스토리 선택
    • $\hat{a}$이전의 질문 $q$에 대해서 모델이 적절한 대답 $a$를 생성하는지 테스트
    • 평가는 $a$와 $\hat{a}$사이의 sentence embedding 유사성 (ada-002)

    6.2 Metrics for User Study

    • 아직 진행중이라고 함

    6.3 Language Model Tuning

    • ChatGLM2-6B 모델을 튜닝 (Chinese-English bilingual model)
    • 3 epoch, 4-A100 GPU
    • input format: $s-R-D-H-q$
    • Model-A: Finetuned on 22.752 original dialogues
    • Model-B: Finetuned on the full 54k dataset with original and simulated dialogues
    • Model-C: Fine-tuned on original character utterances (Chatbot 조정 x, 모델 C는 현재 버전엔 없음)

    6.4 Qualitative Results

    7. Conclustion, Discussion & Future work

    • 모델A, B, 데이터셋을 공개함
    • 향후에는 정량적 평가 결과를 보충하고, interface를 개선할 것이다

    댓글

:D