paint-brush
통계적 언어 모델 및 계층적 언어 생성 이해by@teleplay
827
827

통계적 언어 모델 및 계층적 언어 생성 이해

Chinchilla LLM 및 GPT-3과 같은 언어 모델은 통계적 확률을 기반으로 한 텍스트 생성에 사용됩니다. Dramatron은 일관된 스토리텔링을 위해 신속한 엔지니어링 및 계층적 생성을 활용하는 공동 집필 내러티브를 위한 대화형 도구입니다.
featured image - 통계적 언어 모델 및 계층적 언어 생성 이해
Teleplay Technology  HackerNoon profile picture
0-item

저자:

(1) 영국 DeepMind의 PIOTR MIROWSKI와 KORY W. MATHEWSON 및 두 저자 모두 이 연구에 동등하게 기여했습니다.

(2) JAYLEN PITTMAN, 미국 스탠포드 대학, DeepMind에서 수행한 작업;

(3) 리처드 에반스(RICHARD EVANS), 영국 딥마인드.

링크 표

초록 및 소개

스토리텔링, 이야기의 형태, 그리고 로그라인

창의적인 텍스트 생성을 위한 대규모 언어 모델의 사용

대규모 언어 모델에서 생성된 텍스트 평가

참가자 인터뷰

참가자 설문조사

토론 및 향후 작업

결론, 감사의 말, 참고자료

A. 자동화된 스토리 생성 및 제어 가능한 스토리 생성에 관한 관련 작업

B. 봇 크리에이티브 팀의 연극에 대한 추가 논의

C. 정량적 관찰의 세부사항

D. 보충 수치

E. DRAMATRON의 전체 프롬프트 접두사

F. DRAMATRON에서 생성한 RAW 출력

G. 공동 집필된 대본

3 창의적인 텍스트 생성을 위한 대규모 언어 모델의 사용

3.1 언어 모델

통계적 언어 모델(언어 모델 또는 LM)은 이전 토큰의 컨텍스트를 바탕으로 텍스트 토큰의 확률을 모델링합니다. 토큰은 단어, 문자 또는 문자 바이그램일 수 있습니다. 기계 학습을 사용하여 LM은 조건부 확률 분포를 근사화하기 위해 대규모 텍스트 말뭉치에 대해 교육을 받습니다. LM은 텍스트의 가능성을 계산하고 텍스트 프롬프트의 연속으로 새 텍스트를 생성할 수 있습니다. 텍스트 생성은 확률적이며 조건부 확률에서 무작위 샘플링을 포함합니다. 무작위 시드가 다르면 무작위 샘플도 달라집니다. 그림 3은 텍스트 프롬프트를 제공하고 LM을 사용하여 다양한 텍스트 샘플을 생성하는 예를 보여줍니다.


그림 3. 사용자 또는 Dramatron이 생성한 프롬프트가 접두사에 연결되고 태그로 장식된 언어 모델의 프롬프트 설정 그림. 서로 다른 무작위 시드에 대해 여러 제목 출력이 생성되며 각각 <end> 태그로 끝납니다.


이 연구에서 우리는 70B 매개변수를 가진 신경망으로 표현되고 MassiveText 데이터 세트의 1.4T 토큰에 대해 훈련된 Chinchilla LLM(대형 언어 모델)[48]을 사용했습니다. Rae et al. [84], 해당 말뭉치에는 6억 4백만 개의 MassiveWeb 문서, 4백만 개의 서적, 3억 6천 1백만 개의 C4 질문 및 응답, 11억 개의 뉴스 기사, 1억 4천 2백만 개의 GitHub 코드 항목 및 6백만 개의 Wikipedia 기사가 포함되어 있습니다. GPT-3와 같은 대체 LLM을 사용할 수 있습니다.[1]

3.2 제한된 컨텍스트를 우회하기 위한 계층적 언어 생성


이 프로젝트에서 우리는 인간 개입 없이도 장기적인 의미 일관성을 나타내는 전체 텍스트를 생성할 수 있는 시스템을 원합니다. 작성자는 계층 구조의 모든 수준에서 스크립트를 편집하고 수정하는 것이 좋습니다. 그러나 장기적인 의미론적 일관성을 달성하기 위해 인간 참여자가 필요하지는 않습니다. 계층적 방법은 사람의 개입 없이 단일 로그 라인에서 합리적인 장기 일관성을 나타내는 전체 스크립트를 생성합니다. 장기적인 의미론적 일관성을 달성하기 위한 우리의 접근 방식은 스토리를 계층적으로 생성하는 것입니다.


우리의 내러티브 생성은 추상화의 3개 계층적 계층으로 나뉩니다. 가장 높은 계층은 섹션 2에 정의된 로그 라인입니다. 즉, 중심적인 극적인 갈등을 설명하는 단일 문장입니다. 중간 레이어에는 캐릭터 설명, 플롯 개요(해당 위치와 함께 일련의 상위 수준 장면 설명) 및 위치 설명이 포함됩니다. 맨 아래 레이어는 스크립트 텍스트에 대한 실제 문자 대화입니다. 이러한 방식으로 각 레이어의 콘텐츠는 다른 레이어의 콘텐츠와 일관성을 유지합니다. 여기서 "일관성"은 LLM 생성 텍스트에 대한 상식이나 논리적 또는 감정적 일관성을 가정하지 않고 "통합된 전체를 형성"하는 것을 의미합니다.


그림 1에서 볼 수 있듯이 스토리는 하향식으로 생성됩니다 [93, 108, 113]. 인간이 로그 라인을 제공하면 Dramatron은 등장인물 목록, 플롯, 플롯에 언급된 각 위치에 대한 설명을 생성합니다. 등장인물, 줄거리, 위치 설명은 모두 로그 라인의 사양을 충족하며, 인과적 종속성 외에도 프롬프트 연결을 통해 활성화되고[118] 그림 1의 다이어그램에 설명되어 있습니다. 마지막으로 줄거리 개요의 각 장면에 대해 Dramatron은 다음을 생성합니다. 이전에 생성된 장면 사양을 만족하는 대화입니다. 결과 대화는 함께 추가되어 최종 출력을 생성합니다. 이 계층적 생성은 장기적인 의미 일관성을 가능하게 하도록 설계되었습니다. 비록 반전되었지만 유사한 재귀적 작업 분해 방법이 플롯 요약을 생성하는 데 사용되었습니다[117]. 플롯이 일련의 추상적 장면 설명으로 요약되는 중간 계층을 통합하면 전체 플롯이 언어 모델의 컨텍스트 창에 들어갈 수 있습니다. 이는 장기적인 의미 일관성에 대한 이전 제한을 극복합니다. 우리의 방법을 사용하면 최종 장면의 요소가 오프닝 장면에 소개된 요소에 극적인 종결을 제공하고[3] 생성된 스토리가 내러티브 호를 따라갈 수 있습니다(섹션 2 참조).

3.3 신속한 엔지니어링의 중요성

Dramatron은 여러 개의 하드 코딩된 프롬프트(예: 입력 접두어)를 사용하여 대규모 언어 모델을 안내합니다. 신속한 엔지니어링은 사용자가 LLM을 제어하거나 영향을 미치는 일반적인 방법입니다[12]. 각 프롬프트에는 바람직한 출력의 몇 가지 예가 있습니다. 이는 접두사에 포함되며 소수의 예제에만 적용되는 것을 소수 학습(few-shot learning)이라고도 합니다. 그림 3에서 볼 수 있듯이 프롬프트는 이전 LLM 세대의 사용자 제공 입력 및/또는 출력과 연결됩니다. 이 방법을 프롬프트 체인(prompt chaining)이라고 하며[118], 일종의 알고리즘 프롬프트[24]이다. 계층 구조의 낮은 수준(그림 1 참조)에서는 프롬프트가 계층 구조의 상위 수준의 출력과 함께 연결됩니다.


이 작업에서 우리는 주로 두 가지 프롬프트 세트를 사용했습니다. 하나는 Euripides의 고대 그리스 비극 Medea를 기반으로 하고 다른 하나는 SF 영화를 기반으로 합니다. 드라마트론의 경우 각 프롬프트 세트는 1) 제목 프롬프트, 2) 캐릭터 설명 프롬프트, 3) 플롯 프롬프트, 4) 위치 설명 프롬프트, 5) 대화 프롬프트로 구성됩니다. 각 프롬프트는 아래에 간략하게 설명되어 있어 어떻게 엔지니어링되었는지 이해할 수 있습니다. 자세한 내용은 부록 E에 나와 있습니다.


제목 프롬프트는 로그 라인에서 제목을 생성하는 데 사용됩니다. 단순화된 제목 프롬프트, 사용자가 제공한 로그 라인 및 무작위로 샘플링된 제목이 그림 3에 표시되어 있습니다. 이는 지침이 포함된 접두사(알려진 연극 및 영화 대본에 대한 대체 제목, 원본 및 설명 제목의 예)와 예( 예 1. 고대 그리스 비극 [...]. 제목: 내 형제의 이름으로). 접두사는 다음으로 끝납니다. 예 2. 사용자 입력 로그 줄(예: Grandma Phyllis 및 Grandpa Jim [...])은 해당 접두사와 Title: 태그에 연결되어 LLM이 제목을 생성하도록 유도합니다. 로그 라인과 일치합니다. 몇 가지 예를 통해 LLM은 관련 제목을 생성하고 태그를 종료하는 방법을 "학습"했습니다. 캐릭터 설명 프롬프트는 로그 라인에서 캐릭터 이름과 설명을 생성하는 데 사용됩니다. 플롯 개요 프롬프트는 로그 라인과 문자 목록을 플롯으로 바꾸는 데 사용됩니다. 이 프롬프트는 소수의 언어 모델이 단일 문장 로그 라인을 일련의 장면 설명으로 변환하도록 권장합니다. 각 장면은 고도로 압축되어 위치의 짧은 이름, 내러티브 아크에서 장면의 위치를 식별하는 내러티브 요소(섹션 2 참조), 종종 내러티브 비트[69]. 참고로 프롬프트는 Dramatron이 장면을 표현하는 방식에 강력한 표현 제약을 부과합니다. 각 장면은 위치, 내러티브 요소 식별자 및 비트로 구성됩니다. 위치 설명 프롬프트는 장소 이름과 로그 라인에서 자세한 풍경 설명을 생성하는 데 사용됩니다. 마지막으로 대화 프롬프트는 비트(예: 장면 요약), 장면 위치 설명, 장면에 관련된 각 캐릭터에 대한 설명 및 로그 라인(스토리 일관성을 위해)을 대화로 전환하는 데 사용됩니다. 이 프롬프트는 현재 장면과 이전 장면 모두에 대해 생성된 장면 정보를 사용합니다.

3.4 Dramatron을 이용한 대화형 글쓰기

위에 설명된 대로 단 몇 개의 샷(즉, 1~4개) 프롬프트와 사용자 입력 로그 라인을 사용하여 훈련된 LLM을 활용하여 완전한 스크립트와 각본을 생성합니다. 부록 F는 원시 생성 출력의 예를 보여줍니다. 즉, Dramatron은 인간 작가를 위한 보완 도구로서 대화형 공동 집필을 위해 설계되었습니다. 드라마트론과의 공동 집필은 다음과 같이 진행됩니다. 작가는 자신이 쓴 로그라인부터 시작합니다. 그들은 해당 로그 라인을 Dramatron에 입력하고 제목, 캐릭터, 줄거리 개요, 위치 설명 및 각 장면의 대화를 단계별로 생성합니다. 각 단계에서 작성자는 다음 작업 중 하나 또는 여러 작업을 원하는 만큼 수행할 수 있습니다.


• 새로운 제안을 생성합니다(즉, 동일한 프롬프트로 LLM을 다시 실행합니다).


• 일반적인 "플랫" LLM 생성과 유사하게 이전 세대의 끝에서 계속 생성합니다.


• LLM에서 생성된 출력의 일부 또는 전체를 수동으로 편집합니다.


작가는 Dramatron 계층 구조에서 앞뒤로 이동하여 이러한 작업을 수행할 수도 있습니다. 예를 들어, 1) 제목 생성, 2) 새 제목 생성, 3) 제목 편집, 4) 문자 목록 생성, 5) 한 문자를 제거하고 다른 문자의 설명을 변경하여 문자 편집, 6 ) 플롯 개요 생성, 7) 내러티브 아크의 일부를 제거하여 플롯 편집, 8) 편집된 플롯의 연속 생성, 9) 돌아가서 로그 라인 다시 작성 등. Dramatron은 모두 대본 작성에 기여합니다. 이러한 작업을 수행한 후 인간 작성자는 추가로 편집하고 형식을 지정하여 스크립트를 마무리할 수 있습니다. 부록 G에는 사람이 편집한 스크립트의 예가 나와 있습니다.

3.5 구현 세부 사항

Dramatron의 코드는 Python으로 구현되었으며 사용자 인터페이스는 Google Colab[4]에서 텍스트 위젯과 함께 구현되어 대화형 편집이 가능합니다. 스크립트 생성에 사용하는 몇 가지 특수 마커가 있습니다. 전체 시퀀스 생성 토큰의 끝을 나타내고 생성된 줄의 끝을 표시하는 데 사용되는 토큰입니다. LLM에 제공된 특정 프롬프트(다음 섹션 3.3 참조)에 대해 최대 511개의 텍스트 토큰이 샘플링되었습니다. 우리는 Nucleus 샘플링[49]을 사용하여 다양한 출력을 장려하고, 상위 0.9 확률 질량에서 토큰을 샘플링하고 소프트맥스 온도 1.0을 사용했습니다. 마지막으로 대화 생성 시 루프를 줄이기 위해 생성된 텍스트를 블록(2개의 빈 줄로 구분)으로 자르고 각 블록이 단일 생성에 몇 번 나타나는지 계산하는 간단한 감지기를 구현했습니다. 고정된 임계값(예: 3회)을 초과하면 LLM은 난수 생성기에서 다른 시드를 사용하여 토큰을 샘플링하여 새로운 출력을 생성합니다.



이 문서는 CC 4.0 라이선스에 따라 arxiv에서 볼 수 있습니다.


[1] 액세스 가능: https://openai.com/api/


[2] 예: https://theguardian.com/commentisfree/2020/sep/08/robot-wrote-this-article-gpt-3


[3] 예를 들어 체호프의 총 [27]을 참조하세요.


[4] https://colab.research.google.com/