본문 바로가기

NLP/논문이해

[논문이해] Think Before You Speak: Explicitly Generating Implicit Commonsense Knowledge for Response Generation

논문명: Think Before You Speak: Explicitly Generating Implicit Commonsense Knowledge for Response Generation

 

 

https://arxiv.org/abs/2110.08501

 

Think Before You Speak: Explicitly Generating Implicit Commonsense Knowledge for Response Generation

Implicit knowledge, such as common sense, is key to fluid human conversations. Current neural response generation (RG) models are trained to generate responses directly, omitting unstated implicit knowledge. In this paper, we present Think-Before-Speaking

arxiv.org

 


 

제목의 중요성

 

초록에 들어가기 전에 제목이 재밌다. 의역하자면 이렇다.

 

"말하기 전에 생각 좀 해라. 대화에 숨겨진 상식을 이끌어내자. 그걸 응답할 때 좀 쓰자."

 

안 읽어봐도 어떤 내용인지 잘 담아낸 제목인 것 같다. 하지만 그래도 초록을 읽어보자.

 

 

초록

  • 현재 Neural Model 들은 대화할 때, 내재된 지식/상식을 활용하지 않고 응답한다.
  • 우리는 TBS(Think-Before-Speaking) 을 통해 이 문제를 해결한다.
  • Think: 지식(knowledge)/상식을 이끌어내는 것
  • Speak: 응답(response)을 생성할 때, 상식(commonsense)을 활용하는 것
  • 우리는 더 효율적이고, 더 정보량도 풍부하고, 설명가능한 모델을 만들 수 있다.
  • 실험적으로도, 사람의 평가로도 우리 모델은 대화(dialogue)로부터 지식을 잘 도출했다.
  • TBS 는 최소 85% 이상의 대화와 관련 있고 이치에 맞는 상식을 생성한다.

 

근거부터 모델 설계까지

 

자연스러운 대화란?

d

 

"내 아내에게 꽃을 좀 사주고 싶어."

 

라고 친구가 말한다면, "붉은 장미가 좋겠다."라고 반응할 수 있다. 왜 붉은 장미라고 답했을까? 다음과 같은 지식이 우리도 모르게 사용되었기 때문이다.

 

  • 장미는 꽃의 한 종류지. (Rose is a type of flower.)
  • 장미는 사랑의 상징이야. (Rose is a symbol of love.)

 

이렇게 사람이 자연스럽게 대화를 하려면, 상대방의 발화(utterance)를 글자 그대로 받아들이는 것뿐만 아니라 지식/상식을 활용할 수 있어야 한다. 그걸 인간은 자연스럽게 하고 있었다.

 

모델은 과거는 쫓아도, 지식을 쫓지는 않았다.

 

최근 성능이 훌륭한 RG(response generation) Model 들은 대화의 맥락을 반영하고자 한다. 여기서 말하는 맥락이란, 지금까지 했던 대화의 흐름을 말한다. 예컨대, 두 사람이 백마디를 주고 받았다면 그 백 마디 모두 반영하여 대답하는 것을 의미한다.

 

이런 문제를 해결하고자 하는 움직임은 있으나, 오히려 제한된 KB(knowledge Base)로 인해 고통받고 있다고 한다. 어떤 연구에서는 상식은 결국 생성하면서 잠재되어 있다고 보는데, 이러한 관점은 응답(Response)과 상식(Commonsense)를 명확하게 구분하지 않아서 더 헷갈린다. 그리고 해석하기도 어렵다.

 

 

Think Before Speaking

 

우리는 이 문제를 분해해서 풀고자 한다.

  • Think: 내재된 지식을 이끌어내보자(explicitly generate the implicit knowledge)
  • Speak: 그걸 응답할 때 사용해보자(use this knowledge to generate a response)

 

이걸 하면 3가지 장점이 있다고 한다.

  1. 기존 end-to-end RG 에 비해, 도출한 지식(generated knowledge)는 RG 를 제한 혹은 증강하여 결과적으로 더 유익한(informative) 응답을 생성한다.
  2. 기존 지식검색모델(knowledge-retrieval models)보다 더 일반화된 지식을 찾을 수 있다. (RG process 와 관련되어 있어서 그렇다고 하는데, 이건 뒤를 좀 봐야할 것 같다.)
  3. 응답의 신뢰성과 설명가능성이 올라간다.

 

이런 RG paradigm 에는 3가지 문제를 극복해야 했다.

  1. 어떻게 대화 속에 내재된 상식을 식별(identify)할 수 있을까?
  2. 어떻게 그 지식을 자연어 형태로 표현(represent)할 수 있을까?
  3. 응답을 생성할 때, 지식과 대화를 구별하면서도 잘 통합(integrate)해서 사용할 수 있을까?

 

이에 대해 더 상세히 이야기해보겠다.

 

 

기본 설정: Response Generation

 

우선 RG에서 여지껏 어떻게 해오고 있었는지에 대해 정리할 필요가 있다.

  • history H: 대화의 연속(sequence of dialogue utterances)를 의미한다.
  • response R: 모델이 생성해야 할 응답/반응.

 

 

현재 RG 모델은 RG 를 Conditional Language Modeling Problem 으로 간주한다. X1, X2, ...Xn 의 대화가 주어지면, 그에 따른 반응 Y 를 생성한다. 그걸 probability distribution 으로 표현한 게 위 식이다.

 

어떻게 기존과 다르게 학습 시킬 것인가?

 

 

내재된 지식(Implicit Knowledge)을 앞으로 'I' 로 표기하겠다. 그리고 여러 개일 수 있으니, 하나당 Z1, Z2 ... 로 표기한다고 한다. 예컨대, 앞서 들었던 예시에선 '장미는 꽃이야.', '장미는 사랑을 상징해.'와 같은 자연어 형태의 문장들이 이에 해당한다.

 

  • Z1: 장미는 꽃이야.
  • Z2: 장미는 사랑을 상징해.

 

이렇게 한 후, 데이터 사이 사이에 상식을 끼워준다. 아래 수식에서도 보면, '대화 1개, 상식 1개(여러 개가 도출되면 여러 개 다 나열된다.)'는 방식으로 데이터를 가공했다. 실제 사람이 뇌로 거치는 과정을 데이터에 명시해두는 것과 같다.

 

 

이해가 안 될까봐, 뒤쪽에 위치한 예시를 가져왔다. 대충 이런 식으로 붙여두겠다고 이해만 하면 된다. 상세한 건, 뒤에서 이야기하겠다.

 

 

 

 

어떻게 내재된 지식을 도출하는가?

 

 

방법은 간단히 말하자면, 이렇다.

  • ConceptNet 에는 두 단어와 관계가 담겨 있으니 이걸 상식으로 가정하자.
  • Dialogue Dataset 에서 대화 사이에 있는 단어들이 Concept 에 있으면 상식이 활용되었다고 보자.

 

우선 갑자기 등장한 ConceptNet 이 뭔가 싶을 것이다. 지식 그래프(Knowledge Graph)인데, 이런 정보들이 가득하다.

  • Triple1: (Rose, TypeOf, Flower)
  • Triple2: (Rose, SymbolOf, Love)

이걸 '상식'이라고 부르기로 했고, 두 대화 사이에서 이런 관계들을 찾아내는 것이 목표다. 찾아내는 방식은 'Hard Matching' 과 'Soft-Matching Using Embedding Similarity' 이 있다.

 

 

Hard Matching

 

1. 표제어 추출(Lemmatization)

 

각 대화마다 쓸데 없는 단어들(stop words)을 모두 제거한다.

  • 제거 전: "You stay beside me. I'll fry the meat in the oil first."
  • 제거 후: ["stay", "fry", "meat", "oil"]

 

2. ConceptNet 에서 각 단어들이 관계가 있는지 없는지 찾는다.

 

 

Soft-Matching Using Embedding Similarity

 

위 방식으로만 했다면, 결국 단어의 생김새로만 파악하게 된다. 세상엔 다양한 표현이 있기 때문에, 의미적 유사도(semantic similarity) 역시 함께 반영해야 한다. 이를 반영하게 위해, 'SentenceBERT' 를 사용한다고 한다.

 

방법은 다음과 같다.

  • 1. i번째 대화에서 hard matching 을 통해 후보 triple 을 탐색한다.
  • 2. "i번째 대화 + i + 1 번째 대화" 와 "후보 triple" 의 코사인 유사도를 구해 가장 가까운 관계를 찾는다.

 

어떻게 내재된 지식을 표현할 것인가?

 

Concept's Triple

 

이 상태로는 모델이 이 정보를 활용할 수 없다. 자연어 형태로 바꿔야 하는데, 2가지 방법을 제시한다.

 


1. Map Relations to Natural Language (NL)

: 그냥 자연어 형태의 틀(template)에 맞춰서 바꾸는 것이다. 예컨대, 'Rose is type of flower.' 이런 식으로.

 

2. Information-Seeking Question-Answer Pairs

: 이건 평서문보다는 질문과 대답의 형태로 바꾸자는 것이다. 예컨대, 'What is a type of flower? Rose is a type of flower.' 이런 식으로.

 

그러면, 위 예시처럼 대화 데이터에서 상식을 끄집어낼 수 있다.

 

어떻게 지식과 대화를 통합할 것인가?

: 2가지 대안이 있다고 한다.

 

 

1. Special Symbol

: 위 그림처럼 '<implicit>', '</implicit>' 를 추가한다.

 

2. Natural Language Prompts

: 요즘 최신 유행하는 'Prompts' 를 쓰고자 한다.

 

 

위 그림은 논문을 그대로 발췌한 것이다. 지식 앞에는 "The following background knowledge is helpful for generating the response." 를 붙이고, 대화 앞에는 "What does the speaker probably say in the next response?"를 붙인다고 한다.

 

자, 이제 데이터는 어느 정도 완성이 됐다. 그렇다면,

 

모델은 어떻게 학습할건데?

 

지금까지 만든 데이터는 3개로 구성되어 있다고 볼 수 있다.

  • H': 여태까지 대화와 내재된 지식이 융합된 상태
  • I: 내재된 지식 (없을 수도 있음.)
  • R: 반응

 

모델은 2가지를 학습한다.

 

  • H' 을 입력받았을 때, I 를 생성하기
  • H' 과 I 를 입력받았을 때, R 을 생성하기

 

H' 을 입력받았을 때, I 를 생성하기

 

KG(Knowledge Generation): 내재된 지식을 잘 생성할 수 있도록 NLL 을 사용했다.

RG(Response Generation): 지식과 대화를 함께 활용하여, 응답을 잘 생성할 수 있도록 NLL 을 사용하였다.

 

최종적으로 모델은 추론시, 대화만 가지고 지식과 응답을 모두 생성해야 한다.

 

 

실험

 

4 Datasets

  • DialyDialog
  • EmphatheticDialogues
  • MuTual
  • SocialIQA-prompted Commonsense-Dialogues

이 논문처럼 Filtering 을 거쳤다. 하나 이상의 관계가 있는 데이터들만 사용했다.

 

 

데이터 통계는 다음과 같다.

  • Train data: 159000개의 발화가 담긴 대화 31000개
  • Test data: Train data 의 10 % 를 빼놓은 상태으로 대략 3000개

 

비교 방식

  • Default Model: DialoGPT-medium
  • Default Configuration: Hard Matching / symbol / NL
  • 159000개의 데이터로 Fine-Tuning 시킨 상태

 

실험해볼 기준은 다음과 같다.

  • 1. Hard Matching 이냐, Soft Matching 이냐?
  • 2. Symbol 이냐, Prompt 냐?
  • 3. NL 이냐, QA 냐?
  • 4. One Model 이냐? Two Models 이냐? (한번에 학습시키냐, 따로따로 학습시키냐?)

 

평가 지표

평가기준은 다음을 사용한다.

 

Model Variant Analysis

 

우선 모델의 기본 설정을 결정하기 위해, 'hard-symbol-NL' 을 기준으로 두고, 하나씩 바꿔가며 실험했다. 사람이 직접 두 문장 중 기준(더 문법적으로 옳다, 더 유익하다, 더 구체적이다 등)에 의해 하나를 고르거나 기권한다.

 

예컨대, 'soft-symbol-NL' 과 'Grammatical' 을 비교한 결과는 '53.0/10.0%' 다. 이는, 100명 중 53명이 'soft' 방식이 더 문법적이라고 뽑았고, 10명은 기권했다는 의미다. 나머지 37명이 'hard' 방식이 더 문법적이라고 본 것이다.

 

이런 식으로 결과를 내본 결과, 'soft-symbol-QA' 가 최고의 조합으로 나왔다. 하지만 막상 합쳐보니, 결과가 그리 좋지 않아서 처음에 뒀던 기본 설정인 'hard-symbol-QA'을 사용하기로 했다고 한다.

 

 

1. Does TBS produce better responses vs. end-to-end RG?

: TBS가 기존방식보다 나을까?

Automatic Metric

  • TBS가 낫다. 다양한 지표들에서도 가장 높은 점수를 부여받았다.
  • 심지어 Hard Macthing 은 전체 학습 데이터의 33%밖에 없었는데도, SOTA 라고 한다.

 

Human Evaluation

  • 보면 알겠지만, 모든 부문에서 가장 높다.

 

2. Is TBS knowledge generation better than other knowledge-augmented RG?

: 다른 지식 증강 RG 보다 TBS 가 지식을 더 잘 생성할까?

 

 

나는 지식 생성에 대해 이야기한 것이니, 지식 생성과 관련된 실험 결과를 제시할 줄 알았다. 하지만 읽어보면, 베이스라인으로 쓰인 모델들보다 성능이 좋았으니 더 좋다고 볼 수 있다고만 말한다. 물론 실험에 쓰인 베이스라인 모델들이 지식 증강을 활용하여 RG 를 개선하려고 시도한 모델이 맞다. (하지만, 그렇다기엔 1번 질문과 똑같은 답변을 내놓는 것은 아쉽다. 지식 자체를 생성하는 실험을 해봐도 좋았을 것 같다.)

 

일단 위 요소들이 무엇인지에 대해 명확하게 말해주지 않아서 나도 자신이 없다. 내가 논문을 보고 이해한 바대로, 정의해보겠다.

 

  • TBS-avg: 우리가 알던 그 TBS 맞음. 입력엔 오로지 대화만 들어감. 물론 TBS 가 예측함.
  • Hard-GT: 입력으로, Hard Matching 으로 알 수 있는 Knowledge 를 함께 제공해줌.
  • Soft-GT: 입력으로, Soft Matching 으로 알 수 있는 Knowledge 를 함께 제공해줌.

이렇게 TBS 는 아무 정보 없이 대화만 받았는데도, 성능면에서 뒤쳐지지 않고 오히려 앞서는 모습을 보여줬다고 말한다. 저자는 정확한 이유는 모르겠으나, 데이터의 55%만이 Hard GT 를 갖고 있는데 반면 TBS 는 77% 정도 생성해서 그런게 아닐까 싶다라고 한다.

 

(개인적으로 이 실험은 데이터의 100% 모두 Hard GT, TBS 로 무언가 생성되어야 유의미한 비교가 아닐까 한다.)

 

 

3. Quality of Generated Knowledge

TBS 모델이 보지 못한(unseen) 대화 데이터에서 얼마나 지식을 잘 생성하는지 보고자 했다. 사람이 3가지 측면에서 평가했다고 한다.

  • ConceptNet 에 없는 새로운 지식을 만들어 낼 수 있을까?
  • 생성한 지식이 그 자체로 합리적일까?
  • 생성한 지식이 대화와 관련이 있을까?

 

다음과 같이 해석해볼 수 있겠다.

  • 대략 85%의 데이터가 대화와 관련 있고, 이치에 들어맞는다.
  • KS(Knowledge Selection)과 비교해봐도, 'Makes Sense' 와 'Relevant' 점수가 비슷하거나 더 높다. 생성(generation)이 분류(Classification)의 성능을 따라잡는 것은 대단한 일이다.
  • KG(Knowledge Generation)-COMET 과 비교해봐도, 'Makes Sense' 와 'Relevant' 점수가 훨씬 높다.
  • TBS-two-model 이 더 점수가 좋다. 물론 RG(Response Generation)으로 넘어가면, TBS-one-model 이 더 좋긴 하지만 말이다.
  • COMET 과 TBS 는 새로운 지식을 창출했다. 물론 COMET 이 더 참신했으나, TBS 는 더 질 좋은 데이터를 제공한다.

 

4. Performance Analysis

 

ㄱ. 대부분의 반응들은 지식에 기반한다.

 

TBS 가 정말로 생성한 지식을 사용했는지 확인하기 위해, 작업자에게 대화, 지식, 응답을 주고 사용 여부에 대해 조사했다. 그 결과, 77%에 달하는 데이터가 생성한 지식을 사용되었다고 한다.

 

ㄴ. 잘못된 지식(noisy knowledge)은 응답의 질에 영향을 준다.

 

정말로 지식과 응답이 긴밀한 관계를 가졌는지 살펴보기 위해, 다른 대화에서 발췌한 지식을 무작위로 모델에게 주었다. 

 

위 결과를 통해, 모든 면에서 지식이 영향을 끼치고 있다는 걸 알 수 있다. 즉, 바꿔말하면 지식이 실제로 응답에 영향을 상당히(heavily) 미친다는 걸 알 수 있다.

 

ㄷ. Qualitative examples and limitations

 

 

위 예시처럼 TBS 모델은 상당히 좋은 지식을 만들고 그걸 응용할 줄 안다. 다른 모델들은 다소 쓸모 없거나 대화와 관련 없는 지식을 생성하기도 했다. (솔직히 위 그림을 보면, TBS가 가장 뛰어나다는 생각은 안 들긴 한다.)

 

하지만, 한계점이 있다고 저자는 밝힌다.

  1. ConceptNet 을 기반으로 하는데, 1단계의 관계만 고려하지 여러 단계를 거친 관계를 고려하진 않는다.
  2. ConceptNet 은 주로 분류학이나 언어 지식에 관련된 관계뿐이다.
  3. 지금 모델은 언제나 지식을 생성한다. 지식이 필요할 때를 판단해서 사용하는 게 좋다.

(느낌상, ConceptNet 의 한계를 보여주고 있다.)

 

이런 논문이었다고 한다. 뒤에 결론 같은 건, 반복하는 말이니까 더 자세히 알아보실 분들은 찾아보시길 :)