Skip to content

SabaPivot/hate_speech_detect

Repository files navigation

혐오 발언 탐지

한국어 Encoder-only 모델을 사용한 혐오 발언 탐지 모델입니다. 국립 국어원의 혐오 발언 탐지 대회 참가를 위하여 작성한 코드입니다.

본 프로젝트 레포트는 레포트 링크를 참고해주세요.

개요

본 repository는 다음과 같은 기능을 제공합니다:

  • Encoder-only Transformer 모델을 위한 훈련 스크립트
  • hard voting 지원 (model.py 참고)
  • Soft voting 지원 (ensemble.py 참고)
  • 훈련, 평가, 앙상블 예측 제공

설치

  1. Clone repository:
git clone [repository-url]
cd hate_speech_detect
  1. 필수 라이브러리 설치:
pip install -r requirements.txt

사용법

훈련

bash trainer_train.sh

다음과 같은 parameter를 조정할 수 있습니다:

  • --model_name: 사용할 모델의 huggingface repository 경로
  • --epochs: 훈련 epoch 수
  • --batch_size: 훈련 batch size
  • --lr: 학습률 (다중 학습률 지원)
  • --data_type: 훈련 데이터 타입
  • --early_stopping_patience: Early stopping patience 값

평가

단일 모델 평가 실행:

bash trainer_evaluation.sh

최종 결과는 .jsonl 파일 형식으로 저장됩니다.

앙상블 기법 적용

다중 모델 앙상블 추론 실행:

bash trainer_ensemble.sh

다음과 같은 parameter를 조정할 수 있습니다:

  • model_name: 훈련에 사용한 모델(본 모델)의 경로를 입력합니다. 반드시 model_dir와 같은 순서로 입력해야 합니다.
  • model_dir: 훈련된 모델의 경로를 입력합니다. 원하는 만큼 ensemble 적용할 모델을 추가할 수 있습니다.
  --model_name \
    team-lucid/deberta-v3-xlarge-korean \
    team-lucid/deberta-v3-xlarge-korean \
    ...
  --model_dir \
    1e-05_team-lucid/deberta-v3-xlarge-korean/checkpoint-1896 \
    3e-05_team-lucid/deberta-v3-xlarge-korean/checkpoint-4424
    ...

최종 결과는 .jsonl 파일 형식으로 저장됩니다.

폴더 구조

hate_speech_detect/
├── data.py                    # 데이터 준비 및 토크나이저 로드
├── ensemble.py                # soft voting 구현
├── main.py                    # 메인 함수 및 인자 파싱
├── model.py                   # 모델 로드, 훈련 및 추론 구현 
├── hard_vote.py               # hard voting 구현
├── trainer_ensemble.sh        # 앙상블 예측 실행 스크립트
├── trainer_evaluation.sh      # 평가 실행 스크립트
├── trainer_train.sh           # 훈련 실행 스크립트
├── utils.py                   # compute metrics 구현
├── requirements.txt           # 필수 라이브러리 목록
└── README.md

데이터

본 프로젝트는 국립 국어원의 인공지능(AI) 말평 - 혐오표현 탐지가 제공한 데이터를 사용합니다.

해당 사이트에서 데이터 사용 허가를 승인 받은 이후, huggingface library에 private dataset으로 추가한 이후 data.py의 아래 코드로 데이터를 불러오기를 권장합니다.

huggingface-cli login
def prepare_datasets(args):
    datasets = load_dataset(args.data_path)

Special Tokens

해당 데이터셋은 개인 정보 보호를 위해 다음과 같은 특수 토큰을 포함합니다. 아래의 특수 토큰을 모델의 tokenizer에 special_token으로 추가해야 원활한 학습이 가능합니다.

  • &name&
  • &affiliation&
  • &social-security-num&
  • &tel-num&
  • &card-num&
  • &bank-account&
  • &num&
  • &online-account&

결과

Model f1_score
xlm-roberta-base-1 0.900
xlm-roberta-base-2 0.900
ko-electra-base 0.862
ko-bert-base 0.871
Hard Voting 0.928
Soft Voting 0.921

rule-based 적용 결과

아래와 같이 특정 혐오 단어가 hate_voca에 포함되어 있지만, 모델이 혐오 표현으로 예측이 실패한 경우 예측 결과를 rule-based 방법으로 수정합니다.

    for i, data in enumerate(test_dataset):
        if any(word in data["input"] for word in hate_voca) and result_array[i] != 1:
            count += 1
            result_array[i] = 1

Rule-based 적용 이후, 약 2,000 개의 전체 테스트 데이터 셋 중, 약 10개의 데이터를 더 정확하게 예측하였고, 이에 따라 f1 score가 약 0.03 ~ 0.06점 증가하였습니다.

대회 순위

2024년 12월 5일 기준 대회 순위는 다음과 같습니다.

  • 이름:
  • 사용 모델:
  • 사용 기법:
  • 점수:
  • 등수:

연락처

해당 프로젝트와 관련하여 질문이나 이슈가 있을 경우, github 이슈를 생성해주시기 바랍니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published