Data-Centric(8): 데이터 증강, 필터링

SeongGyun Hong·2024년 10월 30일

NaverBoostCamp

목록 보기
21/64

1. 데이터 증강에 관한 최근 연구

2. 데이터 필터링에 관한 최근 연구

2.1 병렬 말뭉치 필터링

병렬 말뭉치 필터링은 번역 모델을 학습하기 위해 사용되는 병렬 코퍼스(문장 쌍)의 품질을 개선하는 과정이다.
이를 위해 다양한 방법론이 사용되며, 크게 Rule Based, Statistic Based, NMT Based 세 가지로 나눌 수 있다.

2.2 Rule Based (규칙 기반 필터링)

규칙에 기반하여 병렬 문장 쌍의 품질을 평가하고 필터링하는 방법

  • 너무 짧거나 너무 긴 문장 (문자 단위 또는 토큰 단위)
  • 적은 문자로 구성된 문장 (특수 기호만 포함된 경우)
  • 길이가 맞지 않는 문장 쌍
  • 특수 엔티티 불일치 (이름, 숫자, 날짜, 이메일, URL 등)
  • 복사된 문장 쌍
  • 언어 식별기가 요구되는 언어를 감지하지 못하는 경우

최근에도 많이 사용되는 기법으로, 거의 모든 최근 좀 괜찮은 논문들이 이 방법들을 기본으로 전제하고 이후 연구를 진행하고 있음.

2.3 Statistic Based (통계 기반 필터링)

통계적 방법론을 사용하여 병렬 문장 쌍의 품질을 평가

  • 기계 번역 필터링
    • 규칙 기반: 특정 단어 선택
    • 통계 기반: 어순 재배열 부족
  • 이상치 탐지 (Outlier Detection)
  • 단어 정렬 (Word Alignments)
  • 모델 확률 (Model Probability)
    • N-그램 기반 언어 모델
    • 언어 모델 확률
    • NMT 모델 확률

위 방법의 경우에는 요즘 대세는 아니다. 많이 적용되지는 못하는 실정

2.3 NMT Based (신경망 번역 모델 기반 필터링)

신경망 기반 모델을 활용하여 병렬 문장 쌍의 품질을 평가한다.
Sentence Embedding을 적용하는 것.
특정 Threshold를 적용하여 해당 수치를 넘지 못하면 드롭

  • 문장 임베딩 (Sentence Embedding)
    • LM(Language Model) 기반
    • NMT(Neural Machine Translation) 기반
    • LASER

      LASER란, Facebook AI에서 개발한 다국어 문장 임베딩 모델로, 다양한 언어의 문장을 ㄹ동일한 임베딩 공간에 매핑하여 언어 간의 의미적 유사성을 효과적으로 비교할 수 있도록 함.

      • 다국어를 지원하고, 문장 임베딩을 하며, 코사인 유사도를 통해 임베딩 된 벡터 간 유사도를 측정한다는 것이 주요 특징

      LASER 관련 이하 코드 참고

from laserembeddings import Laser
import numpy as np

# LASER 모델 초기화
laser = Laser()

# 예시 문장
src = "집에 가고 싶다"
tgt = "I want to go home"

# 문장 임베딩
src_embed = laser.embed_sentences(src, lang='ko')
tgt_embed = laser.embed_sentences(tgt, lang='en')

# 코사인 유사도 계산 함수
def cosine_similarity(v1, v2):
    n1 = np.linalg.norm(v1)
    n2 = np.linalg.norm(v2)
    return np.dot(v1, v2.T).squeeze() / (n1 * n2)

# 두 문장 간의 유사도 계산
cs_score = cosine_similarity(src_embed, tgt_embed)
print(f"Cosine Similarity: {cs_score}")
  • 모델 교차 엔트로피 (Model Cross Entropy)
    • LM/NMT 모델 기반

구체적인 예시
Model Cross Entropy를 사용한 소스-타겟 교차 검증에 관하여 NMT(Neural Machine Translation)에서 소스문장을 타겟 문장으로 번역하고, 그 반대 방향으로도 번역하여 각 방향의 번역 품질을 평가하는 방법이다. 이 과정에서 교차 엔트로피 손실을 사용하여 모델의 예측과 실제 정답 간의 차이를 측정한다.
주로 번역모델에서 사용된다.

import torch
import torch.nn as nn
from transformers import MarianMTModel, MarianTokenizer

# 모델과 토크나이저 로드
model_name = 'Helsinki-NLP/opus-mt-en-de'
tokenizer = MarianTokenizer.from_pretrained(model_name)
model = MarianMTModel.from_pretrained(model_name)

# 입력 문장
src_text = "I want to go home"
tgt_text = "Ich möchte nach Hause gehen"

# 토큰화 및 텐서 변환
src_tokens = tokenizer(src_text, return_tensors='pt', padding=True, truncation=True)
tgt_tokens = tokenizer(tgt_text, return_tensors='pt', padding=True, truncation=True)

# 모델 예측
with torch.no_grad():
    output = model(**src_tokens, labels=tgt_tokens['input_ids'])
    loss = output.loss

print(f"Cross Entropy Loss: {loss.item()}")

# 반대 방향 번역 (타겟 -> 소스)
model_name_reverse = 'Helsinki-NLP/opus-mt-de-en'
tokenizer_reverse = MarianTokenizer.from_pretrained(model_name_reverse)
model_reverse = MarianMTModel.from_pretrained(model_name_reverse)

# 타겟을 소스로 사용하여 다시 번역
src_tokens_reverse = tokenizer_reverse(tgt_text, return_tensors='pt', padding=True, truncation=True)
tgt_tokens_reverse = tokenizer_reverse(src_text, return_tensors='pt', padding=True, truncation=True)

with torch.no_grad():
    output_reverse = model_reverse(**src_tokens_reverse, labels=tgt_tokens_reverse['input_ids'])
    loss_reverse = output_reverse.loss

print(f"Reverse Cross Entropy Loss: {loss_reverse.item()}")
  • 먼저 모델과 토크나이저를 로드하여 영어-독어, 및 독어-영어 번역 모델을 불러온다
  • 토큰화하여 입력 문장을 토큰으로 변경한 후 텐서로 변환
  • 모델 예측 및 손실을 계산하여 소스 문장을 타겟 문장으로 번역하고 이때의 교차 엔트로피 손실을 계산한다
  • 반대방향으로도 번역 진행 타겟을 소스로하여 번역을 진행할 때의 손실을 다시 계산한다.
  • 이때 교차 엔트로피 손실은 모델의 예측과 실제 정답 간의 차이를 측정하는 데 사용되는데, 번역 모델에서 소스 문장을 타겟 문장으로 번역하고, 반대로도 번역하여 두 방향의 품질을 평가할 수 있다.
  • 손실 값이 낮을 수록 모델의 예측이 실제와 유사하다는 것을 의미한다.
  • 문장 분류기 (Sentence Classifier)
    • 의사 부정 샘플(Pseudo-negative sample)을 활용한 분류
    • 문장 쌍의 품질을 판단 (좋은지 나쁜지)

3. 합성 데이터 관련 최신 트랜드

4. Recent Work in Data Measurement

Measuring Annotator Agreement Generally across Complex Structured, Multi-object, and Free-text Annotation Tasks

위 논문은 다양한 Task에 적용 가능 한 IAA measure을 제안하고 있다.

  • Everyone's Voice Mattters: Quantifying Annotation Disagreement Using Demographic Information
    주석 작업자의 정보가 공개된 SBIC, SChem 101 데이터로 RoBERTa-base 모델을 학습한다.

    • 일부 Outlier가 존재하지만 데이터 주석 작업의 불일치 정도를 예측했다.
    • SNS 크롤링 데이터(SBIC) 보다 크라우드소싱으로 수집된 데이터(Shem 101)에서 뚜렷한 경향을 관찰 가능했다.

    5. 그 외

  • Label Errors

  • Data-centric Evaluation of ML Models

  • Class Imbalance, Outliers, and Distribution Shift

  • Data Privacy and Security

  • Training Strategies

    Cross Lingual Transfer Learning

    영어 BERT에서 인코딩 레이어는 FREEZE하고 adapter layer를 추가 시켰다. 영어와 한국어의 차이를 학습할 수 있도록 하는 레이어 !
    그래서 영어 BERT를 데려와서 Post-training 한다.
    그리고서는 이제 이 인코더 레이어 마져도 프리즈 풀고 training.

    모델링을 급격하게 변화시키지 않고 성능을 끌어올릴 수 있다.

profile
헤매는 만큼 자기 땅이다.

0개의 댓글