
이번 시간에는 NLG에 대해 배웁니다.
이전 강의에서 이미 배운 내용도 있지만 좀 더 최신 동향에 대해 다룹니다.

1. NLG에 관련하여 이미 배운 내용을 복습해보고
decoding algorithm을 더 살펴보고
2. NLG task 및 신경학적 접근방식에 대해 살펴보고 ← 이번 포스트에서 다룰 주제입니다.
3. NLG 평가방법
4. NLG 연구, 트렌드 그리고 미래에 대해 살펴봅니다.

NLG 중요한 Task 몇 가지에 대해 알아봅니다.
![]()
|
![]()
|
먼저, 조교님에게 더 친숙한? Summarization에 대해 알아봅니다.
"
Summarization :
text x 가 주어졌을 때, 짧으면서 x의 주요 정보를 포함하는 요약 y를 쓴다.
"
요약은 single 혹은 multi document에 대해 할 수 있습니다.
single document: 한 개 문서에 x에 대한 요약 y
multi document: x1...xn 문서 여러 개에 대한 요약 y
x1~xn 문서에는 겹치는 내용이 있음 (예. 같은 이벤트에 대한 뉴스 기사들)
우측 페이지에서는 Summarization의 다양한 작업 세부작업을 datasets을 통해 설명합니다.
단일 문서 요약에는 길이와 스타일이 다른 소스 문서가 포함된 datasets 가 있습니다.
- Gigaword : Common dataset. 뉴스 기사의 처음 한두 문장 → 헤드 라인 (일명 문장 압축)
- LCSTS (중국어 마이크로 블로깅) : 문단 → 문장 요약
- NYT, CNN / DailyMail : 뉴스 기사 → (multiple) 문장 요약
- Wikihow (new!) : 전체 how-to 기사 → (교묘하게 발췌하여) 요약 문장
위키하우라는 사이트가 있는지 몰랐네요!
ko.wikihow.com/%EB%8C%80%EB%AC%B8
wikiHow: 신뢰할 수 있는 지식 가이드
ko.wikihow.com
또 다른 종류의 요약은 sentence simplification입니다.
문장을 좀 더 단순화시키는 것으로 요약과 비슷한 듯 다른 task라고 볼 수 있습니다.
요약은 문단의 내용을 complex lanuage로 표현할 수 있지만,
sentence simplification 은 기존 문장을 단순한 구조, 문장으로 다시 쓰는 것을 말합니다.
- Simple Wikipedia: 표준 위키 백과 문장 → 단순 버전
- Newsela : 뉴스 기사 → 어린이용 버전
(Newsela는 어린이들을 위해 뉴스를 다시 쓰는 웹사이트입니다.)

앞서 요약의 정의와 세분화된 task를 알아봤습니다.
이제 Summarization에서 중요한 전략 두 가지를 알아봅니다.
추출 요약 및 추상 요약입니다.
추출 요약은 원래 문장 중 일부(전체가 될 수도 있지만, 일반적으로 구나 단어)를 추출하는 방식입니다.
추출방식은 쉬운 반면, 조금 제한적입니다. 강력한 문장 압축방식은 아닙니다.
추상 요약은 NLG 기술을 사용하여 새로운 텍스트를 생성하는 것을 말합니다.
추상 요약이 더 사람같이 쓰고, 유연한 방식이지만 추출 방식에 비해 당연히 어려울 것입니다.
![]()
|
![]()
|
이제 추상 요약 시스템이 얼마나 어려운지 알아보겠습니다.
그전에 먼저 pre-neural summarization 시스템의 구조를 봅니다.
neural sumarization 이전의 방식은 대부분 추출 요약이었습니다.
pipeline 은 세 개의 부품으로 구성되어있습니다.
1. Content selection: 기본적으로 문장의 일부를 선택하는 과정입니다.
2. Information ordering: 이 문장을 어떤 순서로 선택할지 정하는 과정입니다.
이 part는 single doc summarization 보다 multi doc summarization에서 더 중요한 과정이 될 것입니다.
3. Sentence realization: 선택한 문장을 실제 요약을 바꾸는 과정입니다.
text generation을 수행하는 것은 아니고, 단순화, 부분 삭제, 연속성 문제 해결 등을 수행합니다.
예를 들어 선택한 문장의 시작이 '그녀는'이라면, 한 번도 '그녀'가 누구인지 알려준 적이 없기 때문에
특정 사람 이름으로 변경하는 작업등이 있습니다.
우측 페이지에는 pre-neural summarization의 컨텐츠 선택 알고리즘은 다음과 같습니다.
- Sentence scoring functions: tf-idf 등을 통해 topic 키워드가 존재에 대해 계산합니다.
또한 문장이 문서의 어디에 위치했는가 와 같은 단순하지만 강력한 기능을 사용할 수 있습니다.
(예: 문서가 문단의 위에 있을 경우 중요할 가능성이 높다.)
- Graph-based algorithms: 문서를 각 문장 pair 간에 Edge 가 있는 Node라고 가정하고,
Edge의 가중치를 문장 유사성이 비례하게 setting 하여 그래프의 중심에 있는 문장을 식별하는 알고리즘입니다.
![]()
|
![]()
|
요약의 평가방식은 ROUGE입니다.
Recall-Oriented Understudy for Gisting Evaluation: 요점 평가를 위한 회상 중심의 대역배우......(?)
ROUGE는 기계번역의 평가지표였던 BLEU처럼 n-gram 이 얼마나 겹치는 지를 측정합니다.
그러나 BLUE와 다른 점은
- BLUE는 기계번역을 짧게 할 경우 점수가 낮아지는데 ROUGE는 짧다고 해서 페널티를 주지 않습니다.
- ROUGE는 recall 베이스(실제 문장 중 몇 개나 맞췄냐, 중요한 정보를 요약에 포함시키고 싶기때문)이고, BLEU는 precision 베이스(맞다고 한 문장 중 몇 개가 실제로 맞았나. 번역이 정확히 되어야 하기 때문)입니다.
또한 ROUGE에서 F1 스코어 베이스인 버전도 있습니다.
ROUGE는 각 n-gram 값이 각각 보고됩니다.
python에서 쉽게 사용할 수 있다고 합니다. (pypi.org/project/rouge/)
![]()
|
![]()
|
이제 Neural Summarization에 대해 알아봅니다.
2015 년에 Rush 연구진은
추상적인 요약을 번역 작업으로 보고, standard translation seq2seq methods를 적용하는 것은 어떨까?라는 아이디어로 접근했고.
그 결과 의미 있는 결과를 만들어내었습니다.
그 뒤로 더 많은 발전이 있었고, 이를 우측 페이지에서 소개합니다.
- 복사하기 쉽게 만든다. 하지만 너무 copy를 많이 하는 것은 막아야 함
- 계층적/ 다단계 적의 attention을 적용
- 더 글로벌한 컨텐츠를 선택한다.
- 기계학습을 이용하여 ROUGE 나 '길이'와 같은 개별의 이산적인 목표를 직접 최대화하는 것.
- pre-neural idea (예 : 콘텐츠 선택 시 사용되는 알고리즘)를 사용하고 neural system으로 작업
소개된 방법 중 몇 가지를 다음 장부터 설명합니다.
![]()
|
![]()
|
먼저 copy mechanism에 대해 알아봅니다.
Seq2seq + attention 시스템은 유창한 출력을 작성하는 것에 좋지만 희귀한 단어 등과 같은 세부 사항을 정확하게 복사하는 것은 좋지 않습니다.
copy mechanism은 attention을 사용하여 seq2seq 시스템이 입력에서 출력으로 단어와 구를 쉽게 복사할 수 있도록 합니다.
- 이것은 요약에 매우 유용합니다.
- 복사와 생성을 모두 허용하면 hybrid 추출/추상적 접근 방식을 만들 수 있습니다.
다양한 논문이 있습니다... (모른 척)
우측에 소개된 copy mechnisim 중 한 방식을 소개하고 있습니다. 조교님이 참여하신 논문이네요.
디코더의 each step에서 다음 단어를 생성할 확률(=복사하지 않을 확률)인 pgen을 계산합니다.
최종 분포는 generation (aka “vocabulary”) distribution과 copying (i.e. attention) distribution을 합친 것입니다.
하단의 방정식은 결국 어떤 단어가 다음에 나올지에 대한 최종 출력 분포라는 것입니다.
그것은 여러분이 생성할 확률의 분포를 곱한 확률이지만, copy 하는 것에 대한 확률도 있고, 그 시간에 참여(ateending) 하고 있는 확률도 있다는 것입니다.
또한 중요한 건, attention을 복사 메커니즘으로 사용한다는 것입니다. attention 이 이중으로 작용하고 있는 것이죠.
좀 더 자세히 알고 싶거나, 잘 이해가 되지는 않는다면(제 얘기입니다.) 아래 논문을 보는 게 좋겠습니다.

copy mechanisim 은 아주 괜찮은 아이디어 같지만, 앞서 말한 큰 문제가 있습니다.
바로 copy too much problem입니다.
너무 많이 copy 하게 되면 결국 추상 요약이 아니라 추출 요약 시스템이 되어버리게 됩니다.
또 다른 문제는 특히 입력 문서가 긴 경우 전반적인 컨텐츠 선택이 좋지 않다는 점입니다.
그렇다면 처음에 글로벌한 결정을 내린 다음 요약하는 점이 나을 텐데, 여기서 또 문제는, 전체적인 내용 선정 전략이 없다는 것입니다.
![]()
|
![]()
|
pre neural summarization의 pipeline으로 구성되어있었습니다. 기억하시겠지만 컨텐츠 선택과 sentence실현(realization)입니다.
그런데 nearal summarization에서는 두 가지를 한 번에 하고 있습니다.
이렇게 하면 전반적인 전략을 짤 수 없기 때문에 좋지 않습니다.
2018년에 소개된 Bottom-up summarization 은 이 문제에 대한 대안을 제안합니다.
먼저 source 문단에서 요약에 사용될 것 같은 것과 그렇지 않은 것에 대해 선별하는 과정을 거칩니다.
그러고 나서 seq2seq attention 시스템이 사용할 것 같지 않은 단어로 태깅된 단어에 mask를 씌우는 등의 작업을 통해 요약을 수행하게 됩니다.
이는 꽤 간단하지만 효과적이었습니다.
전반적인 컨텐츠 선택 전략이 더 나아졌고, 긴 문장을 복사하는 경우가 줄어서 좀 더 추상 압축에 가까운 형태가 되었습니다.

또 다른 논문은 neural summarization을 위해 ROUGE를 직접 극대화하기 위해 강화 학습을 사용한 내용입니다.
main idea는 강화 학습을 사용하여 ROUGE-L을 직접 최적화하는 것입니다.
- 대조적으로 standart ML (maximum likelihood) 훈련은 미분할 수 없는 함수이기 때문에 ROUGE-L을 직접 최적화할 수 없습니다.
여기서 흥미로운 점은, 강화 학습으로 ROUGE 점수는 높아지지만 human judgement scores는 나빠진다는 것입니다.
ROUGE 점수가 높은 모델에서 읽을 수 없는 요약을 생성한 것도 발견했다고 블로그 글에 있었다고 합니다.
그리고 ml+rl 두 방식을 합친 모델(언어 모델 순서 목표를 예측하고, 그리고 높은 ROUGE 점수 목표를 얻을 수 있는 요약)이
사람이 평가한 점수가 가장 높았습니다.

이제 NLG 는 아니지만 비슷한 Task 인 Dialogue 에 대해 설명합니다.
대화의 종류는 업무 지향적인 대화와 사회적 대화로 나뉩니다.
1. Task-oriented dialogue 는 아래 세 종류가 있습니다.
- Assistive 고객응대 서비스나 예약을 돕는 등의 대화
- Co-operative 상호협력 대화
- Adversarial 두 개 agent 가 대화를 통해 서로 경쟁하는 대화
2. 사회적 대화로는 가벼운 대화, 치료목적의 대화가 있습니다.

neural dialogue 이전과 이후에 대해 간단히 보겠습니다.
neural deialogu 이전에는 open-ended 대화와 같은 형식이 자유로운 NLG 가 어려웠기 때문에 template 이 정해져 있고 빈 슬롯을 채우는 등의 작업이 진행되어왔습니다.
그러다 2015년에 seq2seq+attention summarization 모델이 연구되면서 open-ended freeform dialogue systems 연구도 이뤄지기 시작했습니다.

그러나 표준 seq2seq + attention 방법의 단순한 적용은 아래와 같은 심각한 결함을 나타나게 했습니다.
- 일반적이거나 / 지루한 응답
- 관련없는 응답 (문맥과 충분히 관련이 없음)
- 반복
- 문맥 흐름이 부족 (대화 기록을 기억하지 못함)
- 일관된 페르소나 부족
위 문제들을 어떻게 해결할 수 있는지 하나씩 살펴봅니다.
![]()
|
![]()
|
![]()
|
![]()
|
1. 관련없는 응답
seq2seq 은 무관한 응답을 자주 생성합니다.
I don't know. 와 같은 일반적인 응답을 하거나, 전혀 관련없는 응답을 합니다.
이에 대한 해결법 중 하나로 한 논문에서는 아래 수식에서 볼 수 있듯,
input S 가 주어질 때 응답 T 가 나오는 확률 - 응답 T 가 나오는 확률을 높이는, 즉 상호정보를 높이는 방식으로 최적화 합니다.
2. 일반적/지루한 응답
- test-time 에 간단히 fix 하는 경우
. beam search 시 희귀한 단어에 가중치를 둔다거나
. beam search 대신 sampling decoding 알고리즘을 사용할 수 있습니다.
- 또는 test-time 이 아니라 초기(학습단계)에 개입하여 덜 지루한 모델을 만드는 경우 (=conditioning fix)
.일부 추가 컨텐츠에 대한 decoder 조건 지정 (예 : 일부 컨텐츠 단어를 샘플링하고 그 단어를 참여시키는 것)
.처음부터 생성하는 것이 아닌 검색 및 구체화 모델을 사용하는 것입니다.
예를 들어 corpus 에서 대화를 샘플링하고 현재 시나리오에 맞게 편집하는 등의 작업을 말합니다.
이렇게 하면 좀 더 다양하고 인간적이며 흥미로운 응답을 생성할 수 있습니다.
3. 반복 문제
- 간단한 해결방법:
.beamserach 할 때 반복되는 n-gram 을 막는다 → 간단하지만 대체적으로 효과적임!
- 좀 더 복잠한 방법:
.예를 들어 커버리지 메카니즘을 훈련할 수 있습니다. 이는 seq2seq attention 모델에서 같은 단어를 여러번 취하는 것을 막기 위한 방법이라고 합니다.
.반복을 막기위한 훈련목표를 정의
이것이 생성된 output의 미분 불가능한 함수인 경우 이같은 기술이 필요합니다. 훈련을 위한 강화학습 등이 그 예입니다.
4. 페르소나의 부족 문제
- 2016 년에 Li et al은 대화하는 각 파트너의 페르소나를 임베딩으로 인코딩하는 방법을 배우는 seq2seq 대화 모델을 제안했습니다.
.생성 된 발화는 임베딩에 따라 조정됩니다.
- 최근에는 모든 대화에 대한 페르소나 (개인적 특성을 설명하는 5 개의 문장 모음)를 포함하는 PersonaChat이라는 잡담 dataset 이 있습니다.
.이것은 가벼운 타입의 grounding을 제공하여, 연구진들이 persona-conditional dialogue agents 를 구축 할 수 있게 합니다.

스토리텔링으로 뿅- 건너뛰었습니다. (여기서 부터 조교님 급해지기 시작)
neural storytelling 에서 대부분 일종의 프롬프트를 사용합니다.
그림을 쓰거나, 간단한 글쓰기 프롬프트가 주어지면 story 를 만들거나, 지금까지의 이야기를 이어서 연속적인 story 를 만드는 것 등 입니다.
연속적인 story 를 생성하는 작업은 생성된 여러 문장에 대한 시스템의 성능과 관련이 없기 떄문이 이전 두가지와 다릅니다. (이해를 못했어요ㅠ)
![]()
|
![]()
|
그림을 글로, 폭발 이미지를 테일러스위프트 스타일의 가사 스타일로 쓰인 예제입니다.
여기서 각 그림과 이미지에 대해 병렬적으로 학습하는 아이디어는, common 한 sentence-encoding 공간을 두었다는 점입니다.
Skip-Thought 벡터는 범용적인 목적의 문장 임베딩 방법의 한 유형으로,
단어의 주변 단어를 예측하여 단어 임베딩을 학습하는 방법과 유사합니다.
COCO 이미지 캡션 시스템을 훈련시킨 모델을 통해 얻은 이미지에 대한 인코딩 벡터와,
RNN-LM 을 훈련시켜 학습한 결과를 통해 얻은 테일러 스위프트 가사의 인코딩 벡터를 공유 공간에 같이 넣어 학습하는 방법입니다.
convolutional-based 의 prompt writing 에 대한 설명을 하는데, 정말 빠르게 지나가서, 이건 생략합니다.
![]()
|
![]()
|
위 페이지의 내용은 스킵 되었으나 간단히 해석하고 해당 포스트를 마치려고 합니다.
neural LM 으로 생성된 스토리는 유창하게 들릴 수 있으나,
일관된 플롯이 없이 meandering(구불구불)하고 무의미합니다.
LM 으로 생성된 스토리에서 놓치고 있는 부분은 다음과 같습니다.
LM은 단어 시퀀스를 모델링합니다. 이야기는 일련의 사건입니다.
- 이야기를 들려 주려면 다음을 이해하고 모델링하는 것이 필요합니다..
.사건과 그들 사이의 인과 관계
.캐릭터, 성격, 동기, 역사 및 다른 캐릭터와의 관계
.세계 상태 (누가, 무엇을, 어디에, 왜)
.서사가 있는 구조 (예 : 설명 → 갈등 → 해결)
.좋은 스토리텔링 원리(스토리 요소를 소개하지 말고 절대 사용하지 않음)
위와 같은 요소 전체를 이해하고 스토리를 생성하는 것은 아주아주 어렵다는 점입니다.
다음 포스트에서는 NLG 의 평가가 왜 어려운지, 그리고 최근동향에 대해 설명합니다.




















댓글