AI 주석자를 위한 코드북: 코딩 스킴을 신뢰할 수 있는 LLM 라벨러로 바꾸기
LLM이 실제로 따를 수 있는 주석 코드북을 쓰는 법, 그 라벨을 사람 코더와 대조해 검증하는 법, 사람을 계속 개입시키는 법을 실제 Potato 설정과 함께 다룹니다.
수십 년 동안 코드북은 사람에게 건네는 문서였습니다. 코더 팀에게 각 라벨이 무엇을 뜻하는지, 어떤 사례가 해당되는지, 까다로운 경계가 어디인지 알려주는 것이었습니다. 이제 그것을 읽는 코더는 대개 언어 모델이고, 세 번째 교육 세션을 마친 대학원생을 상정하고 쓴 코드북은 전체를 한 번 읽고 나서 되묻는 법이 없는 모델에게는 그대로 옮겨가지 않습니다.
코드북은 당신의 라벨과 세계 사이의 계약입니다. 각 코드에 대해 무엇을 뜻하는지, 무엇이 해당되고 무엇이 해당되지 않는지, 그리고 예시 한둘을 담습니다. LLM을 주석자로 쓰려면 모델이 주고받음 없이 실행할 수 있도록 그 계약을 다시 쓰고, 믿기 전에 그 출력을 사람 코더와 대조해 확인합니다.
코드북이란 무엇인가
내용 분석과 질적 연구에서 코드북은 연구에 등장하는 모든 코드의 공유된 정의입니다. 표준 참고 문헌은 MacQueen과 동료들의 1998년 템플릿으로, 각 코드에 이름, 짧은 정의, 언제 적용되고 언제 적용되지 않는지에 대한 상세한 서술, 그리고 예시 구절을 부여합니다. 그것을 다 적어 두는 목적은 신뢰도입니다. 같은 코드북을 읽은 두 코더는 같은 텍스트에 같은 라벨을 붙여야 하고, 실제로 그런지 측정할 수 있습니다.
코드북에는 두 가지 기질이 있습니다. 고정 코드북은 코딩을 시작하기 전에 확정되며, 대부분의 기계학습 라벨 집합과 크라우드소싱 과제가 이 방식입니다. 살아 있는 코드북은 읽어 가면서 자라며, 근거이론의 전통에 속합니다. 반복되는 생각을 발견해 이름을 붙이고, 나중에 두 코드가 같은 것임을 알게 되면 합칩니다. 둘 다 LLM 주석자를 굴릴 수 있지만, 살아 있는 코드북은 규모를 키우기 전 어느 시점에는 움직임을 멈춰야 합니다.
사람용 코드북이 LLM에서 무너지는 이유
사람 코더는 코드북의 빈틈을 판단력으로, 그리고 어려운 사례를 함께 이야기한 교육 세션으로 메웁니다. 모델에는 둘 다 없습니다. 모델은 지면의 낱말을 읽을 뿐이고, 당신이 암묵에 맡긴 자리가 곧 모델이 어긋나는 자리입니다.
- 정의되지 않은 경계. "참가자가 돈을 언급하면 비용 우려로 코딩하라"는 지나가듯 말한 "싸지는 않았죠"가 해당되는지를 빠뜨립니다. 사람은 묻지만 모델은 추측하고, 코퍼스 전체에서 일관되지 않게 추측합니다.
- 부정 예시의 부재. 사람 코더는 "이건 X처럼 보이지만 아니다"에서 긍정 사례만큼 많이 배웁니다. 코드북이 그것을 적어 두는 일은 드뭅니다. 교육자가 말로 채워 주기 때문입니다.
- 지시의 축자적 해석. 모델에게 "코드를 최대 세 개까지 적용하라"고 하면 텍스트가 그럴 만한지와 무관하게 셋을 붙여 상한까지 채우는 일이 잦습니다. 사람은 그것을 천장으로 읽고 모델은 목표치로 읽습니다.
- 분절 단계의 부재. 사람은 기록을 코딩 가능한 단위로 자연스럽게 나눕니다. 모델에게는 먼저 분절하고 각 단위를 코딩하라고 일러 주어야 합니다. 그러지 않으면 문단 전체를 한 덩어리로 코딩해 원하던 세밀함을 잃습니다.
넷 다 코드북을 고치면 해결되고, 그 수정이 바로 사람용 코드북을 모델이 실행할 수 있는 것으로 바꿉니다.
LLM이 따를 수 있는 코드북 쓰기
무엇을 더해야 하는지 알고 나면 다시 쓰는 일은 기계적입니다. 각 코드에 대해 사람이라면 알아서 채웠을 네 가지를 명시하십시오.
- 한 줄 정의. 평이한 말로, 코드 이름의 동의어가 아니게.
- 포함 규칙: 그 코드가 적용된다는 신호들.
- 제외 규칙: 해당되지 않는 아슬아슬한 사례들과 각각의 짧은 예시.
- 실제 예시 두세 개. 순진한 독자라면 잘못 코딩할 만한 것을 하나 포함하면 좋습니다.
그런 다음 구조를 라벨과 분리해 다루십시오. 모델에게 먼저 텍스트를 단위로 분절하게 하고, 각 단위를 코드북에 비추어 코딩하게 하고, 아무것도 맞지 않으면 가장 가까운 코드에 손을 뻗는 대신 판단을 보류하게 하십시오. 명시적인 "해당 없음" 선택지는 지시문을 한 문단 더 쓰는 것보다 데이터 품질에 더 기여합니다. 코드북이 다루지 못한 사례를 둘 자리를 주어, 맞지 않는 코드에 억지로 밀어 넣지 않게 하기 때문입니다.
신뢰도 문제
LLM 주석자를 검증하는 이유는 그것이 얼마나 잘할지 미리 알 수 없기 때문입니다. 확립된 몇몇 과제에서는 잘합니다. Gilardi, Alizadeh, Kubli(2023)는 ChatGPT가 관련성, 입장, 프레임 검출에서 크라우드 작업자와 대등하거나 앞섰고, 코더 간 일치도는 더 높았으며 라벨당 비용은 1센트 미만이었다고 보고했습니다. 하지만 "그 과제들에서 잘한다"는 것은 당신의 과제에 대해서는 아무것도 말해 주지 않습니다. 알아낼 방법은 측정뿐입니다.
측정은 사람 코더 둘에게 하는 것과 같습니다. 사람들에게 표본을 라벨링하게 하고, 같은 표본을 모델에게도 라벨링하게 한 뒤, Cohen's나 Krippendorff's처럼 우연 일치를 보정하는 일치도 통계량을 계산합니다. 일치도가 높은 곳에서는 모델이 코퍼스의 대부분을 짊어질 수 있습니다. 낮은 곳에서는 정의가 생각만큼 일하지 않는 코드를 찾아낸 것이고, 고칠 곳은 대개 모델이 아니라 코드북입니다.
사람의 코드북에서 LLM 주석자로, 개선 루프와 함께
지켜볼 만한 실패 유형이 둘 있습니다. 모델은 상한이 주어지고 그 아래에 머무를 이유가 없을 때 코드를 과다 적용하므로, 존재 여부로는 일치도가 괜찮아 보여도 개수에서는 무너질 수 있습니다. 또 사람이 새로 라벨링하는 대신 모델을 검증하는 자리에 서면 자동화 편향이 스며듭니다. 그럴듯한 코드에 이의를 다는 것보다 받아들이는 편이 빠르므로, 검증자는 모델의 실수를 추인하게 됩니다. 둘 다 완전히 눈가림된, 사람만의 라벨 한 조각을 잣대로 남겨 두어야 할 이유입니다.
사람을 계속 개입시키기
작동하는 방식은 일치도 수치를 보고 정하는 모델과 사람 사이의 분담입니다.
일치도로 경로를 나눈다. 확신 있는 코드는 통과시키고 나머지는 되돌린다
라벨링된 골드 표본에서 모델을 돌리고, 사람과 일치하는 지점을 보고, 그에 맞춰 경로를 나누십시오. 모델이 안정적으로 맞히는 코드는 가벼운 표본 점검과 함께 통과시킵니다. 틀리는 코드, 그리고 모델이 보류했거나 확신이 없어 보였던 단위는 사람 코더에게 보냅니다. 사람들이 그것을 해결해 가면 불일치가 코드북으로 되돌아가고, 다음 회차는 그만큼 나아집니다. 사전 주석 뒤에 있는 휴먼 인 더 루프 발상을 라벨 하나에서 코딩 스킴 전체로 확대한 것입니다.
Potato에서 하는 법
Potato는 이 루프를 도구 하나 안에서 굴립니다. 코드북에 기반한 코딩 스킴, 사전 주석을 하는 LLM, 검증하는 사람 코더, 그리고 그 결과에 대한 신뢰도 지표입니다. 코드북은 코드북 기반으로 표시한 span 스킴 안에 있으며, 이것이 단순한 라벨 집합을 편집 가능하고 계층적인 코딩 스킴으로 바꿔 줍니다.
annotation_schemes:
- annotation_type: span
name: codes
description: Highlight a passage and apply a code from the codebook
labels: [access barriers, cost concerns, provider trust]QDA 모드에서 코드북은 기본이 open이어서, 스킴이 자리를 잡아 가는 동안 코더가 코드를 추가하거나 이름을 바꾸거나 합칠 수 있습니다. 안정된 코드북이 생기면 규모를 키우기 전에 fixed로 바꿔, 공유 스킴이 모델과 코더의 발밑에서 움직이지 않게 하십시오.
모델이 코드를 미리 적용하게 하려면 AI 지원을 켜고 사용하는 엔드포인트를 지정하십시오.
ai_support:
enabled: true
endpoint_type: anthropic # or openai, gemini, ollama, ...
ai_config:
model: claude-opus-4-8
api_key: ${ANTHROPIC_API_KEY}
temperature: 0.2모델이 코드를 제안하고 주석자가 확정하거나 고칩니다. 자동화 편향을 측정 가능하게 두려면 일치도용으로 남겨 둔 항목에는 미리 채워 넣지 마십시오. 사람만의 눈가림 조각을 남겨 두고 그것과 비교하십시오. 사전 주석 가이드가 설명하는 방식입니다.
한 회차가 끝나면 두 개의 내보내기가 결과물과 감사 기록을 줍니다.
python -m potato.export config.yaml --format codebook -o codebook.csv
python -m potato.export config.yaml --format quotation_report \
--option include_memos=true -o quotations.csvcodebook 내보내기는 코드마다 한 행으로 설명과 사용 횟수를 담으므로, 모델이 어떤 코드에 기댔고 어떤 코드는 한 번도 쓰이지 않았는지 볼 수 있습니다. quotation_report는 코딩된 스팬마다 한 행으로, 실제로 모델을 대조해 확인하게 되는 파일입니다. Potato는 코드에 대해 Cohen's와 Fleiss'의 κ를 보고하므로, 모델 대 사람 비교가 보고 가능한 수치로 나옵니다.
다음으로 볼 것
- 효과적인 주석 지침 쓰기, 같은 기예의 사람 쪽.
- LLM과 비전 사전 주석, 모델 제안의 작동 방식과 자동화 편향 안전장치.
- 주석자 간 일치도 해설, 분담을 결정하는 신뢰도 통계.
- Potato로 질적 코딩하기, 이 작업 흐름이 딛고 선 코드북, 메모, 사례.
코드북 비중이 큰 데이터셋들은 잘 규정된 스킴이 실제로 어떤 모습인지 보여줍니다. GoEmotions의 세밀한 감정 코드, Social Chemistry의 사회 규범 판단, Media Frames의 프레이밍 라벨입니다.