week 1-4

마친자·2022년 3월 24일

Week1-4 과제
한국 스트리밍 서비스 (왓, 쿠플레이, 티*)에서 시청자가
영화를 보고 남긴 리뷰를 긍정과 부정으로 나누어 볼 수 있는
대시보드를 만들려고 한다. 리뷰 긍부정 판별 모델을 만들려고
할 때, NLP 리서처/엔지니어로서 어떤 의사 결정을 할 것인지
각 단계에 맞춰 작성해보자. (단, 수집된 리뷰 데이터의 개수가
1,000개 미만이라고 가정하자.
1. 문제 정의
풀고자 하는 문제를 정의하세요. 또한 데이터 생성 시 고려해야할 사항이 있다면
무엇인지 설명하세요. (예, 만약 긍정 리뷰가 부정 리뷰보다 많은 경우 어떻게 해야
할까?, 길이가 정말 긴 리뷰는 어떻게 전처리 해야 할까?)
Sentiment Analysis (감성 분석)을 해야 합니다.

  • 감성 분석은 주어진 텍스트의 극성(polarity)을 분류하는 작업을 말합니다. 즉,
    주어진 텍스를 보고 긍정인지 부정인지 또는 중립인지 등 분류하는 것을 말합니다.
  • 위의 영화 리뷰 데이터의 경우에는 긍정인지 부정인지를 분류해야 합니다
  • emotion classification과 고민하였지만, emotion classification의 경우는 세분화된
    감정을 분류(우울, 행복, 편안)같이 진행되기에 차이에 Sentiment Analysis로
    선택하였습니다
    데이터 생성 시 고려사항
  • 긍정과 부정이 공존할시 어떻게 분류할 것인가?
    예) 스토리 진짜 별로인데 배우들 얼굴 보는 재미는 있음
  • 리뷰 중간의 다른 나라 말로써 있을 시 어떻게 전처리할 것인가?
    예) sad 엔딩이어서 더 여운 남았습니다. , Jennifer 진짜 멋있어
  • class 간의 불균형이 매우 심할 때 어떻게 할 것인가?
    예) 긍정이 매우 많고 부정이 매우 적음, 긍정이 매우 적고 부정이 매우 많음
  • 신조어의 경우에는 어떻게 전처리 할 것인가?
    예) 저 배우들로 하는 건 완전 KG하는 부분이지 (“완전히 인정한다”라는 의미)
  1. 오픈 데이터 셋 및 벤치 마크 조사
    리뷰 긍부정 판별 모델에 사용할 수 있는 한국어 데이터 셋이 무엇이 있는지
    찾아보고, 데이터 셋에 대한 설명과 링크를 정리하세요. 추가적으로 영어 데이터셋도
    있다면 정리하세요.
    —-
    네이버 영화리뷰 데이터
    링크: https://github.com/kocohub/korean-hate-speech
  • 소개: 네이버 무비에서 후기를 가져온 한국어로 된 영화 리뷰 자료
  • id: 네이버에서 제공하는 리뷰 아이디
  • document: 리뷰 내용
  • label: 리뷰의 감정 클래스
  • binary classification: 0(부정) 또는 1(긍정)
  • 부정 리뷰: 100K, 긍정 리뷰: 100K
  • 학습 데이터 : 15만 건,
  • 테스트 데이터: 5만 건 IMDB 리뷰 데이터
    링크: https://www.imdb.com/interfaces/
  • 소개: 영화 사이트 IMDB의 영어로 된 영화리뷰 데이터
  • binary classification: 0(부정) 또는 1(긍정)
  • 학습 데이터: 25000
  • 테스트 데이터: 25000
  1. 모델 조사
    Paperswithcode(https://paperswithcode.com/)에서 리뷰 긍부정 판별 모델로 사용할
    수 있는 SOTA 모델을 찾아보고 SOTA 모델의 구조에 대해 간략하게 설명하세요.
    (모델 논문을 자세히 읽지 않아도 괜찮습니다. 키워드 중심으로 설명해 주세요.)
    —-
    SOTA: RoBERTa(Robustly Optimized BERT Pretraining Approach
  • BERT 하이퍼파라미터 및 학습 데이터 사이즈 등을 조절
  • BERT 차이점
    (1) 더 많은 데이터를 사용하고 더 오래 더 큰 batch로 학습
  • BERT의 pretraining 방식에서 텍스트의 양이 end-task의 성능에 큰 영향을
    끼치기에 160GB에 해당하는 데이터로 Pre-training 이용
  • batch 사이즈를 키워감 :2k, 8k, 256
    (2) next sentence prediction (NSP) 테스크 제거
  • NSP: 입력 데이터에서 두 개의 segment의 연결이 자연스러운지 예측하는 문제
    ➔ pair 단위 테스크에서 효과적이라고 하나 실험 결과 pair 단위 테스크에서도
    NSP를 제거했을 때 성능이 좋았음
    (3) 더 긴 sequence로 학습: 처음부터 512(full length)로 학습
    (4) masking을 다이나믹하게 바꾸기
  • Dynamic masking :동일한 Mask가 반복되는 것을 피하고자 매 학습 epoch마다
    다른 Masking을 진행
  1. 학습 방식
  • 딥러닝 (Transfer Learning)
    사전 학습된 모델을 활용하는 (transfer - learning)방식으로 학습하려고 합니다. 이
    때 학습 과정을 간략하게 서술해주세요. (예. 데이터 전처리 → 사전 학습된 모델을
    00에서 가져옴 → …)
  1. 데이터 준비 및 패키지 다운로드
  • 데이터 다운로드 또는 데이터 불러오기
  • 주요 패키지 불러오기
  • GPU 확인
  1. 데이터 전처리
  • 문장별 전처리, 토크나이징, 패딩, 어텐션 마스크 등
  • 데이터 분리(만약 하나의 데이터로 이루어졌다면)
  • 파이토치 사용하는 경우, 파이토치 텐서로 변환
  • 배치 및 데이터로더 설정
  1. 모델 학습
  • GPU 체크 및 할당
  • HuggingFace에서 사전학습모델 불러오기
  • 학습 스케줄링( epoch, optimizer, iteration 등 설정)
  • 평가지표 설정( ex. Accuracy 등등)l
  • 훈련 데이터 훈련 및 하이퍼파라미터 수정
  1. 테스트 데이터 평가
  • (Optional, 점수에 반영 X) 전통적인 방식
    Transfer Learning 이전에 사용했던 방식 중 TF-IDF를 이용한 방법이 있습니다. TFIDF를 이용한다고 했을 때, 학습 과정을 간략하게 서술해주세요.
    —-
  1. 평가 방식
    긍부정 예측 task에서 주로 사용하는 평가 지표를 최소 4개 조사하고 설명하세요.
    —-
  2. Accuracy: 모든 테스트 데이터 중 실제로 긍정 또는 부정 레이블로 맞춘 경우를
    백분율로 표현
  • 얼마나 예측이 맞게 했는가? 만으로 결정되기에 직관적이다.
  • 이진 분류인 경우 데이터 구성에 따라 모델의 성능이 왜곡될 수 있기에 다른
    평가지표도 함께 보아야 한다
  1. Recall: 실제로 긍정인 데이터를 모델이 긍정 레이블이라고 맞춘 비율
  • 실제 긍정인 데이터를 부정으로 잘못 판단하게 되면 업무상 큰 영향이 발생하는
    경우에 사용
  • 예) 암 판단 모델, 보험 사기 적발 모델
  1. Precision: 모델이 긍정으로 예측한 데이터가 실제로 긍정인 데이터일 비율
  • 실제 부정인 데이터를 긍정으로 잘못 판단하게 되면 업무상 큰 영향이 발생하는
    경우에 사용
  • 예) 스팸메일 여부를 판단하는 모델
  1. f1 : Precision, Recall의 조화평균
  • Precision, Recall의 수치가 적절하게 조합하여 종합적인 성능 평가에 사용할 수
    있는 평가지표
  • Precision, Recall 어느 한쪽으로 치우치지 않을 때 f1 점수가 상대적으로 높은
    값을 가짐
profile
마루에 미친자

0개의 댓글