Mova 데이터 품질 스프린트 — 감정분석 백필부터 가중 평점까지
오전에 GPU 추천 경로를 복구한 데 이어, 오후에는 밀려 있던 데이터 품질 백로그를 연쇄적으로 정리했다. 하나가 풀리면 다음이 열리는 구조라 순서가 중요했다.
리뷰 감정분석 — 처음으로 실데이터 위에서
8/31에 배포한 감정분석 통합(자동 별점·감정 요약·신뢰도 태그)은 사실 빈 데이터 위에서 돌고 있었다 — 프로덕션 리뷰 166건 중 감정 라벨 0건. 분석 파이프라인이 GPU를 요구하는데 실행할 곳이 없었기 때문이다.
- Echo 어댑터 재학습: NSMC 2,000건 QLoRA — val acc 87.0%, f1 0.865 (구 노트북 기준선 87.75%와 동등)
- 배치 백필: 어댑터 설계는 호출마다 모델을 새로 올리지만(VRAM 예산 정책), 일회성 백필은 모델을 한 번만 올려 167건을 순회하는 배치로 처리
- 결과: 감정 167건(긍정 165/부정 2 — 에디터 리뷰가 홍보성 뉴스 요약이라 긍정 편중은 실제 분포), 자동 별점 161건, 영화 평균 평점 재계산 161편
혼합 톤(“재미있지만 너무 단순한 내용임”)은 확신도 0.64로 낮게, 소송 소식 같은 비리뷰성 본문은 부정으로 — 표본 검증에서 판정이 결대로 나왔다.
공개 터널 잠금
재구축한 lora.suvisdev.cloud가 무인증 공개 상태(2026-08-05부터의 백로그)였다. 토큰 인증(X-LoRA-Token)을 서버·EC2 양쪽에 활성화하면서, compose에 LORA_SERVER_TOKEN 매핑이 없으면 .env에 넣어도 컨테이너에 전달되지 않는 함정(8/5의 LORA_SERVER_URL 사고와 동일 구조)을 선제 차단했다. 무토큰 401, EC2 인증 통과 200 실측.
purge v2 → 컬렉션 v3
8/18부터 이월된 큐레이션 확장의 선행 조건이 “KR 성인 잔여 정리”였다. 읽기 전용 사전 분석으로 후보를 뽑아 확인받고 9편만 정밀 삭제(정식 상업영화 오폭 방지 — 비밀애 보존). 흥미롭게도 8/18에 관찰된 노이즈 대부분은 8/25 대규모 정비에서 이미 사라져 있었다.
이어서 컬렉션 3종 신규: 한국 영화의 힘(기생충·살인의 추억 등 10편), 애니메이션 걸작선(주토피아·너의 이름은. 등 6편), 호러 클래식 (싸이코·샤이닝 등 6편). 후보 선정은 rating 단독이 아니라 픽 인터랙션 존재 + 수동 검수로 노이즈를 걸렀다.
TMDB 키워드 → 한국어 태그 3,295개
채팅 태그 매칭이 label ILIKE %한국어%라서 TMDB 영어 키워드를 그대로 넣으면 검색에 안 걸린다. 선별 EN→KO 매핑 사전 164 엔트리(좀비· 타임루프·법정·요리·재난… — 교사 데이터셋 스킵 49건의 주제 실측 기반)로 변환해 적재했다. 1,848편(카탈로그의 54%)이 키워드 태그를 얻었다.
실효 검증: “요리 소재 영화 추천해줘” → 식객·카모메 식당. 다만 “좀비”는 여전히 0건이었는데, 태그 문제가 아니라 RAG 시맨틱 히트가 있으면 태그 검색을 아예 안 타는 후보 조립 구조 때문임을 트레이스로 규명 — 합집합 방식의 수정 방향을 백로그에 남겼다.
rating=5.0 노이즈, 근본 수술
“1명이 10점 → rating 5.0”이 평점순 정렬 상단을 점령하는 문제를 매번 수동 검수로 우회해 왔다. 이번에 근본 처치:
movies.vote_count컬럼 신설 + TMDB 인입 체인 배선- 베이지안 가중 평점
(v·R + m·C)/(v+m)(m=50, C=3.0) — 투표가 적으면 중립으로 수렴 - rating 단독 내림차순 정렬 4곳(영화탭·채팅 후보·에디터 리뷰 대상·검색) 전부 교체, 표시 평점은 원본 유지
백필로 기생충 21,210표·부산행 8,660표 등이 채워지면서, 이제 무명작 5.0이 명작들을 밀어내지 못한다.
덤 — 배포의 현실
EC2(30GB 디스크)는 torch 이미지 두 벌이 공존을 못 해 재빌드가 ENOSPC로 실패했다. docker cp 임시 반영 + 재시작으로 우회했지만, 이미지 슬림화가 언젠가는 필요하다는 걸 다시 확인한 하루였다.