-
[논문 리뷰] 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를 개선할 것이다
'논문 리딩 > NLP' 카테고리의 다른 글
[논문 리뷰] Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (2) 2024.02.07 [논문 리딩] Attention is All You Need (0) 2021.02.15 [논문 리딩] Character-Aware Neural Language Models (0) 2020.07.14 [논문 리딩] 텍스트마이닝을 위한 한국어 불용어 목록 연구 (0) 2020.06.16 [논문 리딩] Automatically Building a Stopword List for an Information Retrieval System (0) 2020.06.16