지난 글에서 PokéClip의 v3 아키텍처를 소개했다. 영상(YOLO)·음성(Whisper)·채팅 세 신호를 병렬로 분석하고, 둘 이상이 임계치를 넘으면 하이라이트로 판정하는 "E 하이브리드" 구조였다.
그 구조를 통째로 갈아엎었다. 이 글은 왜 갈아엎었는지, 어떤 고민을 거쳐서 어디에 도착했는지의 기록이다.
문제: 전 구간을 GPU에 넣는 구조
v3의 문제는 심사 피드백을 받고서야 또렷해졌다. 3신호 병렬 구조는 방송 전체를 영상·음성 분석에 넣어야 한다. 6~8시간짜리 방송이면 GPU가 6~8시간어치를 씹어야 한다는 뜻이다. "전처리로 후보 구간을 추리고 대표 화면만 분석해서 연산 비용을 줄이는 방식을 고려하라"는 지적을 받았고, 맞는 말이었다.
그런데 그 즈음 우리는 다른 걸 하나 발견한 상태였다. 세 신호 중에 채팅이 제일 정확하다는 것.
실험: 채팅 18,112건을 뜯어봤다
MSI T1 경기의 치지직 채팅을 수집해서 분석했다. 2세션 65분, 18,112건, 평균 동접 6.8~7.1만. 우리가 LoL e스포츠의 주 소비층이라 어디가 하이라이트인지는 몸으로 안다 — 경기를 실시간으로 보면서 실제 하이라이트에서 채팅이 튀는지 관찰했다.
세 가지가 확인됐다.
- 채팅 치는 사람은 생각보다 훨씬 적다. 동접 대비 고유 채터 비율이 2.3~2.9%였다. 7만 명이 봐도 채팅 치는 건 2천 명 남짓.
- 진짜 큰 장면에서만 잠수 시청자가 깨어난다. 평소 채팅을 안 치던 사람(세션 5회 미만)의 비중이 평상시 24~30%인데, 최상위 피크에서는 37~47%까지 올라갔다. 작은 스파이크에서는 16~22%에 그쳤다. 스파이크 크기와 잠수 활성화가 비례한다 — "초하이라이트"와 "일반 하이라이트"를 나눌 수 있는 실측 근거다.
- 초하이라이트만으로는 롱폼을 못 만든다. 확실한 폭발 구간을 다 합쳐도 65분 중 4.7분. 하이라이트 영상이 보통 10~15분인 걸 생각하면 턱없이 부족하다.
재밌었던 건, 내가 "이 정도면 하이라이트 아닌가?" 싶었는데 채팅이 안 튄 구간이 있었다는 점이다. 처음엔 감지 실패인가 했는데, 뒤집어 생각하면 이게 핵심이었다 — 내 취향과 대중의 반응은 다르다. 그래서 우리는 하이라이트의 기준을 개인의 감이 아니라 시청자 반응으로 정의하기로 했다.
전환: 채팅 우선 캐스케이드
세 신호를 대등하게 놓고 투표시키는 대신, 제일 정확한 신호를 게이트로 세웠다.
- 티어 1: 채팅 폭발 → 영상·음성 안 보고 즉시 하이라이트 확정. 시청자가 이미 투표를 끝낸 순간이다.
- 티어 2: 채팅 상위 20~25% 구간만 → 영상+음성 분석이 "넣을 가치"를 판정.
- 그 밖 → 분석 안 함.
이러면 GPU가 볼 분량이 방송 전체의 20~25%로 준다. 심사가 지적한 비용 문제에 대한 답이면서, 실험이 시킨 설계이기도 하다.
여기서 티어 2의 역할 정의가 중요하다. 티어 2는 "채팅이 놓친 하이라이트를 찾는 장치"가 아니다 — 채팅의 recall은 우리 도메인에서 사실상 완벽하다. 티어 2는 롱폼 분량을 공급하는 장치다. 초하이라이트 4.7분에 일반 하이라이트를 더해 10~15분을 채우는 건데, "치던 사람만 치는" 구간은 채팅만으로 서열화가 안 되니까 영상·음성이 판정하는 거다.
고찰 1: 기준선은 평균이 아니라 중앙값
캐스케이드의 트리거는 "평소 대비 몇 배 튀었나"라는 배율이다. 그럼 "평소"를 뭘로 잡느냐가 문제가 되는데, 여기서 팀 내 논쟁이 하나 있었다. 펜타킬이 터지고 1분 뒤에 트리플킬이 터지면?
숫자로 굴려보면 이렇다. 평소 5초당 12개, 펜타킬이 40초간 60~100개로 폭발했다고 하자.
- 평균 기준선: 폭발 빈들이 평균을 12 → 31로 끌어올린다. 트리플킬이 45개를 만들어도 45÷31 = 1.45배. 폭발 판정 실패. 하이라이트를 놓친다.
- 중앙값 기준선: 24개 빈을 줄 세우면 가운데는 여전히 평상 빈이다. 기준선 12 유지, 45÷12 = 3.75배. 정상 확정.
중앙값은 크기가 아니라 순서상 가운데 자리만 보기 때문에, 폭발이 몇 개 끼어도 안 끌려간다. 연속 하이라이트가 밥 먹듯 나오는 게임 방송에서 이건 취향 문제가 아니라 정확도 문제였다.
고찰 2: "평균 이상" 게이트의 함정
티어 2 게이트를 처음엔 "채팅량이 평균/중앙값 이상인 구간"으로 잡으려 했다. 실측을 돌려보니 함정이 있었다 — 중앙값 초과 구간은 정의상 방송의 절반이다. 실제로 49~50%가 나왔다. 평균 초과도 29~36%. 이러면 방송의 3분의 1에서 절반이 GPU로 가서 비용 절감이 유명무실해진다.
그래서 게이트를 고정 통계량이 아니라 백분위 노브로 바꿨다. 최종 클립 10~15분에서 역산하면 — 영상·음성 판정에서 탈락할 분량을 1.5~2배수로 감안 — 상위 20~25%가 스위트스팟이다. 실측에서 상위 15~20%가 9.6~12.9분이었으니 딱 들어맞는다.
같은 맥락에서 하한선도 하나 붙였다. 배율 트리거는 분모가 작을 때 착시를 만든다 — 새벽에 채팅이 5초당 1개 오다가 우연히 3명이 동시에 치면 "3배!"가 된다. 그래서 배율 조건에 "최소 세션 중앙값의 0.5~1배 이상"이라는 절대량 조건을 AND로 걸었다. 진짜 반응은 절대량도 같이 오르니까 다 통과하고, 숫자 장난만 걸러진다.
고찰 3: "정확도 100%"라고 쓰면 안 되는 이유
실험 직후엔 "채팅 기반 판별은 100% 정확하다"고 말하고 싶었다. 근데 이 문장은 두 개의 다른 주장을 뭉개고 있다.
- "폭발한 순간을 놓치지 않는다" (recall) — 이건 우리 도메인에서 사실상 참이다. 주장해도 된다.
- "폭발한 게 전부 편집 가치가 있다" (precision) — 이건 거짓이다. 유도된 폭발, 투표, 그리고 결정적으로 방송사고 — 채팅은 제일 크게 터지지만 편집자는 절대 클립하지 않는 순간들이 있다.
그래서 내부 문구를 이렇게 확정했다: "채팅은 recall 게이트다. precision은 편집자 판단과 거짓 양성 KPI가 담당한다." 100%라는 표현은 반례 하나에 무너지지만, 이 분리는 공격할 데가 없다.
고찰 4: 캐스케이드가 만든 선택지 — YOLO를 버리다
여기가 이번 개편에서 제일 마음에 드는 부분이다. 캐스케이드는 비용을 줄였는데, 그 절감분이 새로운 선택지를 열었다.
v3의 영상 분석은 게임별 YOLO 모델이었다. 게임 3종 × 이벤트 5종 × 1,000프레임 = 15,000프레임을 손으로 라벨링하고 게임마다 재학습해야 한다. 게임을 하나 추가할 때마다 이 비용이 반복된다.
VLM(Qwen-VL 계열)은 zero-shot으로 게임 화면을 이해한다. 라벨링이 필요 없고, 신규 게임 추가가 프롬프트 작업 수준이 된다. 문제는 프레임당 추론 비용이 YOLO보다 훨씬 크다는 것 — 그런데 캐스케이드가 분석 분량을 1/4~1/5로 줄여놨다. 전 구간을 분석하는 v3 구조에서는 비용상 불가능했던 VLM이, 캐스케이드 구조에서는 총비용 관점에서 성립한다.
두 결정은 한 세트다. 캐스케이드 없이는 VLM이 비용상 성립하지 않고, VLM 없이는 캐스케이드의 절감분이 품질로 전환되지 않는다.
구조는 이렇게 정리했다:
[베이스 모델: Qwen-VL 1개] ← 모든 게임 공유, 고정
│
[게임별 어댑터 (LoRA*)] ← 성능 미달 게임에만 붙는 보정 레이어 (조건부)
│
[게임별 이벤트 팩] ← 프롬프트·이벤트 정의·사운드 패턴·임계치
*LoRA는 베이스 모델 전체를 재학습하지 않고 작은 저랭크 행렬만 학습해 붙이는 경량 파인튜닝 기법이다. 원본 모델은 고정한 채 게임별 보정만 갈아끼울 수 있다.
지원 게임(LoL·발로란트·오버워치·배그)마다 팩을 만들고, 학습은 조건부다. 대회 풀영상과 공식 하이라이트 편집본을 정렬하면 라벨이 공짜로 나오는데, 이걸 학습 데이터가 아니라 채점표로 먼저 쓴다. zero-shot이 채점표를 통과한 게임은 학습하지 않는다 — 관전 시점인 대회 영상에 과적합하면 1인칭 개인 방송에서 오히려 성능이 떨어질 수 있어서다. 미달한 게임만 어댑터를 붙인다.
배운 것
- 실험 하나가 아키텍처를 바꾼다. 채팅 18,112건 분석에 든 시간은 하루였는데, 그 하루가 병렬 구조를 캐스케이드로 뒤집었다. "주장"과 "실측"의 무게 차이를 체감했다.
- 통계량 선택이 기능이다. 평균이냐 중앙값이냐는 사소해 보이지만, 연속 하이라이트를 잡느냐 놓치느냐를 가른다. 알고리즘보다 기준선이 먼저다.
- 비용 최적화는 절약이 아니라 재투자다. 캐스케이드로 아낀 GPU가 더 좋은 모델(VLM)을 살 수 있게 했다. 최적화의 가치는 아낀 금액이 아니라 열리는 선택지에 있다.
- 단정적인 문장은 분해해서 검증하라. "100% 정확"을 recall과 precision으로 쪼개니, 지킬 수 있는 주장과 관리해야 할 지표가 분리됐다.
다음 글은 아마 Qwen-VL 벤치마크 결과가 될 것 같다. 대회 영상 정렬 데이터셋으로 4종 게임 zero-shot 채점을 돌려보고, 어댑터가 몇 개 필요한지 확인하는 것까지.