글2에서 작품을 분류하는 기준 5가지를 만들었다. 그 중 하나가 “무엇이 시청자를 이 작품에 몰입하게 만드는가”였다. 이걸 더 세분화해보려 했다.
몰입 요인을 7가지로 나눠봤다. 성장 응원, 긴장감, 대리만족, 감정 이입, 미스터리, 힐링, 카타르시스. 작품마다 “가장 몰입하게 만든 요인 1개”와 “그다음 요인 1개”를 채우게 했다. 그다음 요인이 없으면 비워도 됐다.
그런데 막상 돌려보니 그다음 요인 칸이 거의 다 성장 응원으로 채워졌다. 성장 응원이 핵심 몰입 요인이 아닌 작품들에서도 그다음 요인 칸에 넣어버렸다. 50편 중 49편이 그랬다.
이게 프롬프트 문제인지 구조 문제인지 확인하려고 다섯 번째부터 아홉 번째 실험(D5~D9)까지 총 다섯 번 소규모 테스트를 돌렸다.
7개 몰입 요인 중 우선순위를 고르라고 한 배경
이 실험은 BSL 분류 시스템(글1·2에서 설계한 취향 분류 체계)에서 “무엇이 시청자를 몰입하게 만드는가”를 추출하는 항목 설계 과정에서 시작됐다.
몰입 요인은 7가지였다. 감정 이입, 성장 응원, 긴장감, 대리만족, 미스터리, 힐링, 카타르시스.
처음 설계는 이랬다. 주요 항목 칸에 1개, 보조 칸에 1개. 없으면 빈칸. 주요 칸은 필수, 보조 칸은 선택이었다. 항목이 하나뿐이면 보조 칸은 비워도 된다는 설계였다.
성장 응원은 주인공이나 등장인물이 성장하는 모습을 보며 응원하게 만드는 몰입 요인이다. LLM은 이 요인이 “있는지”는 잡아낼 수 있다. 그런데 7개 몰입 요인 중 “이게 가장 중요한 메인인지”는 작품 하나만 봐서 판단하지 못한다. 이게 나중에 문제가 됐다.
1,751편을 추출하기 전에 먼저 50편짜리 소규모 테스트를 먼저 돌렸다. 1,751편의 일본 애니 데이터는 AniList API에서 가져왔다. 공개 API라 접근이 자유로웠다. 보조 칸에 빈칸이 올 것으로 예상되는 작품들이 많았다. 결과를 보기 전까지는 특별한 문제를 예상하지 않았다.
첫 번째 실험 결과 — 비워야 할 칸이 거의 다 채워졌다
다섯 번째 시도(D5)에서 50편을 돌렸다. 보조 칸이 비어 있을 거라 예상했던 작품들에서도 50편 중 49편 보조 칸이 채워졌다. 스포츠 장르도 아닌데 성장 응원 요인이 그다음 요인 칸에 잔뜩 들어갔다.
처음엔 “일본 애니에는 성장 요소가 많으니 그럴 수 있다”고 봤다. 보조 칸이 비어야 할 작품들에서도 전부 채운 게 문제였다.
작업 과정에서 내린 결정을 문서로 남겨뒀다. 이 발견도 그렇게 기록됐다. “LLM은 빈 슬롯이 있으면 채운다. 보조 칸이 있으면 LLM은 채운다.”
구조를 바꾸기로 했다. 보조 칸을 없애고 목록 방식으로 전환했다. 최대 2개 제한을 걸었다. 여섯 번째 시도(D6)를 돌렸다.
8편을 테스트했다. 목표는 항목이 2개인 응답 3편 이하였다. 결과는 2개 응답이 6편이었다. 다시 과잉이었다. 목록 방식으로 바꿔도 같은 패턴이 나왔다. 성장 응원 요인이 또 나왔다. 무사쿠 텐세이, 시가츠, K-ON! 모두 원래 성장 응원이 핵심 요인으로 들어가면 안 되는 작품들이었다.
같은 팀 에이전트에게 진단을 맡겼다. 서브에이전트란 같은 팀에서 진단용으로 호출한 AI 역할이다. 코드를 짜는 사람이 아니다. 진단은 같았다. “우선순위는 작품 간 상대 비교가 필요한데 LLM은 단일 작품만 본다 — 구조적으로 못 한다.” 이건 프롬프트 문제가 아니라 LLM 추출 능력의 구조적 한계라는 결론이었다. 항목 이름만 바뀌었고 LLM 동작은 동일했다.
칸 구조를 세 번 바꿔봤는데 같은 패턴이 나왔다
칸을 어떻게 두느냐를 세 가지 방식으로 바꿔봤다. 처음엔 두 칸(주요·보조), 다음엔 목록 방식으로, 세 번째엔 각 항목에 있다/없다를 묻는 방식으로.
있다/없다 방식으로 전환한 건 일곱 번째 시도(D7)였다. 7개 항목마다 “있는가”를 묻는 구조였다. 8편을 테스트했다.
목표 비율은 25%였다. 다섯 번째 시도(D5)에서 98%, 여섯 번째(D6)에서 75%, 일곱 번째(D7)에서 62%. 매번 줄었지만 목표에는 미치지 못했다. 성장 응원 요인 제외 나머지 6개는 7~8편 중 정확했다. 유독 성장 응원만 틀렸다.
여기에 두 번째 구조를 추가했다. LLM이 근거 문장을 먼저 시놉시스에서 인용하게 하고, 그 인용에 있다/없다를 종속시키는 방식이었다. 항목이 해당하는지 기준을 글로 못 박아두는 방식(용어 정의 명문화)도 함께 적용했다. 여덟 번째 시도(D8)를 돌렸다.
8편 중 잘못 잡힌 수가 1편이었다. 처음으로 목표를 통과했다. 효과가 있었다.
다음 단계로 틀린 예시를 추가했다. “이런 작품은 성장 응원이 아니다”를 보여주는 방식이었다. 아홉 번째 시도(D9)를 돌렸다. 결과는 8편 중 잘못 잡힌 수가 2편이었다. 여덟 번째 시도보다 악화됐다. K-ON!이 앞 시도에서 이미 틀렸던 작품이라 다시 틀렸다. 고쳤다고 생각했는데 같은 자리에서 또 걸렸다. 시가츠가 새로 추가됐다.
구조를 보조 칸 방식 → 목록 방식 → 있다/없다 방식으로 세 번 바꾸는 동안 성장 응원 요인의 편향은 완전히 해소되지 않았다. 여기서 교훈으로 남긴 게 있다. “LLM 한계는 프롬프트 강화로 안 풀린다.”
Codex 리뷰가 짚어낸 두 가지 실패 원인
다섯 번째부터 아홉 번째까지 5회를 같은 팀이 반복했다. 같은 맥락을 공유하는 도구들이라 같은 사각지대에 빠질 수 있다. Codex(외부 AI 검토 도구)에 리뷰를 요청했다.
두 가지 실패 원인이 나왔다.
첫 번째는 K-ON!이었다. 항목 이름 자체가 끌어당기는 편향 문제였다. Codex의 진단은 이랬다. 모델이 “청춘, 노력으로 성장” 공식에 K-ON!을 끼워맞춘다. 성장 응원이라는 이름 자체가 의도보다 넓은 패턴을 끌어당긴다. 정의를 아무리 좁혀도 이름이 더 넓은 패턴을 당기고 있었다.
두 번째는 시가츠였다. 서사 안에서 지금 일어나는 일인지 과거 일인지를 구분하지 못하는 문제였다. 시놉시스에 과거 대회 언급이 있는데, 모델이 그걸 현재 서사로 읽었다. 현재 진행 중인 갈등인지 과거 배경인지를 구분하지 못했다.
두 문제 모두 프롬프트를 더 써도 안 됐다. Codex의 권고는 이랬다. “성장 응원이 핵심이다”를 LLM에게 통째로 묻지 마라. 대신 더 작은 조건 여러 개로 쪼개서 각각 확인하고, 그것들이 다 맞을 때만 코드가 “핵심”으로 판정하게 하라.
요약하면 이렇다. “성장 응원인지 LLM에게 직접 묻지 마라.”
LLM이 잘 하는 일과 못 하는 일 — 우선순위 선택의 한계
이 실험 전체에서 발견한 건 하나였다. LLM이 잘 처리하는 판단과 구조적으로 못 하는 판단이 다르다는 것.
LLM이 잘 하는 것 — 항목이 시놉시스에 있는가. 카타르시스가 있는가, 미스터리가 있는가. 작품 내부만 보면 되는 판단이다.
LLM이 구조적으로 못 하는 것 — 7개 중 어느 것이 더 중요한가. 이건 작품 간 상대 비교가 필요한 판단이다. LLM은 작품 하나만 본다.
다섯 번째부터 아홉 번째까지 반복된 패턴은 거기서 나왔다. 성장 응원이 “있는가”는 어느 정도 잡혔다. 성장 응원이 “가장 중요한가”는 구조를 어떻게 바꿔도 안 됐다.
여덟 번째 시도에서 근거 인용 방식이 효과를 보인 것도 같은 이유였다. “근거를 먼저 인용하라”는 조건이 엉뚱한 답(환각)을 줄였다. 그러나 “이 근거가 현재 서사의 핵심인가”는 여전히 LLM 판단에 남아 있었다. 거기서 아홉 번째 시도의 재발이 나왔다.
결론은 설계 원칙으로 남겼다. “우선순위 선택이 핵심인 작업은 LLM에게 위임하지 않는다. 있는지 없는지 판단만 LLM에게 맡기고, 우선순위는 전체 데이터를 집계해서 코드로 계산한다. 예컨대 성장 응원 요인이 들어간 작품이 전체 1,751편 중 몇 편인지 세어보는 식으로.”
5번의 소규모 테스트가 필요했다. 구조를 세 번 바꾸고, Codex에 리뷰를 맡기고 나서야 그 원칙에 도달했다.