Skip to content

Repository files navigation

YakganDongui

AI 기반 불공정 약관 탐지 플랫폼


Tech Stack

Backend

AI / NLP

Data Processing


팀원 구성

정지현 최유정

@jeongjihyunn

@sallydeveloperr

Overview

YakganDongui는 이용약관 텍스트를 분석하여 불공정 가능성이 있는 조항을 탐지하고,
공정거래위원회 심결례를 기반으로 근거 중심의 분석 결과를 제공하는 시스템이다.

일반 사용자가 이해하기 어려운 약관 구조를 조항 단위로 분해하고,
위험도를 분류한 뒤 유사 사례를 연결하여 판단을 보조하는 것을 목표로 한다.


Features

  • 약관 텍스트 입력 기반 분석
  • 조항 단위 분리 및 전처리
  • 규칙 기반 위험도 분류 (HIGH / MEDIUM / LOW)
  • RAG 기반 공정위 심결례 검색
  • 조항별 설명 생성
  • FastAPI 기반 REST API 제공

System Architecture

Input (Text / File / URL)
        ↓
Text Extraction (OCR / PDF / Crawling)
        ↓
Clause Splitter
        ↓
Risk Classification (Rule-based → Model 확장 예정)
        ↓
RAG Retriever (SentenceTransformer + FAISS)
        ↓
LLM Explanation (Claude API)
        ↓
API Response

Project Structure

Backend/
├── app/
│   ├── api/routes/
│   │   └── analyze.py
│   ├── services/
│   │   ├── analyze_pipeline.py
│   │   ├── clause_splitter.py
│   │   ├── precedent_retriever.py
│   │   └── llm_explainer.py
│   ├── schemas/
│   ├── core/
│   └── main.py
│
├── data_collection/
│   ├── collect_ftc_cases.py
│   ├── preprocess_ftc_for_rag.py
│   ├── build_faiss_index.py
│   └── search_ftc_rag.py

Installation

python -m venv .venv
.venv\Scripts\activate

pip install -r requirements.txt

Run

python -m uvicorn app.main:app --reload

Swagger UI:

http://127.0.0.1:8000/docs

API

Analyze Terms (Immediate)

POST /api/analyze

Request:

{
  "text": "약관 전체 텍스트"
}

Response:

{
  "summary": {
    "total_clauses": 5,
    "high_risk": 2,
    "medium_risk": 1,
    "low_risk": 2
  },
  "clauses": []
}

Current Status

항목 상태
Data collection ✅ 완료
RAG retrieval ✅ 구현 완료
Analysis pipeline ✅ MVP 구현 완료
API server ✅ 구현 완료
Frontend ⏳ 미구현
Model-based classification ✅ KoELECTRA optional 연동

KoELECTRA / KR-ELECTRA

프로젝트 기본 후보 모델은 snunlp/KR-ELECTRA-discriminator입니다. 한국어 ELECTRA 계열이며 사전학습 corpus에 법률 텍스트가 포함되어 있어 약관 위험도 분류 fine-tuning 후보로 사용합니다.

원본 모델은 사전학습 checkpoint이므로, 실제 위험도 예측에 사용하려면 LOW, MEDIUM, HIGH 라벨로 fine-tuning한 sequence-classification checkpoint가 필요합니다. fine-tuning 전에는 USE_KOELECTRA_CLASSIFIER=false로 두면 기존 규칙 기반 분류가 fallback으로 동작합니다.

USE_KOELECTRA_CLASSIFIER=false
KOELECTRA_MODEL_NAME_OR_PATH=snunlp/KR-ELECTRA-discriminator
KOELECTRA_LABEL_MAP=LABEL_0:LOW,LABEL_1:MEDIUM,LABEL_2:HIGH

fine-tuning한 모델을 저장하거나 Hugging Face에 업로드한 뒤에는 KOELECTRA_MODEL_NAME_OR_PATH만 해당 경로 또는 모델 ID로 바꾸고 USE_KOELECTRA_CLASSIFIER=true로 전환합니다.

데모용으로는 기존 규칙 기반 분류 결과를 pseudo-label로 만들어 KR-ELECTRA를 학습할 수 있습니다. 이 checkpoint는 발표용 연결 검증에는 사용할 수 있지만, 사람이 검수한 정답 라벨로 학습한 모델은 아닙니다.

python scripts/train_koelectra_pseudo.py --allow-download --epochs 1 --max-samples-per-label 80

학습 후 .env 예시:

USE_KOELECTRA_CLASSIFIER=true
KOELECTRA_MODEL_NAME_OR_PATH=models/koelectra-risk-pseudo
ALLOW_MODEL_DOWNLOAD=false

Roadmap

  • KoELECTRA 기반 위험도 분류 모델 optional 적용
  • 약관 도메인 데이터셋 구축
  • RAG 검색 품질 개선
  • 프론트엔드 UI 개발
  • 분석 리포트 기능 추가

Notes

  • 본 프로젝트는 학술 및 연구 목적으로 개발됨
  • 일부 기능은 MVP 수준으로 구현되어 있으며 지속적으로 개선 예정

About

Node.js와 AI 기술을 활용하여 서버 및 데이터 처리 로직을 구현하는 백엔드 팀입니다

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages