layout: post title: (ACL 2018) Hierarchical Neural Story Generation subtitle: excerpt: “” show-avatar: true category: papers tags: [ACL, ACL2018, Story Generation, Hierarchical Story Generation, Fusion mechanism, Gated self-attention mechanism] comments: true —



Storytelling

스토리 생성이 어려운 통상적인 이유는 아주 많지만 크게 두 가지 정도로 추릴 수 있습니다.

1) Long-range dependency: 스토리는 처음부터 끝까지 테마적으로 일관성을 가지고 있어야 합니다. 따라서 매우 긴 의존성을 모델링할 수 있어야 합니다.

2) Creativity : word-by-word generation정도의 수준이 아니라, 높은 수준의 플롯을 만들 수 있어야 합니다.

  • 논문에서 저자는 스토리 생성을 위한 hierarchical model 제안합니다. 모델의 전체적인 파이프라인을 살펴보면, 먼저 스토리 생성의 키워드가 되는 prompt(premise)를 생성하고 이를 이용하여 스토리를 만들어냅니다. prompt는 스토리를 생성에 있어 전체 플롯에 대한 grounding을 제공하기 때문에 일관성 있는 스토리를 만들기 훨씬 쉬워질 뿐더러 sequence model이 주제를 벗어나는 일도 줄어들게 됩니다.

논문에서 이야기 하는 기술적인 어려움은 다음과 같습니다.

1) prompt-story dependency: 일반적인 seq2seq 모델을 사용하여 hierarchical story generation을 시도하였을 때 writing prompt(일종의 이야기틀)에 거의 attention하지 않았는데, 그 이유는 prompt와 스토리 사이의 복잡하면서도 확실하게 규정되지 않은 의존성 때문입니다. 이는 언어 모델링에 필요한 closer dependency보다 모델링하기 훨씬 어렵습니다. 가령, 아래 그림의 첫번째 문장과 prompt간의 미묘한 관계를 통해 짐작할 수 있습니다.

1

2) Inefficiency: 기존의 recurrent architecture을 이용하여 매우 긴 문장을 모델링 하는 것은 매우 비효율적입니다.

  • 생성된 스토리와 prompt간의 연관성을 높이기 위해 pre-trained seq2seq 모델에 fusion mechanism을 도입합니다. 이를 통해 seq2seq 모델이 prompt와 스토리간의 의존성을 만드는데 도움을 줄 수 있습니다.

  • Convolutional architecture을 이용하면 모든 스토리가 parallel하게 인코딩 되어 효율성을 높일 수 있는데, 기존의 convolutional architecture은 한정된 양의 문맥만 인코딩 할 수 있습니다. 여기서 저자는 Gated self-attention machanism을 제안하고, 이를 이용하면 모델은 이전 시간대 출력에 condition될 수 있게 됩니다.

WritingPrompts라는 사이트에서는 제시된 prompt에 따라 사람들이 스토리를 만들어 올리는데, 일종의 crowd sourcing(?)하는 방식으로 데이터셋을 모았다고 합니다.

이렇게 생성한 스토리를 가지고 human judges evaluation을 하였을 때 non-hierarchical baseline에 비해 두 배나 더 많은 선택을 받았습니다.


1) Story Generation

2) Hierarchical Text Generation

3) Fusion Models


모델

저자는 “long-range dependency”“conditioning on an abstact, high-level prompt” 두 가지 문제를 해결해야 한다고 합니다.

Hierarchical Story Generation

좋은 스토리를 만들기 위해서 high-level structure은 필수적입니다. 하지만 기존의 언어 모델은 모두 word-by-word generation에 기반하기 때문에 high-level plan을 수립할 수가 없습니다. 생성 프로세스를 두 단계로 나누어 plan ability를 부여합니다.

1) Convolutional language model을 이용하여 스토리의 prompt(premise)를 생성합니다.

2) seq2seq 모델을 사용하여 premise를 따르는 스토리를 만들어냅니다.

Conv seq2seq model

RNN은 token을 sequential 프로세스하기 때문에 스토리와 같이 매우 긴 데이터셋을 다루기 어렵습니다. 대신 convolutional seq2seq model을 사용하면, encoder와 decoder로 모두 CNN로 되어있기 때문에 parallel한 연산이 가능하고 따라서 매우 긴 sequence를 효율적으로 다룰 수 있습니다. 여기서 encoder와 decoder은 여러 attention module들로 연결되어 있는데, decoder의 각 layer에서 attention을 사용함으로써 encoder output의 가중치 합을 수행합니다.

Gated Multi-Scale Self-Attention

CNN은 window내의 bounded context에 대해서만 모델링할 수 있습니다. 따라서 unbounded context를 모델링하기 위해서 decoder에 self-attention mechanism을 적용합니다. 그러면 이전에 생성된 단어를 참조할 수 있으면서도 병렬로 처리되기 때문에 한정된 컴퓨팅 자원으로 long-range context를 잘 추출할 수 있습니다.

2

  • Gated Attention: multi-head attention을 사용하여 각각의 head가 다른 위치의 정보에 attend할 수 있게 합니다. 여기서 query, key, value는 linear하게 project되는 것이 아니라 Gated Linear Unit(GLU)가 있는 신경망에 의해 주어집니다. 이 Gating은 self-attention mechanism이 디테일한 선택을 할 수 있게 합니다.

  • Multi-Scale Attention: 위의 그림에서 볼 수 있듯이 각각의 head operating이 서로 다른 time scale로 수행됩니다. 즉, 각각의 head로 들어오는 input은 다양한 scale로 downsampled되는데 예를 들어, 첫 번째 head는 전체 input을 보고, 두 번째 head는 둘중 하나는 보고 하나는 건너뛰고. 세번째는 셋중 하나를 보고 둘은 건너뛰고 … 이렇게 다양한 time scale은 head가 서로 다른 정보에 attend할 수 있게 합니다. downsampling 연산은 attention map에서 토큰의 개수를 제한함으로써 이를 더욱더 sharp하게 만듭니다.

3

single attention head의 출력은 다음과 같이 표현됩니다.

4

만약 모델이 과거의 timestep의 정보를 무시하려고 하는 경우(노이즈만 있는 경우), 모델이 각각의 timestep에서 영벡터를 attend할 수 있습니다. 또한 self-attention mechanism에서 과거의 timestep을 attend하는것만 가능하고, current timestep을 attend하는것은 허용되지 않습니다.

Model Fusion


정리