728x90
텍스트 요약
- 도메인마다 요약하는 방식에 차이가 있음 -> 언어모델이 이를 파악하기에는 어려움이 있음
- 정교한 수준의 도메인 일반화가 필요함
- seq-to-seq 방식임(입력 : 줄글 텍스트 -> 출력 : 요약 텍스트)
CNN/DailyMail 데이터셋
CNN/DailyMail 데이터셋 (https://huggingface.co/datasets/ccdv/cnn_dailymail)
- 300000개의 뉴스기사, 요약 쌍
- 요약이 본문에서 추출된것이 아니고 머리글 형식으로 새로운 문장으로 요약을 구성
- article(본문), highlisgts(요약), id(기사 고유id)
트랜스포머 모델의 토큰 갯수 제약
- 트랜스 포머 모델의 최대 토큰이 대략 1000개 임
- 토큰 1000개를 넘는 긴 기사의 경우 절단이 불가피, 끝에 중요 내용 손실 가능성 있음
텍스트 요약 파이프라인
텍스트를 확인하며 토큰화 결과를 확인
- 토큰화를 정교하게 처리 (예: . 뒤에 줄바꿈 토큰을 추가하는 방법이 있지만 약어의 경우도 문장이 끝난것으로 처리 -> 더 정교한 토큰화 필요, nltk.download('punkt')를 사용한다)
opt 1) 가장 기본 문장 요약
- 가장 앞부터 3개의 문장을 선택한다 -> nltk의 문장 토크나이저(sent_tokenize())로 쉽게 구현 가능
- punkt를 사용하여 구두점과 약어에 쓰인 .을 구분하여 문장 구분
opt 2) GPT-2
- gpt-2는 입력 텍스트 뒤 'TL;DR'을 추가하여 요약을 생성 (TL;DR, Too Long;Didn't Read)
- transformer의 파이프라인을 사용하여 gpt-2 모델로 문장 요약 생성
opt 3) T5
- 텍스트-투-텍스트
- 요약을 포함해 ㅕ러 작업에서 비지도학습 데이터와 지도학습 데이터를 섞은 데이터로 훈련을 진행
- 미세튜닝 없이 바로 요약 가능
opt 4) BART
- 인코더-디코더 구조
- 손상된 입력을 재구성하도록 훈련되었다
- BERT(문장 내 일부 단어 마스킹 후 예측, 다음 문장 예측), GPT-2(이전 단어들로 다음 단어 예측)의 훈련 방식을 결합
opt 5) PEGASUS
- 인코더-디코더 구조
- 마스킹된 문장을 예측하는 훈련
- 요약에 특화된 사전 훈련 목표를 찾기 위해 주변 문단의 내용을 대부분 담은 문장을 자동으로 식별하고 그 문장을 재구성하도록 훈련
- 텍스트 요약에 특화
- 줄바꿈 특수 토큰이 있음
결과
- gpt2가 생성한 요약이 다른 결과와 크게 다르다 -> 진짜 요약을 하도록 명시하고 훈련되지 않아 사실을 지어내거나 환상을 만든다
품질평가
- BLEU, ROUGH
품질평가 지표
* pricision = TP / TP+TN -> True라고 예측한것 중 실제 True인 것 (모델이 얼마나 잘 예측하는지)
* recall = TP / TP + FN -> 실제 True인것 중 True라고 예측( 모델이 얼마나 잘 놓치지 않고 Positive를 찾아내는지 ,얼마나 정답에 가깝게 예측했는지)
BLEU
- 정밀도(precision, True라고 분류한 것 중에서 실제 True인 것의 비율)를 근간으로 하는 지표
- n-gram을 체크 (단어 하나뿐만 아니라 주변 단어와 결합하여 n-gram의 등장 횟수를 count)
- count = 생성과 참조 텍스트를 비교하여 참조 텍스트에 있는 단어가 생성된 텍스트에 얼마나 자주 등장하는지 카운트
- gen_sentence_len = 생성된 텍스트의 길이
- precision = count / gen_sentence_len
- precision을 사용할 때의 문제
- 같은 단어만 생성하는 경우
- 단어의 순서가 섞이는 경우
- => 해결책 : clip와 n-gram을 사용하며 precision을 구한다
- 재현율(recall)을 고려하지 않아 짧지만 정밀하게 생성된 시퀀스가 긴 문장보다 유리하다
- => 해결책 : BR(브레비티 패널티)를 도입
- BR = min(1, e^(1-ref_l / gen_l)) : 절대 1을 넘지 않고 gen_l < ref_l일 때 지수항이 기하급수적으로 작아진다
=> 짧은 생성 문장이 높은 점수를 받지 않도록 패널티 (r : 참조 문장(정답) 길이, c : 생성 문장 길이) - 생성문장 길이가 참조문장보다 참조문장 길이보다 짧은 경우 패널티를 부여한다
- BR = min(1, e^(1-ref_l / gen_l)) : 절대 1을 넘지 않고 gen_l < ref_l일 때 지수항이 기하급수적으로 작아진다
- BLEU score
- clip을 적용한 n-gram precision을 모두 곱하고 패널티를 적용하여 생성 문장이 참조문장보다 짧은 경우 패널티를 부과한다
precision 예시
- 유니그램 예시
- 정답 : I have a pretty mug.
생성 : I am a pretty mug. - 정답과 생성 같은 단어 갯수 -> 4
=> unogram precision = 같은 단어 갯수 / 생성된 단어 갯수 = 4/5
- 정답 : I have a pretty mug.
precision 적합하지 않은 경우
- 같은 단어만 생성
- 정답 : I have a pretty mug.
생성 : mug mug mug mug mug - 정답과 생성 같은 단어 갯수 -> 5
=> unigram precision = 같은 단어 갯수 / 생성 단어 갯수 = 5/5 => ?? 가장 멍청한 예측을 한 경우 대처가 불가능 - 해결책 : clip을 사용 -> 정답과 같은 단어가 생성 문장에 여러개 있다면 한개로 취급
- clip을 사용한 unigram precision = 1/5
- 정답 : I have a pretty mug.
- 단어의 순서가 섞이는 경우
- 정답 : I have a pretty mug.
생성 : mug have a pretty I am. - 정답과 생성 같은 단어 수 -> 5개
=> unigram precision = 같은 단어 수 / 생성 단어 수 = 5/6 => 말이 안되는 문장을 생성했지만 단어 등장 순서는 BLUE에서 고려하지 않기 때문에 score은 높음 - 해결책 : clip, n-gram을 사용 -> n개의 단어를 묶어서 precidion을 구한다
- 3-gram을 사용한 precision = 같은 단어 수 / 생성 단어 수 = 0/4 = 0
- 정답 : I have a pretty mug.
BLEU 장단점
- 장점
- 빠르다
- 많이 사용된다
- 단점
- 문맥고려하지 않는다
- 문장 구조 고려하지 않는다
- 영어 아닌 다른 언어에 사용하기 힘들다
- 다른 토크나이저를 사용하는 경우 비교 어려
ROUGE
- 높은 재현율(실제 True인 것 중에서 모델이 True라고 예측한 것의 비율)이 정밀도(True라고 분류한 것 중에서 실제 True인 것의 비율)보다 훨씬 중요한 경우 -> 예: 요약(실제로 요ㅑㄱ된 문장에서 요약이고 생성된 문장이 얼마나 실제와 비슷한지)
- 생성 텍스트와 참조 텍스트에서 n-그램이 얼마나 자주 등장하는 지를 비교 -> BELU와 비슷(precision)
- BUT, 참조 텍스트에 있는 n-그램이 생성 텍스트에 얼마나 많이 등장하는지 확인 -> BELU와 다름(recall)
- clipping을 적용하지 않는다
ROUGE 예시
- 정답 : police killed the theif
생성 : the thief police killed - ROUGE-N
- N-gram을 사용하여 계산, 예시에서 N = 1)
- precision = 4(맞은 단어 수) / 4(예측문장 길이)
- recall = 4(맞은 단어 수) / 4(실제 문장 길이)
- F-1 score = 1
- ROUGE-L
- L (LCS(longest commom subsequences) : 가장 긴 실제, 생성 공통 부분)
- 시퀀스는 이어지지 않아도 되고 순서대로만 있으면 된다
- 'police killed', 'the thief'
- 가장 긴 시퀀스에 대해 계산(LCS가 여러개면 하나를 선택하여 계산)
- precision = 2(매칭되는 단어의 수) / 4(예측된 문장의 길이) = 2/4
- recall = 2(매칭되는 단어의 수) / 4(실제 문장의 길이) = 2/4
- f-1 = 2*0.5(p)*0.5(r) / 0.5(p)+0.5(r) = 0.5
- 주의: LCS를 하나의 단어로 취급하는 것이 아니고 문장 내에서 LCS가 차지하는 비율을 보기 위해 LCS에 포함된 단어 각각을 하나로 취급하여 계산한다.
- L (LCS(longest commom subsequences) : 가장 긴 실제, 생성 공통 부분)
728x90
반응형
'Deep Learning > 트랜스포머를 활용한 자연어 처리' 카테고리의 다른 글
[Chapter 5] 텍스트 생성 (0) | 2024.06.19 |
---|---|
[Chapter 4] NER (1) | 2024.06.01 |
[Chapter 3] 트랜스포머 (0) | 2024.05.22 |
[Chapter 3] 코드_1 (0) | 2024.05.17 |