Deep Learning/트랜스포머를 활용한 자연어 처리

[chapter 6] 요약

notty 2024. 6. 22. 13:39
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 : 생성 문장 길이)
      • 생성문장 길이가 참조문장보다 참조문장 길이보다 짧은 경우 패널티를 부여한다

 

  • BLEU score
    •  
    • clip을 적용한 n-gram precision을 모두 곱하고 패널티를 적용하여 생성 문장이 참조문장보다 짧은 경우 패널티를 부과한다

 

precision 예시

  • 유니그램 예시
    • 정답 : I have a pretty mug.
      생성 : I am a pretty mug.
    • 정답과 생성 같은 단어 갯수 -> 4 
      => unogram precision = 같은 단어 갯수 / 생성된 단어 갯수 = 4/5

 

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.
      생성 : mug have a pretty I am.
    • 정답과 생성 같은 단어 수 -> 5개
      => unigram precision = 같은 단어 수 / 생성 단어 수 = 5/6 => 말이 안되는 문장을 생성했지만 단어 등장 순서는 BLUE에서 고려하지 않기 때문에 score은 높음 
    • 해결책 : clip, n-gram을 사용 -> n개의 단어를 묶어서 precidion을 구한다
    • 3-gram을 사용한 precision = 같은 단어 수 / 생성 단어 수 = 0/4 = 0

 

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에 포함된 단어 각각을 하나로 취급하여 계산한다.
  •  
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