Skip to content

DoyoubK/absa_experiment

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ABSA (Aspect-Based Sentiment Analysis) 실험 프로젝트

Lexicon 기반 약지도 학습을 통한 한국어 Aspect Term Extraction

📁 프로젝트 구조

absa_experiment/
├── data/
│   ├── raw/              # 원본 JSON 데이터
│   ├── lex/              # Aspect lexicons
│   │   ├── aspect_lexicon.json      # 추출된 aspect lexicon (58,537개 표현)
│   │   ├── lexicon_stats.json       # Lexicon 통계
│   │   └── forbid.txt               # 제외할 단어 리스트
│   ├── F_final/          # F policy 데이터셋 (권장)
│   └── LF_final/         # LF policy 데이터셋
├── models/               # 학습된 모델 저장
├── scripts/              # 실행 스크립트
│   ├── 1_extract_lexicon.sh         # Step 1: Lexicon 추출
│   ├── 2_prepare_dataset.sh         # Step 2: 데이터셋 생성
│   ├── 3_train_model.sh             # Step 3: 모델 학습
│   ├── run_full_pipeline.sh         # 전체 파이프라인 실행
│   ├── extract_improved_lexicons.py # Lexicon 추출 Python 스크립트
│   ├── prepare_dataset.py           # 데이터셋 생성 (F policy)
│   ├── prepare_lf_dataset.py        # 데이터셋 생성 (LF policy)
│   ├── train_token_classifier.py    # 모델 학습 스크립트
│   └── archived/                    # 사용하지 않는 구 버전 스크립트
└── src/                  # 유틸리티 모듈
    ├── align.py          # Span alignment 함수
    └── utils.py          # 기타 유틸리티

🚀 빠른 시작

1. 환경 설정

# Python 가상환경 생성 (권장)
python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 필요한 패키지 설치
pip install -r requirements.txt

2. 전체 파이프라인 실행 (권장)

# F Policy (권장) - Lexicon 기반으로 정확한 aspect term만 추출
./scripts/run_full_pipeline.sh fallback

# 또는 LF Policy - L(Loose) + F(Fallback) 병합
./scripts/run_full_pipeline.sh loose_fallback

3. 단계별 실행 (선택사항)

각 단계를 개별적으로 실행할 수도 있습니다:

# Step 1: Lexicon 추출
./scripts/1_extract_lexicon.sh

# Step 2: 데이터셋 생성 (F Policy)
./scripts/2_prepare_dataset.sh fallback data/F_final

# Step 3: 모델 학습
./scripts/3_train_model.sh data/F_final models/bert_f_final

📊 Policy 설명

F Policy (Fallback) - 권장 ⭐

  • 방식: Lexicon에 있는 단어만 aspect term으로 레이블링
  • 장점:
    • Precision 높음 (정확한 aspect term만 레이블링)
    • 노이즈 적음
    • F1 score 높을 것으로 예상
  • Coverage: ~67% (20,641 mentions 중 13,949 매칭)
  • 사용 시나리오: 정확도가 중요한 경우

LF Policy (Loose + Fallback)

  • 방식: L policy (SentimentText 매칭) + F policy (Lexicon) 병합
  • 장점:
    • Coverage 매우 높음 (116%)
    • F policy 기여도 85.72%로 품질 개선됨
  • 단점:
    • L policy의 긴 span 레이블링이 일부 포함 (노이즈)
    • Precision이 F policy보다 낮을 수 있음
  • 사용 시나리오: Coverage가 중요한 경우

🛠 주요 스크립트

파이프라인 스크립트

  • scripts/run_full_pipeline.sh - 전체 파이프라인 한 번에 실행
  • scripts/1_extract_lexicon.sh - Lexicon 추출
  • scripts/2_prepare_dataset.sh - 데이터셋 생성
  • scripts/3_train_model.sh - 모델 학습

Python 스크립트

  • scripts/extract_improved_lexicons.py - Lexicon 자동 추출
  • scripts/prepare_dataset.py - F policy 데이터셋 생성
  • scripts/prepare_lf_dataset.py - LF policy 데이터셋 생성
  • scripts/train_token_classifier.py - 모델 학습

💡 사용 예시

데이터셋 통계 확인

# 생성된 데이터셋 통계
cat data/F_final/stats_train.json

# 출력 예시:
# {
#   "mentions": 20641,
#   "matched": 13949,
#   "matched%": 67.58,
#   "fallback_used%": 100.0
# }

Lexicon 내용 확인

# Lexicon 파일 보기
cat data/lex/aspect_lexicon.json | python3 -m json.tool | head -50

# 통계 확인
cat data/lex/lexicon_stats.json

학습 결과 확인

# 학습된 모델 디렉토리
ls -la models/bert_f_final/

# 평가 결과 (학습 후 생성됨)
cat models/bert_f_final/eval_results.json

⚙️ 고급 설정

Lexicon 추출 파라미터 조정

scripts/1_extract_lexicon.sh 파일 내 파라미터 수정:

  • MIN_FREQ: 최소 출현 빈도 (기본값: 2)
  • MIN_LENGTH: 최소 표현 길이 (기본값: 2)
  • MAX_LENGTH: 최대 표현 길이 (기본값: 15)

학습 하이퍼파라미터 조정

scripts/3_train_model.sh 파일 내 파라미터 수정:

  • NUM_EPOCHS: 학습 에포크 (기본값: 3)
  • BATCH_SIZE: 배치 크기 (기본값: 16)
  • LEARNING_RATE: 학습률 (기본값: 2e-5)

🔍 문제 해결

Lexicon이 생성되지 않은 경우

# Step 1 다시 실행
./scripts/1_extract_lexicon.sh

데이터셋 생성 실패

# Lexicon 파일 확인
ls -la data/lex/aspect_lexicon.json

# 수동으로 데이터셋 생성
./scripts/2_prepare_dataset.sh fallback data/F_final

Permission denied 에러

# 스크립트 실행 권한 부여
chmod +x scripts/*.sh

CUDA/GPU 관련 오류

모든 스크립트는 GPU가 없어도 CPU로 자동 실행됩니다 (속도는 느림).

📈 성능 개선 결과

Lexicon 확장 효과

지표 기존 (105개) 확장 (58,537개) 개선
F Coverage 46.92% 67.58% +20.66%p
LF From F 51.25% 85.72% +34.47%p

기대 효과

  • F Policy: Precision ↑ → F1 score 향상 예상
  • LF Policy: F 기여도 ↑ → L 노이즈 희석, 품질 개선

📚 참고 문서

  • DATASET_ANALYSIS.md: LF F1 score 문제 분석
  • LEXICON_EXPANSION_RESULTS.md: Lexicon 확장 효과 비교
  • LEXICON_EXPANSION_SUMMARY.md: 전체 작업 요약

About

BERT 기반 학습

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages