논문 링크: https://arxiv.org/pdf/2004.14967.pdf
※ 팀 프로젝트에서 논문 리뷰 세미나를 목적으로 작성한 글입니다.
narrative, plot 생성 관련 논문을 리뷰해보고자 한다. 유사한 task로 오픈되어있는 서비스는 있었지만 (네이버 clova, plot generator ...) 개발에 참고할 만한 논문과 깃헙을 오픈한 곳은 별로 없었다. 그래서 일단 후보로 나왔었던 이 논문부터 리뷰해보도록 하겠다.
(이 논문을 읽어보니 가짜 뉴스에 악용될 것을 우려하여 모델을 배포하지 않았다는데, 다른 서비스들도 같은 이유일런지는 모르겠다.)
outline : characters, events 등 phrase
outline → story
dynamic memory block을 통해서 plot state 학습!
code 상으로 모델에 bodynum, discourse(intro/body/conclusion) 들어감 → 파트마다 다르게 generate 되도록 (기승전결)
plot outlines : plot points (concept, event, phase) 리스트 (un-ordered)
→ 스토리 데이터셋으로부터 extract한 outlines : input
→ 스토리 데이터셋 (existing) : target
Wikiplots(TV shows, ,movies, books), WritingPrompts(Reddit에서 생성된 short story generation dataset), NYTimes(news articles)로부터 데이터 구축
: RAKE (Rapid Automatic Keyword Extraction) (빈도수 기반, domain independent)
GPT + memory matrix + discourse feature
(human writing styles에 기반한 구조)
outline representation
: plot point 구분자
discourse representation
: intro, body, conclusion 구분자
preceding context representation
: average embedding (이전 paragraph words)
memory representation
: embedding size, n : maximum number of tokens in outline
: outline points (d*n)
: topic distribution (d*n)
: (d*2n)
GPT의 원래 self-attention representation + memory와의 attention으로 생성한 representation average
※ 모두 delimit formed outline을 input으로
ROUGE (주로 요약 task에 사용, 중요한 정보가 다 들어갔는지)
BLEU (주로 번역 task에 사용, 예측한 게 맞는지)
self-BLEU : 생성된 document 중 하나를 hypothesis, 즉 정답으로 가정하고 나머지 생성된 모든 document들을 가지고 BLEU를 구해서 average
automatic metrics는 PLOTMACHINES이 잘 나오는데, human evaluation은 엎지락뒤치락하는 듯한 결과
NLG 분야는 evaluation하기가 쉽지 않은데, 다양한 평가를 시도한 것으로 보임
결론 : base GPT 짱, fine-tuning PLOTMACHINES 짱?
story로부터 추출한 outline을 input으로 넣어서 paragraph를 생성하는 형태
→ 테마를 지정하고 등장인물을 인풋으로 받는 우리 기획과 구조가 다르다. 등장인물을 넣어주는건 RAKE 대신 NER로 대체가 가능할까 싶지만, 빈도수 기반의 outline 추출만으로는 제대로 된 테마 반영이 어렵다. 테마를 outline이라고 취급한다면 다른 배경에서 해당 테마 단어가 나오기만 하면 모델은 성공이라고 생각할 것. 테마는 학습 데이터에 의존하지 않을까 생각.
(등장인물 이름도 사실 매우 낮은 빈도로 등장해서 스토리 생성에는 별 영향을 주지 못할 것으로 예상. 때문에 인풋으로 넣어주기보다 차라리 데이터셋 자체에서 마스킹하는 게 나을 수도.)
아래는 등장인물에 대한 고민은 우선 배제하고 테마를 지정할 수 있도록 하기 위한 방안들이다.
1-1. 확보되는 데이터(라벨링은 피하고 싶지만..)를 분류하여 테마별로 개별 모델화 (이렇게 되면 모델 별로 학습시킬만큼 데이터 확보가 안될 수도)
1-2. 하나의 모델로 진행할 때 훈련시킬 데이터셋의 인풋에 테마를 아예 넣어주거나 (이것 역시 테마 분류 작업 필요) 혹은 데이터 clustering을 진행하여 테마별 대표 phase를 추출해서 고정 (이렇게 되면 한 테마 안에서 굉장히 단조로워질 수 있음)
모델과 서비스 구조 논의 후 정리된 방향을 토대로 데이터 수집한 후에,
kogpt2를 기반으로 간단하게 transfer learning을 진행하여 baseline을 살펴보는 게 좋을 것으로 보임
++ 최근 plotmachines를 레퍼런스로 삼은 논문도 나왔음 : https://arxiv.org/pdf/2101.00822.pdf