Datatrans · Technical Playbook

LLM Text De-Identification

LLM 비정형 텍스트 비식별화

LLM으로 이메일·상담로그 등 비정형 텍스트의 개인정보를 문맥에 맞게 재작성합니다.

DatatransSCRAMBLING04 STEPS
  1. 01
    대상 식별비정형 텍스트 컬럼 선정
  2. 02
    LLM 구성재작성 프롬프트 및 모델 설정
  3. 03
    문장 재작성개인정보 대체 및 문장 재구성
  4. 04
    품질 확인문맥 유지 및 비식별 여부 검증
Technical playbook · conceptual sequence
LLMAIUnstructured

Overview

이메일 본문, 상담 로그, 게시글 같은 비정형 텍스트는 단순 치환만으로 테스트에 필요한 문맥을 유지하기 어렵습니다. Datatrans의 Python 규칙에 LLM을 연동해 개인정보를 가상 데이터로 대체하고 문장을 재작성하는 방식을 구성할 수 있습니다.

LLM 출력에는 개인정보가 남거나 의미가 달라질 수 있으므로 결과 검수와 별도 탐지 규칙이 필요합니다. 모델의 배포 위치, 데이터 전송 범위와 보안 정책을 확인한 뒤 적용합니다.

What You'll Accomplish

문맥 기반 합성 데이터 생성
이메일 본문·상담 로그 등 비정형 데이터 지원
문장 재작성으로 원문 노출을 줄이는 변환 구성
Python 스크립트로 커스텀 로직 적용

Instructions

1

LLM 스크램블링 함수 작성

Python 함수로 개인정보를 가상 데이터로 대체하고 전체 문장을 재작성하는 로직을 정의합니다. domain registry에 등록된 신뢰된 plugin만 사용합니다.

python
# /secure/rules/llm_rule.py
import json
from urllib.request import Request, urlopen

def scramble_with_llm(content):
    prompt = (
        "개인정보를 가상 데이터로 바꾸고 문장을 재작성하세요. "
        "설명 없이 변환한 본문만 반환하세요.\n\n" + content
    )
    payload = json.dumps({
        "model": "llama3", "prompt": prompt, "stream": False
    }).encode("utf-8")
    request = Request(
        "http://127.0.0.1:11434/api/generate",
        data=payload, headers={"Content-Type": "application/json"}
    )
    with urlopen(request, timeout=120) as response:
        result = json.load(response)["response"].strip()
    if not result or result == content:
        raise ValueError("LLM output did not pass de-identification checks")
    return result
2

Assignment YAML 작성

비정형 텍스트 컬럼에 LLM rule을 매핑합니다. Multi-column rule은 columns 수와 같은 개수의 값을 반환해야 합니다.

yaml
# /secure/rules/llm.yaml
TGT_USER.CUST_CONSULT:
  - columns: CONSULT_CONTENT
    rules: SC_LLM_PARAPHRASE
    args: CONSULT_CONTENT
3

스크램블링 이관 실행

Runtime 오류가 나면 해당 Target과 같은 Target을 쓰는 Mapping을 중단하고 실패 데이터를 원본값으로 적재하지 않습니다. 다른 테이블은 계속될 수 있고 이전 commit은 남을 수 있으며, 최종 상태는 COMPLETED_WITH_ERRORS·exit code 0입니다.

bash
datatrans source=SRC_USER/password@host:1521/SRCDB \
  target=TGT_USER/password@host:1521/TGTDB \
  tables=SRC_USER.CUST_CONSULT \
  remap_schema=SRC_USER:TGT_USER \
  scrambles=/secure/rules/llm.yaml \
  table_action=APPEND \
  jobname=LLM_SCRAMBLE
4

결과 품질 확인

이관된 텍스트의 문맥 유지와 비식별 여부를 표본 검수합니다. 로그에는 row 값이 기록되지 않으므로 타겟 데이터에서 직접 확인합니다.

sql
SELECT CONSULT_CONTENT FROM TGT_USER.CUST_CONSULT
WHERE ROWNUM <= 5;

How It Works

1

대상 식별

비정형 텍스트 컬럼 선정

2

LLM 구성

재작성 프롬프트 및 모델 설정

3

문장 재작성

개인정보 대체 및 문장 재구성

4

품질 확인

문맥 유지 및 비식별 여부 검증