Nemotron-Personas-Korea 데이터셋을 활용하여 로컬 LLM으로 서비스 가입 확률을 시뮬레이션합니다.
# Homebrew로 설치
brew install ollama
# 또는 공식 사이트에서 다운로드
# https://ollama.com/download# 터미널에서 서버 시작
ollama serve
# 다른 터미널을 열어 모델 다운로드
ollama pull qwen2.5:7b# 가상환경 생성 (권장)
python3 -m venv venv
source venv/bin/activate
# 의존성 설치
pip install -r requirements.txt| 모델 | Ollama 명령어 | RAM | 장점 | 단점 |
|---|---|---|---|---|
| Qwen 3 (32B) | ollama pull qwen3:32b |
32GB+ | 높은 추론 품질, 한국어 포함 다국어 성능 우수, 긴 컨텍스트 | 다운로드/로딩이 오래 걸림, 충분한 메모리 필요 |
| Qwen 2.5 (7B) | ollama pull qwen2.5:7b |
8GB | 강력한 다국어 지원, 한국어 벤치마크 우수, 긴 컨텍스트 | 모델 크기가 상대적으로 큼, 중국어 편향 가능성 |
| Llama 3.1 Korean (8B) | ollama pull llama3.1-ko |
8GB | 한국어 이해도 우수, 빠른 추론 속도 | 영어 대비 창의적 응답 부족, 긴 컨텍스트 제한 |
| Gemma 3 (4B) | ollama pull gemma3:4b |
4GB | 매우 가벼움, 빠른 응답, 저사양 Mac에서도 실행 | 한국어 능력 제한, 복잡한 프롬프트 처리 약화 |
- M1/M2 Mac 8GB RAM → Gemma 3 (4B)
- M1/M2/M3 Mac 16GB+ RAM → Qwen 2.5 (7B)
- Apple Silicon 64GB+ RAM → Qwen 3 (32B) ← 고품질 권장
- 한국어 품질 최우선 → Llama 3.1 Korean (8B)
ollama serve# 권장 모델
ollama pull qwen3:32bsource venv/bin/activate
pip install -r requirements.txt# 기본 실행 (Qwen 2.5, 500명 샘플)
python simulator.py
# 거부기린(bugi.co.kr) 프로젝트 실행
python simulator.py --project bugi --model qwen3-32b --sample-size 300 --concurrency 4
# 시나리오 비교 실행
python simulator.py --project bugi --synthetic-data --fallback-only --sample-size 100 --scenarios baseline,creative_test,pricing
# 사용자 정의 시나리오 파일 실행
python simulator.py --project bugi --scenario-file ./scenarios.json
# Ollama/외부 데이터셋 없이 빠른 검증 실행
python simulator.py --project bugi --sample-size 300 --fallback-only --synthetic-data --output-dir ./output/bugi
# 모델 및 샘플 크기 지정
python simulator.py --model qwen2.5-ko --sample-size 500 --concurrency 4
# 저사양 Mac (가벼운 모델, 낮은 동시성)
python simulator.py --model gemma3-ko --sample-size 300 --concurrency 2
# 빠른 테스트 (이미 다운로드된 모델)
python simulator.py --model qwen2.5-ko --sample-size 300 --skip-download실행이 완료되면 ./output/ 디렉토리에 결과가 저장됩니다:
simulation_results.csv— 개별 페르소나별 가입 확률 및 사유analysis_report.json— 연령대/직업/성별/지역별/시나리오별 분석 결과report.html— 시나리오 비교용 HTML 리포트
| 옵션 | 기본값 | 설명 |
|---|---|---|
--project |
healthy-life |
시뮬레이션할 서비스 프리셋 (healthy-life, bugi) |
--model |
qwen2.5-ko |
사용할 모델 (qwen3-32b, llama3.1-ko, mistral-ko, qwen2.5-ko, gemma3-ko) |
--sample-size |
500 |
샘플링할 페르소나 수 (Nemotron 데이터셋 기준 최대 1,000,000건) |
--concurrency |
4 |
병렬 LLM 호출 수 |
--output-dir |
./output |
결과 저장 디렉토리 |
--seed |
42 |
랜덤 시드 |
--skip-download |
false |
모델 다운로드 건너뛰기 |
--fallback-only |
false |
Ollama 호출 없이 휴리스틱으로만 실행 |
--synthetic-data |
false |
HuggingFace 데이터셋 대신 내장 샘플 페르소나 사용 |
--scenarios |
baseline |
비교할 시나리오 키 목록 (baseline,creative_test,pricing 등) |
--scenario-file |
"" |
사용자 정의 시나리오 JSON 파일 경로 |
--scenario-file 옵션으로 JSON 파일을 넘기면 내장 프리셋 대신 직접 작성한 시나리오로 실행할 수 있습니다.
최상위는 JSON 배열이며, 각 항목은 하나의 시나리오를 나타냅니다.
[
{
"key": "creative_test",
"label": "크리에이티브 A — 공감형",
"dimension": "creative",
"note": "어떤 관점에서 페르소나를 평가할지 설명하는 메모입니다.",
"service_description": "서비스 설명 텍스트...\n\n---\n추가 메시지:\n\"여기에 테스트할 마케팅 카피를 적습니다.\"",
"action_label": "설치 및 지속 사용"
}
]| 필드 | 필수 | 설명 |
|---|---|---|
key |
O | 시나리오 식별자. 내장 프리셋과 동일한 키(baseline, creative_test, pricing, brand 등)를 쓰면 자동 정규화됩니다. 임의 문자열도 가능합니다. |
label |
X | 리포트에 표시될 이름. 생략하면 key가 그대로 사용됩니다. |
dimension |
X | 분석 차원 태그(예: creative, pricing, brand). 같은 key를 가진 여러 시나리오를 구분할 때 유용합니다. |
note |
X | 페르소나에게 어떤 관점으로 평가할지 지시하는 메모. 프롬프트의 "시나리오 관점" 섹션에 들어갑니다. |
service_description |
X | 해당 시나리오에서 사용할 서비스 설명. 생략하면 프로젝트 기본 설명이 사용됩니다. \n으로 줄바꿈, ---로 기본 설명과 추가 메시지를 구분하는 것이 좋습니다. |
action_label |
X | 평가할 행동(예: "설치 및 지속 사용"). 생략하면 프로젝트 기본값이 사용됩니다. |
- 같은 key로 여러 변형을 넣을 수 있습니다. 예를 들어
key: "creative_test"인 항목을 3개 넣으면 3개의 크리에이티브 변형이 A/B/C처럼 비교됩니다. service_description에\n\n---\n구분자를 쓰면 기본 서비스 설명과 테스트용 추가 메시지가 시각적으로 분리됩니다.note는 페르소나에게 주는 관점 지시입니다. "공감형 카피", "데이터형 카피"처럼 평가자가 어떤 렌즈로 볼지 힌트를 줍니다.label은 리포트에 그대로 노출되므로 구분하기 쉬운 이름을 쓰세요.
# scenarios.json으로 실행
python simulator.py --project bugi --scenario-file ./scenarios.json --fallback-only --synthetic-data
# 내장 프리셋만 사용 (scenarios.json 없이)
python simulator.py --project bugi --scenarios baseline,creative_test,pricing,brand --fallback-only --synthetic-data- macOS 12+ (Apple Silicon 또는 Intel)
- Python 3.9+
- RAM: 최소 8GB (권장 16GB+)
- 디스크: 모델당 4~8GB
- 인터넷: 최초 데이터셋 및 모델 다운로드 시 필요