쌓이지 않는 데이터
제 숏츠 파이프라인은 영상마다 성과를 보상 신호로 받습니다. 처음 설계는 단순했습니다. 앱별로 어떤 영상이 잘 됐는지 보고, 그 앱의 다음 영상에 반영한다.
문제는 이 신호를 앱 단위로 나누는 순간 생겼습니다. 앱이 여러 개라서 앱 하나에 돌아가는 영상은 적고, 그중 분석 데이터까지 붙은 영상은 더 적습니다. 앱별 표가 판단을 내릴 만큼 차려면 한참 기다려야 했습니다. 신호 자체가 없었던 건 아닙니다. 앱 수만큼 잘게 쪼개 놓아서 어느 칸도 의미 있는 크기가 되지 못했던 겁니다.
당신의 시스템도 학습 단위를 너무 잘게 잡아서, 칸마다 데이터가 몇 개씩밖에 없는 상태로 굴러가고 있지 않나요?
앱별로 보는 건 직관적이라 의심을 안 했습니다. 앱마다 사용자도, 소재도 다르니 따로 배우는 게 맞다고 생각했습니다. 하지만 데이터가 쌓이는 속도가 학습 단위를 따라오지 못하면, 그 단위가 맞든 틀리든 결론은 늦게 나옵니다.
앱을 지우고 남는 것
그래서 질문을 바꿨습니다. 이 앱에서 뭐가 먹히는지가 아니라, 어떤 앱이든 상관없이 뭐가 먹히는지를 물으면 데이터를 전부 쓸 수 있습니다.
그러려면 앱과 무관한 속성이 필요했습니다. 지금 쓰는 축은 두 가지입니다.
- 훅 길이 구간
- 훅이 한 줄인지 여러 줄인지
앱이 뭐든 모든 영상에는 이 두 속성이 있습니다. 같은 보상 신호를 앱이 아니라 이 속성 기준으로 모으면, 모든 앱의 영상이 같은 표에 들어갑니다. 앱별 표는 텅 비어 있어도 속성별 표는 훨씬 빨리 찹니다.
당신이라면? 앱별 데이터가 찰 때까지 기다리겠습니까, 아니면 앱을 구분하지 않는 대신 정밀도를 조금 포기하겠습니까?
바꾼 것
dna_perf.py라는 모듈을 새로 만들었습니다. 하는 일은 셋입니다.
- 기존 보상 신호를 위의 두 속성 기준으로 앱을 가로질러 묶습니다.
- 결과를
hook/dna_hints.json에 씁니다. - 게시 전 검토 단계의 프롬프트에 이 힌트를 넣습니다.
여기서 신경 쓴 건 스스로 켜지는 조건입니다. 분석 데이터가 있는 영상이 8개가 되기 전까지는 아무것도 하지 않습니다. 8개를 넘으면 그때부터 자동으로 동작합니다. 제가 따로 켤 필요가 없습니다. 데이터가 얼마 없을 때 나온 힌트가 프롬프트에 섞여 들어가는 것보다 아무 힌트도 없는 편이 낫다고 판단했습니다.
변경은 새 모듈 119줄, 테스트 46줄, 그리고 기존 스케줄러와 검토 코드에 몇 줄 연결한 정도입니다. 큰 작업은 아니었습니다. 시간이 걸린 건 코드가 아니라 앱별로 나눠야 한다는 전제를 의심하는 일이었습니다.
자가진단 체크리스트
- 학습 단위(앱, 카테고리, 사용자군)마다 실제로 데이터가 몇 개씩 쌓여 있는지 세어 본 적이 있습니까?
- 그 단위를 지워도 성립하는 공통 속성이 데이터에 있습니까?
- 표본이 적을 때 학습 결과가 하위 단계에 흘러가지 않도록 막는 문턱이 코드에 있습니까?
솔직한 부분
이 글을 쓰는 시점에서 저는 이 묶음이 실제로 더 나은 영상을 만들었는지 모릅니다. 커밋은 더 빨리 쓸 만한 신호를 얻는다는 의도를 적었을 뿐, 결과를 측정한 기록은 아닙니다. 8이라는 문턱도 통계적으로 계산한 값이 아니라 아무것도 없는 것보다는 낫겠다는 판단에 가깝습니다. 앱을 가로질러 묶는다는 건 훅 길이의 효과가 앱마다 비슷하다고 가정하는 것인데, 그 가정이 맞는지도 아직 확인하지 못했습니다. 그리고 두 속성만으로 창작의 무엇을 얼마나 설명할 수 있을지도 모르겠습니다. 데이터가 적다는 문제를 푼 게 아니라, 적은 데이터를 조금 덜 낭비하게 만든 정도입니다.