persona-LDT

Overview / 개요

한국어 어휘 판단 과제(LDT)의 AI 시뮬레이션 실험

LLM(Claude)에게 실제 참가자의 인구통계 정보와 단어 속성을 제공하고, 어휘 판단 과제(Lexical Decision Task)에서의 반응시간(RT)과 정답여부를 예측하게 하는 실험이다.

연구 질문

LLM이 인간 참가자의 인구통계적 특성과 단어의 심리언어학적 속성을 기반으로
한국어 어휘 판단 과제의 반응시간 및 정확도 패턴을 현실적으로 시뮬레이션할 수 있는가?


Background / 연구 배경

어휘 판단 과제 (Lexical Decision Task)

어휘 판단 과제(LDT)는 인지심리학에서 어휘 접근(lexical access) 과정을 연구하는 대표적 실험 패러다임이다. 참가자는 화면에 제시된 문자열이 실제 단어인지 비단어인지를 최대한 빠르고 정확하게 판단한다.

  • 반응시간(RT): 어휘 접근의 용이성을 반영하는 핵심 종속변수
  • 정답여부: 어휘 표상의 존재 및 접근 가능성을 반영

AI 시뮬레이션 동기

전통적 LDT 실험은 대규모 참가자 모집, 실험실 환경 통제, 시간 및 비용 등의 제약이 있다. LLM을 활용한 시뮬레이션은 다음을 탐색한다:

  1. LLM이 심리언어학적 변수와 반응시간 간의 관계를 학습 데이터로부터 내재화했는지
  2. 인구통계 변수(나이, 교육, 성별)에 따른 차이를 재현할 수 있는지
  3. 이론적 원칙 제공 여부가 시뮬레이션 품질에 미치는 영향

KLP2 (Korean Lexicon Project 2)

본 실험의 입력 데이터는 KLP2에서 수집된 한국어 단어 속성 데이터를 기반으로 한다. KLP2는 한국어 단어의 심리언어학적 속성(빈도, 친숙성, 구체성, 상상가능성, 정서가, 각성가 등)을 대규모로 수집한 프로젝트이다.


Experimental Design / 실험 설계

독립변수

참가자 변수 (Between-subjects)

변수설명코딩
age나이연속 (세)
gender성별1=남성, 2=여성
education교육 수준17 (초등박사)
aver_CRH평균 읽기 습관 점수연속

단어 변수 (Within-subjects)

변수설명단위
length단어 길이음절 수
log_type_freq로그 단어 빈도로그 변환값
의미이해의미 이해 정도평정치
친숙성단어 친숙성평정치
구체성구체성 정도평정치
상상가능성심상 용이성평정치
정서가정서적 가치평정치
각성가각성 수준평정치

종속변수

변수설명범위
predicted_rt예측 반응시간약 400~2000ms
predicted_correct예측 정답여부1=정답, 0=오반응

실험 구조

  • 과제: 모든 자극은 실제 한국어 단어 (정답 = 항상 ‘a’ 키)
  • 단위: List별 배치 처리 (참가자 그룹 × 단어 세트)
  • 설계: 참가자 변수 × 단어 변수 완전 교차

Version Comparison / 버전 비교

본 실험은 두 버전으로 구성되어 예측 원칙(이론적 가이드) 제공 여부의 효과를 비교한다.

구분버전 A (현재 구현)버전 B (비교 조건)
이름예측 원칙 포함예측 원칙 미포함
System PromptLDT 이론 기반 예측 원칙 제공과제 설명만 제공, 원칙 없음
기대 효과이론 정합적 예측LLM 자체 내재 지식 기반 예측
비교 목적명시적 이론 가이드가 시뮬레이션 품질을 향상시키는지 검증

비교 분석 포인트

  • RT 분포의 현실성 (실제 인간 데이터와의 유사도)
  • 단어 빈도 효과(word frequency effect)의 재현 정도
  • 참가자 변수에 따른 개인차 패턴의 일치도
  • 정답률의 현실성

Prediction Principles / 예측 원칙

버전 A의 system prompt에 포함된 예측 원칙은 다음과 같다:

반응시간(RT) 원칙

  1. 현실적 범위: 실제 한국어 LDT 데이터의 범위 (약 400~2000ms)
  2. 단어 빈도 효과: log_type_freq가 높을수록 RT 감소 (가장 강한 예측변수)
  3. 단어 길이 효과: length(음절 수)가 길수록 RT 증가
  4. 친숙성/의미이해 효과: 점수가 높을수록 RT 감소
  5. 연령 효과: 나이가 많을수록 RT 증가 (인지 처리 속도 저하)
  6. 교육 효과: 교육 수준이 높을수록 RT 감소
  7. 읽기 습관 효과: CRH 점수가 높을수록 RT 감소
  8. 한국어 특성: 교착어 구조, 음절 구조, 한자어 vs 고유어 고려
  9. 개인차: 같은 list 내에서도 참가자 특성에 따라 RT 차이 발생

정답여부 원칙

  1. 전체 정확률: 실제 LDT 정확률 수준 (85~98%)
  2. 단어 속성 효과: 낮은 빈도·친숙성 단어에서 오반응 증가
  3. 참가자 효과: 고령·저학력·저CRH 참가자일수록 오반응 확률 증가

Technical Implementation / 기술 구현

아키텍처

[KLP2 CSV 데이터]
       │
       ▼
[Pandas: List별 그룹핑]
       │
       ▼ (List 단위 배치)
[Prompt 구성] ──→ System Prompt (과제 설명 + 예측 원칙)
       │          User Prompt (참가자 정보 + 단어 정보)
       ▼
[Claude API 호출] ──→ claude-sonnet-4-5
       │                비동기 처리 (httpx + asyncio)
       │                동시 처리: Semaphore(WORKERS)
       ▼
[JSON 응답 파싱]
       │
       ▼
[CSV 저장 + 체크포인트]

모델 및 파라미터

파라미터설명
MODELclaude-sonnet-4-5Anthropic Claude Sonnet 4.5
MAX_TOKENS4096최대 출력 토큰 수
RETRY_LIMIT3API 호출 재시도 횟수
RETRY_DELAY10재시도 대기 시간 (초)
WORKERS3 (설정 가능)동시 처리 List 수
BATCH10배치당 처리 List 수

데이터 흐름

  1. 데이터 로드: KLP2 CSV (euc-kr 인코딩) → Pandas DataFrame
  2. 그룹핑: Linklist 기준으로 참가자-단어 조합 구성
  3. 프롬프트 생성: 참가자 정보 (인구통계) + 단어 정보 (8개 속성) → 구조화된 프롬프트
  4. API 호출: 비동기 HTTP 요청, Rate Limit 대응 (429 → 점진적 대기)
  5. 응답 파싱: JSON 추출 (코드블록 또는 raw JSON)
  6. 결과 저장: CSV 파일 (증분 저장, utf-8-sig)
  7. 체크포인트: 완료된 List ID를 JSON으로 저장, 중단 후 재시작 지원

프롬프트 구조

System Prompt

[과제 설명] → LDT 과제의 절차와 키 매핑 설명
[예측 원칙] → RT 및 정답여부 예측 규칙 (버전 A에서만)
[출력 형식] → JSON 스키마 지정

User Prompt

[List: {list_id}]
{N}명의 참가자가 {M}개의 한국어 단어를 보고 어휘 판단 과제를 수행했습니다.

[참가자 정보 — N명]
  - PMI_ID {id}: {age}세, {gender}, 교육={education}, CRH={crh}

[단어 정보 — M개]
  1. '{stimulus}' | 길이:{length}음절 | log빈도:{freq} | 의미이해:{val} | ...

모든 N×M개 조합을 JSON으로 출력하세요.

Data Specification / 데이터 명세

입력 파일

항목
파일명raw_data_KLP2_modify_2_.csv
인코딩euc-kr
위치Google Drive (/content/drive/MyDrive/)

주요 컬럼

컬럼명설명역할
PMI_ID참가자 고유 ID참가자 식별
LinklistList 그룹 ID배치 처리 단위
stimulus자극 단어예측 대상
age나이참가자 변수
gender성별 (1=남, 2=여)참가자 변수
education교육 수준 (1~7)참가자 변수
aver_CRH평균 읽기 습관참가자 변수
length단어 길이 (음절)단어 변수
log_type_freq로그 단어 빈도단어 변수
의미_이해의미 이해 점수단어 변수
친숙성친숙성 점수단어 변수
구체성구체성 점수단어 변수
상상가능성상상가능성 점수단어 변수
정서가정서가 점수단어 변수
각성가각성가 점수단어 변수

출력 파일

항목
파일명ldt_predictions.csv
인코딩utf-8-sig

출력 컬럼

컬럼명설명
PMI_ID참가자 ID
list_idList 그룹 ID
stimulus자극 단어
predicted_rt예측 반응시간 (ms)
predicted_correct예측 정답여부 (1/0)

체크포인트 파일

항목
파일명ldt_checkpoint.json
형식{"completed_lists": [list_id, ...]}
용도중단 후 재시작 시 완료된 List 건너뛰기

Execution Environment / 실행 환경

플랫폼

  • Google Colab (Jupyter Notebook 환경)
  • Google Drive 마운트 필요 (/content/drive/MyDrive/)

필수 패키지

패키지용도
httpx비동기 HTTP 클라이언트 (API 호출)
pandas데이터 처리
asyncio비동기 처리
jsonJSON 파싱

API 요구사항

  • Anthropic API Key 필요
  • 설정 방법: 직접 입력 또는 Colab Secrets (ANTHROPIC_API_KEY)
  • API 버전: 2023-06-01

실행 절차

  1. Google Colab에서 노트북 열기
  2. 셀 1: 패키지 설치 (httpx)
  3. 셀 2: Google Drive 마운트
  4. 셀 3: API 키 및 파일 경로 설정
  5. 셀 4: KLP2 데이터 로드 및 확인
  6. 셀 5: 시뮬레이션 실행 (비동기)
  7. 셀 6: 결과 확인 및 저장

Appendix / 부록

교육 수준 매핑 테이블

코드교육 수준
1초등학교 졸업
2중학교 졸업
3고등학교 졸업
4전문대 졸업
5대학교 졸업
6석사 졸업
7박사 졸업

성별 매핑 테이블

코드성별
1남성
2여성

JSON 응답 스키마

{
  "results": [
    {
      "pmi_id": 123,
      "stimulus": "단어",
      "rt": 650,
      "correct": 1
    }
  ]
}