-
[Story Generation Study Week 02 : Story Generation & Story Completion] Event Representations for Automated Story Generation with Deep Neural Nets (AAAI, 2018) ReviewAI/NLP 2022. 6. 29. 16:16728x90
[Story Generation Study Week 02 : Story Generation & Story Completion]
Event Representations for Automated Story Generation with Deep Neural Nets (AAAI, 2018)
Review
[Story Generation Study Week 02 : Story Generation & Story Completion]
[commonsense] A Corpus and Cloze Evaluation for Deeper Understanding of Commonsense Stories (NAACL, 2016)
[event] Event Representations for Automated Story Generation with Deep Neural Nets (AAAI, 2018)
Strategies for structuring story generation (ACL, 2019)이번 스터디에서는 비교적 초반의 Story Generation 논문들을 살펴본다.
Abstract & Introduction
- Automated Story Generation 이란?
- 정의 : event, action, word들의 연속열, 즉 story를 선택하는 것
⇩
- 이전 연구들 [1]
- 대부분의 story generation system은 symbolic planning이나 case based reasoning을 사용했다
- 한계 : Domain Knowledge로 커버할 수 있는 Topic들만 서술할 수 있다 / 사람의 지식에 의존할 뿐, 알고리즘이나 엔지니어링의 결과가 아니였다
- 대부분의 story generation system은 symbolic planning이나 case based reasoning을 사용했다
- Open Story Generation [2]
- 이 Open Story Generation라는 분야는 어떠한 topic의 story이라도 다 생성할 수 있도록 한다 ! ( ↔ 이전의 manual domain knowledge만을 커버할 수 있는 것과 달리.. )
⇩
- 본 논문에서는 ... [3]
- Recurrent encoder-decoder NN (e.g. Seq2Seq)으로 위의 Open Story Generation 문제를 풀어나가겠다!
- 데이터는 Wikipedia에서 추출한 영화 플롯 요약본 Corpus 사용 → 가능한 많은 topic 커버하기 위해서
- 본 논문의 저자들의 아이디어 [4,5]
- 한계점
- 한계 1 : Character나 Word Level에서 model를 구축하게 된다면 문법적으로 맞는 문장들을 만들어내겠지만, 문장들 간의 일치하는 서사들을 만들어낼 수 없다
- 한계 2: 그렇다고 Sentence Level events는 각 event간의 어떠한 상관관계 찾기 어려울 수 있다
- 대규모의 corpus를 가지고 있더라도 각 문장 다 한번씩만 존재할 가능성 높다 → Event Sparsity 문제 !
- 일관된 story 만들기 ? → "Event Representation!"
- 이미 존재하는 story의 문장들에서 기본적인 semantic information을 추출할 수 있다면, 이를 기반으로 좋은 스토리는 어떤 구조를 가지고 있는지 학습할 수 있을 것이다!
- 그리고 그 template들을 가지고 새로운 story들을 생성해낼 수 있을 것!
- 한계점
[Event Sparsity 문제란?]
["최불암이 손자랑 놀고 있었다.", "손자 : 굿모닝 ~ ", .....]
⇩
1. <"최불암","놀다", ø ,"손자와"> , <"손자","말하다",ø,"굿모닝">, ...
2. <"Entity 1","놀다", ø ,"손자와"> , <"Entity 2","말하다",ø,"굿모닝">, ....
→ 1번과 같이 Event를 표현할 경우 Event가 한번씩만 등장할 가능성 높지만,
2번과 같이 추상적으로 표현할 경우 (최불암 → Entity1) 동일한 Event의 등장 가능성 높아짐 (Event Sparsity 해결)
⇩
어떻게 Dataset의 문장에 있는 기본적인 semantic information을 잘 추출해낼 것이냐?
잘 표현하기 위한 Event Representation 찾을 것 !
⇩
그 Event Representation을 통해 새로운 story 만들어낼 것이다- Contributions [6~8]
- An event represenation, event2event, and event2sentence [6,7]
- event2event : 하위의 여러 event represenetation 생성
- event2sentence : 추상적인 event → 인간이 읽을 수 있는 자연스러운 문장으로 translate
- event2event + event2sentence 모델을 합친 전체 story generation pipeline [8]
- An event represenation, event2event, and event2sentence [6,7]
[세 줄 요약]
1. Automated Story Generation 중에서도 Open Story Generation를 할 건데, 일관된 story를 유지하기 위한 방법으로 Event Representation을 사용할 것이다. Event Representation가 뭔지,
2. Event에서 Event를 추출해 새로운 Event representation를 생성하는 Event2Event 모델과,
3. 새로운 Event에서 자연스러운 Event2Sentence 모델을 뒤에서 설명해줄게 ~!
Event Representation
: 이 section에서는 Event Representation이라는 핵심 개념에 대해서 설명해준다.
: 이 section에서는 input의 abstraction 정도에 따라 성능이 어떻게 달라지는지, 의미를 잘 담는지 볼 것이다!
- Event Representation 구성
- 4-tuple <s, v, o, m> (stemming 된 것들로... )
- s : subject
- v : verb
- o : object
- m : modifier
- object나 modifier 없으면 ø(EmptyPararmeter)으로 둔다
- 4-tuple <s, v, o, m> (stemming 된 것들로... )
- Event Representation 추출
- 각 문장에서 한 개 이상의 event들 뽑아낼 수 있다
- “John and Mary went to the store,”
- <john, go, store, ∅>
- <mary, go, store, ∅>
- 각 문장 내의 event 개수의 평균 = 2.69
- 각 story 내의 문장 개수의 평균 = 14.515
- Event Representation의 Variations : abstraction의 수준을 높여본다! (sparsity 감소)
- <s, v, o, m> : 가장 간단한 형태
- <최불암, 놀다, ∅ , 손자와>
- Generalized
- “PERSON” names were replaced with the tag <NE>n
- <최불암, 놀다, ∅ , 손자와> → <NE1, 놀다, ∅ , NE2>
- Other named entities were labeled as their NER category (e.g. LOCATION,
ORGANIZATION, etc.).
- “PERSON” names were replaced with the tag <NE>n
- Named Entity Numbering
- 본 논문에서는 두 방식으로 진행했다 함
- 매 문장마다 named entity numbering 리셋 (sentence NEs)
- 모든 input-output pair 마다 named entity numbering 리셋 (continued NEs)
- 본 논문에서는 두 방식으로 진행했다 함
- Adding Genre Information
- 5-tuple <s, v, o, m, g>
- <최불암, 놀다, ∅ , 손자와> → <최불암, 놀다, ∅ , 손자와, 유머>
- g : genre cluster number (LDA로 topic modeling해서 100개 추출)
- 5-tuple <s, v, o, m, g>
- <s, v, o, m> : 가장 간단한 형태
⇒ 최종적인 Story는 위와 같이 표현되는 event representation의 sequence로 나타낼 수 있다!
⇩
⇒ 즉 다음 event의 probability를 maximize하는 과정을 통해 story generation할 수 있을 것이다 !
Event-to-Event
: 이 section에서는 위에서 정의한 각기 다른 event representation이 Event2Event 모델에 들어갔을 때, 어떻게 성능이 달라지는가를 볼 것임
: 성능 평가 방법 - 한 story에서 input Event x가 들어갔을 때, 다음 event인 y를 얼마나 잘 예측하느냐 ? / Perplexity 통해...
- model :a recurrent multi-layer encoderdecoder network based on (Sutskever, Vinyals, and Le 2014) - Seq2seq 모델
- input :
- output :
- metrics: Perplexity / BLEU
1) Perplexity
: PPL은 이 언어 모델이 특정 시점에서 평균적으로 몇 개의 선택지를 가지고 고민하고 있는지를 의미 ('헷갈리는 정도'로 이해 가능)
: PPL은 수치가 높으면 좋은 성능을 의미하는 것이 아니라, '낮을수록' 언어 모델의 성능이 좋다는 것을 의미한다
2) BLEU
: 기계 번역 결과(prediction)와 사람이 직접 번역한 결과(ground truth)가 얼마나 유사한지 비교하여 번역에 대한 성능을 측정하는 방법
: Generated Sentence의 단어가 Reference Sentence에 포함되는 정도
: 측정 기준은 n-gram에 기반 (본 논문에서는 n= 1~4)
- n-gram을 통한 순서쌍들이 얼마나 겹치는지 측정(precision)
- 문장길이에 대한 과적합 보정 (Brevity Penalty)
- 같은 단어가 연속적으로 나올때 과적합 되는 것을 보정(Clipping)
- 실험 결과
- original word events는 original sentences을 넣었을 때와 비슷한 Perplexity를 가지지만, <NE>tags로 generalize했을때 성능이 유의미하게 나아졌음을 알 수 있다 !
- 전체적으로 the generalized events가 더 나은 Perplexity score 결과를 보였다.
- Bi-gram으로 했을 때가 더 BLEU 값이 높아졌고,
- genre 정보를 추가했을때 perplexity가 낮아졌음을 알 수 있다
- 한 문장의 모든 event가 다음 문장에 있는 모든 event들과 상관 관계를 잘 가질 수 있었다!
- original word events는 BLEU score가 더 높게 나오고, 실험 전반에서 낮은 점수를 기록했는데, 이것은 BLEU가 올바른 성능 지표로 작용하지 않았기 때문!
- BLEU는 input을 얼마나 잘 recreation하는지를 판단하기 때문에 (우리는 recreation하는 것보단 다음 것을 잘 예측하는 게 중요하니까 !)
- 이에 비해 Perplexity 는 더 나은 metric인데, Perplexity는 전체 test dataset을 잘 예측하는지에 대해 연관되어있기 때문에 ...
Event-to-Sentence
: Event로는 사람이 직관적으로 이해할 수 없으니, 생성한 Events들을 sentence로 표현하는 모델이 바로 Event2Setence다!
: 성능 평가 방법 - Event를 얼마나 잘 자연어 문장으로 번역하는지?
- Model : LSTM RNN - beam search decoder (B=5)
- Input : the events of a particular representation
- Output : a newly-generated sentence based on the input event(s).
- Metrics : Perplexity / BLEU
[새로운 접근법 1 : Generalized Sentence]
- generalized events를 자연어 문장으로 표현하는 것은 더 어려운 Task인데, 왜냐하면 <NE>로 표현된 인물의 이름, 장소 이름을 Model이 예측해야 하기 때문이다
- 그래서 본 논문에서는 새로운 방식을 고안했는데 event2sentence를 학습할 때 Generalized sentence로 한다 !
- 예시
- Original Sentence : The remaining craft launches a Buzz droid at the ARC 1 7 0 which lands near the Clone Trooper rear gunner who uses a can of Buzz Spray to dislodge the robot.
- Generalized Sentence : The remaining activity.n.01 launches a happening.n.01 droid at the ORGANIZATION 1 7 0 which property.n.01 near the person.n.01 enlisted person.n.01 rear skilled worker.n.01 who uses a instrumentality.n.03 ofhappening.n.01 chemical.n.01 to dislodge the device.n.01
[새로운 접근법 2: S+P Sentence(split and prune sentences) ]
- 한 문장 당 하나의 Event 대신에 한 문장당 여러 이벤트로 표현한다!
- 전치사구 없애고, 접속사 단위로 쪼개고, .... 등의 방식으로 문장을 잘게 쪼갠다
- 예시
- Original Sentence : Lenny begins to walk away but Sam insults him so he turns
and fires, but the gun explodes in his hand. - S+P Sentence : Lenny begins to walk away. Sam insults him. He turns and
fires. The gun explodes.
- Original Sentence : Lenny begins to walk away but Sam insults him so he turns
- 실험 결과
- 여기서도 Perplexity는 Generalized Sentence에서 잘 나오지만,
- splitting and pruning sentences 는 원래 단어가 지켜졌을 때 BLEU score가 더 높게 나온다
- Generalized events with full-length generalized sentences는 the original words보다 BLEU 성능 더 높다
- 하지만 S+P sentence 썼을 때는 오히려 그 패턴 반대되더라 ~
- S+P and word generalizing methods 모두 sparsity of events 문제를 줄여주기 때문에, 두 방식을 결합했을 땐 너무 많은 정보들이 사라진다
[세 줄 요약]
1. 문장에 담겨 있는 Event를 잘 추상화하기 위해 Event Representation을 사용했고, event representation의 추상화 정도에 따라 해당 event representation을 input으로 넣었을 때 성능이 달라지더라 ~
2. Event2Event 모델은 Seq2Seq을 활용하여 input sentence의 events에서 다음 문장의 events을 얼마나 잘 생성하는지를 측정했다
3.
Future Work
다음 발표할 논문과 함께 돌아오도록 할 것이다,, 케케
다음 논문 링크 :
https://asidefine.tistory.com/194
Conclusions
- Automated Story Generation 분야에서는 Event Representation이 중요하다 (제목에서 나타나있듯이 .. )
- sparisty of event를 줄이면서도 story data의 semantic meaning을 유지할 수 있는 representation을 선택하는 방안을 제안했다
- sparisty of event이 story generation 성능을 낮추기 때문..
- event2event / event2sentence으로 구성된 story generation pipeline 구축했다
- event2event : Data → event representation
- event2sentence : 추상적이고 일반화된 event representation → 자연어로 ..
- 공부 전 의문점
- 이 Story Generation 분야에서는 성능 평가를 어떻게 하지?
- 얼마나 story가 자연스러운지, 재밌는지 이런 것은 정성적인 평가 방법일테고 ...
- 이 Story Generation 분야에서는 성능 평가를 어떻게 하지?
- 공부 후 답변
- 이 Story Generation 분야에서는 성능 평가를 어떻게 하지?
- Perplexity와 BLEU 사용해서 !
- 이 Story Generation 분야에서는 성능 평가를 어떻게 하지?
Reference
https://arxiv.org/abs/1706.01331
728x90'AI > NLP' 카테고리의 다른 글
- Automated Story Generation 이란?