[Review] MEGATRON-CNTRL: Controllable Story Generation with External Knowledge UsingLarge-Scale Language Models (EMNLP, 2020)

Migyeong Kang·2022년 7월 27일
0
post-thumbnail

Summary

  • Pre-trained Language Model에 다음 두 가지 요소를 추가하고자 한 논문!

    1. External Knowledge (외부 지식)

    2. Controllabiltiy (조절 가능성)

  • 이를 위한 MEGATRON-CNTRL 모델 구성, 총 네 가지 Step에 걸쳐 Text Generation 수행!

  • 구축한 모델을 Story Generation Task에서 검증! 아주 우수!

1. Introduction

1-1. Pre-trained Language Model

  • GPT-2, BERT와 같은 large pre-trained langguage models은 다양한 NLP Task에서 promising result를 보여줌.

  • 그 중에서도 text generation task에서, 이들을 사용한 모델이 long, grammatically correct, and fluent text를 생성한다는 것을 보여줌.

  • 이 모델들을 Fine-tuning 함으로써 다양한 Generation 기반의 downstream tasks은 significant improvements를 보여주었음.

1-2. Drawback 1: Lack of Knowledge

  • 모델은 사람이 자연어를 생성할 때 사용하는 지식들을 사용하지 않음.

  • 이로 인해, 예를 들어 GPT-2 기반의 모델들이 생성하는 문장은 illogical하며 Sotry generation과 같은 지식 기반의 생성 테스크(knowledg-driven generation tasks)에서는 ungrammatical한 결과를 초래함.

  • 이에 따라 이전 연구 (*Guan et al. 2020)에서는 commonsense dataset을 기반으로, 언어 모델에 commonsense knowledge를 도입하려고 했으나, 이는 implicit encoding of knowledge이었음.

  • 결과적으로 모델 학습 단계에서 모델에게 언제, 어떤 external knowledge를 활용해야 하는지는 가르쳐줄 수 없다는 한계가 존재함.

    Pre-trained Language Model이 보다 명시적으로(explicit) External Knowledge를 활용할 수 있게 하는 메커니즘이 필요함!

1-3. Drawback 2: Hard to Control

  • Language Model이 control하기 힘들다는 건 우리 모두 잘 알고 있다~!

  • 이에 따라, 이를 해결하고자 한 과거 연구들이 있었음. (세 편 정도 소개해주지만, 여기서는 Pass)

  • 그러나, 과거 연구는 control하고자 하는 condition을 항상 pre-define해야 했으며, 항상 모델 시작 부분(beginning)에 condition을 한번 주고 rest of the document를 생성하도록 했음.

  • 이 때문에, control를 세부적으로 할 수 없으며, sentence나 sub-document level의 control은 불가능했다는 한계가 존재함.

    모델 자체에서 지금 어떤 External Knowledge를 주입할 지 판단할 수 있으면서, 전체 Document가 아닌 Sentence 혹은 Sub-Document 단위의 지식 주입이 가능한 모델이 필요함!

1-4. In this paper!

  • 방금 말했던 방향을 갖춘 Controllable Text Generation Framework를 만들자!

  • 근데 특히, Generation Task 중에서도 Story Generation Task에 맞춰서 만들 것임!

  • 우리가 제안할 FrameWork는 총 네 가지 부분으로 구성됨.
    1. Keyword Predictor
    2. Knowledge Sentence Retriever
    3. Contenxtual Knolwedge Ranker
    4. Conditional Text Generator

2. Framework

[Overview]

1. Keyword Predictor

  • Story Context가 주어졌을 때, 생성될 다음 문장에 대한 set of keywords를 예측함.
  • 다시 말하면 , 이전 맥락에 따라 다음 생성될 스토리 문장에 대한 주제 (keyword)를 예측하는 것!

2. Knowledge Sentence Retriever

  • 앞에서 생성한 키워드들을 가지고 외부 knwoledge-base에 쿼리를 날려, 해당 키워드와 관련된 knowledge sentence들을 반환해옴.
  • 다시 말하면, 내가 생성하고자 하는 주제와 관련된 외부 지식들 가져오는 것!

3. Contextual Knowledge Ranker

  • 모든 knowledge sentence가 다 중요하리란 법은 없다. story context를 기반으로 그 관련성에 따라 knowledge sentence의 순위를 매김.
  • 다시 말하면, 가져온 외부 지식들에 대해서, 현재 생성하고 있는 스토리 라인과 관련성 높은 것 순으로 랭킹하는 것!

4. Conditional Text Generator

  • sotry context와 상위에 랭크된 knowledge sentnece를 GPT-2의 Input으로 넣어 스토리의 다음 문장을 생성함. 생성된 문장은 다시 story context로 들어가 순환 또 순환~
  • 다시 말하면, 이전 스토리 맥락 + 현재 생성할 문장에 대한 외부 지식을 같이 Decoder의 입력으로 보내, 현재 스토리 문장을 생성하는 것!

Notation

  1. Knowledge-Base 관련
    - GG : knowledge-base
    - tt : set of knowledge triples (subject, relation, object)
    - rr : knowledge sentence (rr = T(t)T(t)이며, TT는 Template를 의미함.)

    [추가 설명]
    Triples 은 기존에 구성한 Template에 기반해, Knowledge Sentence 형태로 변환됨.
    [Example] (eiffel tower, At-Location, Paris)---> (eiffel tower is at paris.)
    이렇게 Triples 형태를 Template를 통해 knowledge sentence로 바꿈으로써, 모델에 효과적으로 external knowledge를 주입시킬 수 있었다고 함.

  2. Story 관련
    - SS : story

    - ss : sequence of individual story sentence
    - KiK^i : keywords associated with story sentence sis^i.

    - RiR^i : knowledge associated with sis^i, 각각의 rr은 knolwedge sentence를 의미.

    [추가 설명]
    키워드는 language model의 Vocabulariy로부터 만들어짐.
    키워드나 knowledge sentence는 없을 수도 있음.
    keyword하나 당 knowledge sentence 이런거 아님. 두 개 개수는 다를 수 있음.

  3. 모델 입력 관련
    - XiX^i : story context, 각각의 xix^i는 해당 Sentence 자체와 그 Sentence의 Knolwedge Sentence로 구성됨.


    - 모델의 목적은 Xi1X^{i-1}이 주어졌을 때 xix^i를 생성하는 것임.

    [추가 설명]
    xix^i의 구성요소인 RiR^i, sis^i를 예측하는 테스크로 정의 가능. 이를 위해 먼저 과거 context story (Xi1X^{i-1})를 보고 현재 문장인 sis^i과 관련될 것으로 예상되는 External Knowledge RiR^i를 예측하고, 그 다음 이를 바탕으로 sis^i 자체를 생성하게 되는 것임.


2-1. Keyword Predictor

  • 이전 story context Xi1X^{i-1}이 주어졌을 때, 모델은 set of keywords KiK^i를 예측함. (다음으로 생성될 문장에 대한 키워드 집합)

  • Probability distribution을 위해 GPT-2 활용, Maximum likelihood training과 Token prediction loss를 활용해 학습.

  • Ground-truth : RAKE 알고리즘을 활용해 각 스토리 문장으로부터 키워드 추출함!

(근데 여기서는 알고리즘 이용했지만, 유저가 Control하고 싶은 경우 자기가 원하는 키워드를 넣어서 모델에 넣어주면 됨, 이런 면에서 controllable하다는 것!)

[RAKE 알고리즘]
'Rapid Automatic Keyword Extraction'의 약자로 자세한 설명은 아래 링크에서 확인.
https://www.analyticsvidhya.com/blog/2021/10/rapid-keyword-extraction-rake-algorithm-in-natural-language-processing/

2-2. Knowledge Sentence Retriever

  • 앞 단계에서 생성한 keywords KiK^i를 가지고 knowledge base GG로부터 knowledge를 retrieve 하는 단계.

  • 다음과 같은 절차로 수행 (엄청 간단!)

    1. knowledge base GG 안에 있는 Triples들을 templates를 통해 모두 knowledge sentence로 변환함.
    2. 그 다음 KiK^ikeyword들과 이 Knowledge Sentence를 매칭시킴.
  • Ground Truth : 학습이 아니라 매칭 방식이라 필요 X!

!! 그냥 키워드 매칭방식이라 띠용스러우시겠지만...
저자분들도 이를 의식하셨는지 나중가서는 Learnable하게 구성할 것이라 하심.

2-3. Contextual Knowledge Ranker

  • 앞에서 keyword를 기반으로 한 knowledge를 선정했다고 하지만, word들은 ambiguous하기 때문에 뽑아온 knowledge들은 여전히 large & noisy함.

  • 그래서 저자들은 이 knowledge sentences를 contextualize함으로써, story context와 relevant하고 useful한 정보만 얻고자 하였음.

  • 이를 위해 Ranking 기법을 사용!

  • 즉, 앞 단계에서 뽑아온 Knowledge Sentence들을 Story와의 Relevant를 바탕으로 순위를 매긴 후, 상위의 랭크된 Knowledge Sentence만을 다음 단계로 넘기는 것!

  • Ground Truth : 정답은 어떻게 설정할 것인가? (가장 관련 있는 문서가 무엇인지 어떻게 아는데!)


Building Pseudo Label of RiR^i

  • RR에 대한 Ground truth를 만들어야하는데 ... 인간도 스토리 작성할 때 어떤 배경지식을 쓸거다 막 생각하고 쓰진 않잖아요?

  • 때문에 이건 상당히 난해한 문제라고 할 수 있음. 그래서 우리는 직접적인 Supervised signal보다는 weakly supervised signal를 주기로 결심함.

  • 우리는 현재 setnence sis^i를 생성하는 데 쓰이는 RR을 다음과 같이 가정함.

    1. sis^i의 keyword와 겹칠 것이다 (overlap).
      --> keyword로 앞에서 뽑은 External Sentence를 대상으로 할 거니까.
    2. si1s^{i-1}sis^i 둘 다와 상당히 강한 connection이 있을 것이다.

[추가 설명]
이 단계에서는 si만 가지고 하지 않고, si-1도 포함됨.
왜냐하면 si만 가지고 적절한 지식을 가져오는게 매우 어려웠다고 함.
또한 si-1이전의 context는 포함시키지 않았다고 하는데, 이유는 si안에 포함된 information을 overwhelms하기 때문임. 따라서 더도 말고 덜도 말고 딱 si-1, si만 포함시키는 게 제일 좋았다고 함!

  • 이러한 가정 아래, 앞 단계에서 건네받은 knowledge sentence 집합인 RiR^i을 바탕으로, 우리는 sentence sis^isi1s^{i-1}를 concatenate함.
  • 그 다음 Universal Sentence Encoder (USE)를 사용해 그들을 encoding함.
  • USE: 널리 사용되는 Semantic similarity toolkit.

  • RiR^i 속 knowledge sentence들 각각도 USE를 통해 Encoding 해 줌.

  • 그리고 UsU^sUjrU^r_j (각 knowledge sentence의 encoding)의 cosine similarity를 구함.
  • 이후에 이 similarity를 바탕으로 sorting하고, top-N higthest scores를 가진 knowledge sentence rr들을 pseudo label of RiR^i로 사용함.

  • 다시 돌아와서! 이렇게 ground truth를 만들었고, 우리는 이렇게 미리 만들어둔 knowledge sentence들이 출력되도록 Ranker를 학습시켜야 함.
  • 학습의 입력값은 Story Context Xi1X^{i-1}과 Knowledge Sentence 집합 RiR^i임.
  • BERT 모델을 통해 Story Context와 각각의 Knowledge Sentence knowledge rjir^i_j가 Encoding됨.

[참고 설명]
Story context Xi1X^{i-1}는 앞서 말했듯 knowledge sentence 집합 Ri1R^{i-1}과 sentence si1s^{i-1}로 이루어져 있음. 이들을 같이 넣기 위해 [SEP]토큰 가운데에 넣어주었음.

  • 그리고 두 개의 벡터를 내적(Inner product)함으로써 Story Context와 해당 knowledg sentence와의 relevance를 나타내는 Score CC를 얻을 수 있음.
  • 학습을 위해선, Negative Sample을 이용해 다음과 같은 Ranking Loss를 구성하였음. (M은 margin이며, empirically 결정함)

[참고 설명]
해당 로스의 목표는 Xi1X^{i-1}과 Negative Sample Representations 사이의 거리인 C(Xi1,rn)C(X^{i-1}, r_{n})가 Margin mmC(Xi1,rp)C(X^{i-1}, r_{p})보다 커지게 만드는 것!

2-5. Conditional Generator

  • 이제 마지막! 앞에서 뽑은 관련 높은 Knowledge Sentence집합 RiR^i와 와 Story context Xi1X^{i-1}를 GPT-2의 input으로 넣고, 새로운 스토리 sis^i를 Generating 함.

3. Experimental Setup

3-1. Dataset: ROC Dataset

  • 98,161개의 스토리로 구성
  • 각각의 스토리는 5개의 문장으로 구성
  • 모델의 Task : 각 스토리의 첫 번째 문장이 주어졌을 때, 스토리의 나머지 문장을 생성!
  • External Knowledge Base : ConceptNet (600k knowledge triples로 구성)

3-2. Models

  • Megatron-LM을 사용함.
    (매우 큰, billion 단위의 transofrmer 기반 언어 모델을 학습시키기 위한 모델이라고 함.)
  • 모델은 Knowledge Ranker에는 BERT, Conditional Generator에는 GPT-2
  • Number of knowledge setnence는 10으로 두었음.
  • 따라서 Story Context가 주어졌을 때, top-10개의 Retreived knowledge sentence가 ConcpetNet으로부터 선택됨.

3-3. Baselines

  1. Plan and write (Yao et al., 2019) : LSTM-based model 기반의 모델, keyword를 생성하고 이를 story planning에 사용.
  2. Knowledg enhanced GPT-2 (Guan et al., 2020) : 현재 ROC 데이터 기준 Sota 모델. knowledge를 우리처럼 이용하긴 하지만 implicit하게 이용함. 얘도 모델은 GPT기반임.
  3. 고냥 GPT

4. Experiment Result

4-1. Automatic Evaluation

  • 자동 메트릭 평가를 위해 다음 세 가지 지표 사용.
    1. Repeat : 5-gram을 기준으로, 얼마나 반복된 텍스트를 생성하는가
    2. Distinct : 4-grams을 기준으로, 얼마나 서로 다른 텍스트가 생성되었는지
    3. Perplexity : 말을 말 같이 하는지

  • 크기에 따른 성능 비교를 위해 같은 모델 여러 개 사이즈로 구성.

  • 제일 작은 크기의 모델도 이전 연구들보다 PPL, Distinct 면에서 우수함.

  • 근데 반복성에 있어서는 Yao et al. 보다 worse한 것을 볼 수 있음. 근데 이건 Guan et al도 마찬가지임!

  • 이에 대한 이유는 Yao et al.의 작은 8M 모델이 더 짧은 short-term statistics를 학습하기 때문이고, large pre-trained 모델로 한 게 long-dependencies를 학습하기 때문이라고 설명.

  • 그래도 다른 프리 트레인드 모델 쓴 모델에 비하면 우리게 덜 repeat하고, higher distinct score를 얻은 것을 알 수 있었고, 결과적으로 우리 모델이 덜 반복적인 스토리를 생성한다고 볼 수 있음.

[추가 설명]
Perplexity의 낮을 수록 좋은 지표임. 근데 낮은 용량의 M-CNTRL모델에서 이전 연구들보다 값이 큰 모습을 볼 수 있음. 저자들은 이에 대해 이전 모델들이 sis^i를 위해 [s1, s2, s3..., si-1]를 기반으로 스토리를 생성하지만, 우리 모델은 R이라는 external knowldege sentence가 들어가기 때문에 이게 노이즈로 작용했기 때문이라고 보고 있음. 하지만 문제되지 않느다고 함 왜? 큰 모델에서는 우리게 더 좋으니까~

4-2. Human Evaluation

  • 인간 평가를 위해 다음 세 가지 메트릭 사용.
    1. Fluency
    2. Coherence
    3. Consistency

  • Fluency의 경우 베이스라인과 우리 모델에서 나온 story pair를 보여주고, 각각의 메트릭 측면에서 어떤 게 더 좋은지 고르라고 시킴.

  • 인간 평가 결과는 Table 3의 consistency와 Table 4에 나타나있음.

  • 오른쪽과 왼쪽 중 누가 더 좋은지 선택한거 (100퍼 합이 아닌 이유는 tie 땜시)

  • 전반적으로 우리 게 훨씬 잘함!

  • 특히 fluency보다 coherence와 consistency가 더 많이 차이나는데, 이게 우리가 앞에서 일종의 주제인 knowledge를 가져다주니까 우리의 Conditional generative model은 generating text만 하면 됨.

  • 근데 이에 비해 기존의 GPT-2모델은 그 안에서 토픽도 찾고 생성도 해야하니까 이런 부분에서 coherence와 consistency 면에서 이득을 많이 본 것으로 보임.

  • 우리 모델간의 비교에서도 모델 사이즈가 더 클수록 성능이 더 좋아진다는 것을 알수 있음.

4-3. Controllability

Setting

  • 우리 모델의 Controllability를 테스팅하기 위해, 우리는 실험을 수행하였음. 거기서 우리는 Keywords를 그들의 반의어(antonyms)로 바꿔버림.
  • 이를 위해 특정 스토리에 해당하는 keyword 생성 후, 그것에 대한 반의어를 WordNet으로부터 공수 (여러개 있으면 Uniformly Random하게 샘플)
  • 그 다음에 우리는 스토리의 시작 문장과 원래의 keyword를 제공함. 그 다음 현재 i번째 타임의 keyword는 모두 반의어로 교체한 걸 줘버리고 생성하게 시킴.
  • 우리는 이 반의어를 사용한 모델을 MEGATRON-CNTRL-ANT라고 부를 것임.

Result

  • 확실히 반의어로 생성하니까 유니크한 4-gram도 더 많고, 반복되는 구도 덜 함.
  • 이것의 의미는 반의어로 키워드가 교체된 스토리가 77.5% 만큼 새로운 그 반의어 키워드와 상응하는 content를 포함하고 있다는 뜻임 (human evaluation 결과)
  • 엄청 큰 8billion 모델의 경우 91.5% 정도로 잘했다는 결과!

5. Future Work

  • ROC story 데이터셋처럼 짧은 데이터셋 말고, 긴 데이터셋에서 얼마나 잘 하는지 보고 싶음.
  • RAKE가 키워드를 잘 뽑아주진 않더라, 발전이 필요해!
  • 아까 중간에 언급했던.. external knowledge 찾을 때 matching말고 learnable하게!

6. Take-home Messasge!



1. External Knowledge를 잘 활용하면서도 Controllable한 Generation Framework 제안함!
2. 총 네 가지 스텝! 주제 키워드 뽑고, 관련 지식 추출하고, 랭킹 매겨서, 이를 바탕으로 스토리 문장 Generating!
3. 전반적으로 성능 우수! ROC dataset에 대해 기존 Sota 능가 & Controllability에 대한 실험 & Capacity에 대한 실험 다양하게 진행

[내 느낀점]
완젼 새로운 것들 아니고, 있는 것들을 잘 조합한 논문! 이게 좋은 학회에 publish될 수 있었던 이유는 각 부품들을 설치하는 데에 대한 튼튼한 배경 설명, 유연하게 흘러가는 설명력! 그리고 다양하게 프레임워크를 실험해볼 수 있었던 튼튼한 실험이지 않을까~

profile
SKKU DSAIL 석박통합과정 n학기 / 정신건강과 인공지능의 융합을 연구합니다.

0개의 댓글