본문으로 건너뛰기

[3편] 추론 파라미터 조합 Qwen3-Omni 6초 클립 분석 (최적 구성 확정)

1. 들어가며

SceneMaker 의 6초 클립 분석은 시청각 정보를 {summary, ocr, actions, sounds} 4필드 JSON 으로 안정적으로 생성 하는 것을 목표로 한다. 2편(OFAT 스윕)은 추론 파라미터를 한 번에 하나씩 흔들어, 출력만으로 판정 가능한 순응(adherence) 기준에서 각 축의 단독 효과를 규명했다.

2편이 객관적으로 좁힌 결과는 다음과 같다.

파라미터2편 결론
temperature0.7 확정 (greedy 폭주·1.0 이종문자 동시 회피)
top_p / top_k1.0 / -1 유지 · top_k 10 완주 후보
frequency penalty0~0.5 구간 (완주·반복 개선, 단 sounds 감소)
repetition penalty제외 (이종문자 유발)

OFAT 는 한 축만 본다. 그러나 실제 운영값은 여러 축을 동시에 적용한다. 본 편은 2편이 좁힌 후보들을 조합 해, 단독 효과가 겹칠 때의 거동을 확인하고 최적 구성을 확정한다.

단, 프롬프트와 샘플링을 동시에 바꾸면 효과가 교란 된다. 그래서 한 번에 하나씩, 두 단계로 분리 한다.

  1. 샘플링 조합 : 2편과 같은 프롬프트 를 고정하고 샘플링 파라미터만 조합해 최선 샘플링을 찾는다.
  2. 프롬프트 조합 : 1단계 최선 샘플링 위에 프롬프트를 손봐 최종 구성을 확정한다.

조합 평가는 2편과 동일하게 출력만으로 판정 가능한 축 으로 한다. 완주율·degeneration(이종문자·미완·반복)·커버리지·추론 비용.

2. 실험 설계

2.1. 두 단계 구성

단계고정변동목적
1단계(샘플링 조합)2편 프롬프트 · temp 0.7 · top_p 1.0 · rep off · fps 0.5frequency penalty {0, 0.3, 0.5} × top_k {-1, 10}최선 샘플링 도출
2단계( 프롬프트 조합)1단계 최적 샘플링프롬프트 (구조·개수 한도 등)최종 구성 확정

공통 고정: max_tokens 512 · 오디오 on · 동일 70클립(7장르 × 10) · 4필드 strict 스키마.

2.2. 출력 스키마 (4필드)

응답은 정확히 {summary, ocr, actions, sounds} 필드로 고정한다 (vLLM response_format=json_schema(strict) + pydantic extra="forbid" 이중 강제).

필드정의
summary (string)시각·청각을 종합한 한국어 한 문장 요약
ocr (array)화면 텍스트 (자막·로고)
actions (array)행동·움직임·장면 전환
sounds (array)대사를 제외한 배경음·효과음

2.3. 측정 지표

2편과 동일한 출력 기반 지표로 평가한다.

지표정의
ok / fail스키마 통과 / 실패 레코드 수 (완주율)
infer_ms클립당 추론 시간 (비용·20분 예산)
penalty(repeat + finish_length + foreign + replacement ) ÷ 4
field(summary + ocr + actions + sounds ) ÷ 4

3. 샘플링 조합

3.0. 테스트 데이터 및 실행

표본·프롬프트·준비 절차 모두 2편과 동일 하다. 7장르 × 카테고리당 10클립 = 고정 70클립(make_sample.py 가 원본 mp4 를 재인코딩 없이 symlink 로만 data/sample70/ 에 모은다), 프롬프트는 2편 것을 그대로 쓴다. 6 조합 모두 같은 입력을 본다.

실행은 experiments/03_param_combo/ 에서 bash sweep.sh 3 (6 조합 C1~C6 × 3회차 누적 → N=3) 후 python analyze.py (회차평균 표 집계) 한 줄로 돌린다. sweep_out/ 다음 회차는 자동 누적.

3.1. 조합

2편이 객관적으로 좁힌 값만 교차한다 (frequency 0~0.5 구간, top_k -1/10). frequency penalty 3수준 × top_k 2수준 = 6 조합.

top_k -1top_k 10
freq 0C1 (2편 baseline)C4
freq 0.3C2C5
freq 0.5C3C6

3.2. 결과

6 조합 회차 평균(N=3 · 각 조합 70클립). 2편과 같은 프롬프트·표본에서 freq 가 완주 레버 임을 재현. freq 0→0.3 에서 완주 90.5→99.5%, finish_length 9.5→0.5%. 1단계 최선 = C2 (freq 0.3 · top_k -1) .

조합freqtop_k완주(ok)infer_mspenaltyfield
C10-190.5%27196.2%95.6%
C2 (최선)0.3-199.5%20803.2%93.7%
C30.5-199.0%19362.6%90.6%
C401089.5%26958.0%94.9%
C50.310100%20222.7%93.3%
C60.510100%19662.9%91.8%
📊 회차별 히스토리 (N=3 · 조합별 1·2·3회)
회차조합ok/failinfer_msrepeatfinish_lenforeignpenaltyfield
1C1 (f0·k-1)65/5274320.0%7.1%1.4%7.1%94.6%
2C1 (f0·k-1)64/6252812.9%8.6%0.0%5.4%94.9%
3C1 (f0·k-1)61/9288711.4%12.9%0.0%6.1%97.1%
1C2 (f0.3·k-1)69/1211014.3%1.4%1.4%4.3%93.1%
2C2 (f0.3·k-1)70/021108.6%0.0%1.4%2.5%94.7%
3C2 (f0.3·k-1)70/0202111.4%0.0%0.0%2.9%93.2%
1C3 (f0.5·k-1)69/119865.7%1.4%0.0%1.8%91.0%
2C3 (f0.5·k-1)70/0188911.4%0.0%0.0%2.9%90.0%
3C3 (f0.5·k-1)69/1193211.4%1.4%0.0%3.2%91.0%
1C4 (f0·k10)61/9272118.6%12.9%0.0%7.9%94.2%
2C4 (f0·k10)66/4253915.7%5.7%0.0%5.3%95.5%
3C4 (f0·k10)61/9282527.1%12.9%2.9%10.7%95.1%
1C5 (f0.3·k10)70/0205312.9%0.0%1.4%3.6%93.2%
2C5 (f0.3·k10)70/020757.1%0.0%0.0%1.8%93.2%
3C5 (f0.3·k10)70/0193811.4%0.0%0.0%2.9%93.6%
1C6 (f0.5·k10)70/019298.6%0.0%0.0%2.1%91.0%
2C6 (f0.5·k10)70/0195912.9%0.0%0.0%3.2%93.2%
3C6 (f0.5·k10)70/0200911.4%0.0%1.4%3.2%91.1%

3.3. 분석

1. frequency 가 완주 레버

freq 0→0.3 에서 완주 90.5→99.5%, finish_length 9.5→0.5%, penalty 6.2→3.2%. 2편의 단일축 결론이 같은 프롬프트·표본에서 그대로 확인됐다. top_k 10 단독(C4)은 완주를 못 살린다(89.5%). 완주는 freq 의 몫이다.

2. top_k 는 무승부

freq≥0.3 에서 top_k -1 vs 10 차이(C2 vs C5)는 완주 99.5 vs 100%(1클립)·penalty 뒤섞임·커버리지 동일로 전부 회차 jitter 범위다. 기본값 -1 유지 .

3. 필드 커버리지 유일하게 일관된 trade, 판정 불가

freq 를 올리면 커버리지가 단조 감소한다(95.6→93.7→90.6%, 매 회차 재현). 이 감소가 잉여 제거(좋음)인지 정보 삭제(나쁨)인지는 정답지 없이 가릴 수 없다.

샘플링 조합 결론

완주·penalty 가 포화된 freq≥0.3 구간에서 조합을 가르는 건 필커버리지뿐이고, freq 0.3 이 0.5 보다 일관되게 우세하다. 1단계 최선은 temp 0.7 · frequency 0.3 · top_p 1.0 · top_k -1 · rep off 이며, 이 위에서 다음 프롬프트 조합을 진행한다.

4. 프롬프트 조합

4.0. 데이터 및 실행

1단계 최선 샘플링(temp 0.7 · freq 0.3 · top_p 1.0 · top_k -1 · rep off)을 고정 하고 프롬프트만 조정한다. 데이터·회차는 1단계와 동일(고정 70클립 · N=3). 실행은 bash sweep_p2.sh 3 (두 프롬프트 × 3회차) 후 python analyze_p2.py . 비용은 서버 부하에 흔들리는 infer_ms 외에 생성 토큰 수(completion_tokens) 를 불변 비용축으로 함께 잰다.

두 프롬프트(arm):

  • 망라형 : 1단계와 같은 프롬프트. "정밀하게 분석", 개수 한도 없음.
  • 핵심우선 : "핵심만 압축", 개수 한도(ocr 5 · actions 5 · sounds 3), 조각 결합 규칙, 동사구 강제, 확정 사실만(추측 금지).

4.1. 왜 프롬프트를 건드리는가. 망라형 출력의 구조적 잡음

1단계에서 완주·degeneration·비용은 샘플링 파라미터로 안정화됐다. 그러나 같은 출력의 내용 을 들여다보면, 망라형 프롬프트는 샘플링으로는 못 고치는 잡음을 남긴다.

망라형 결함데이터 근거핵심우선이 거는 규칙
OCR 과다·조각화ocr 평균 5.0항목, 최대 28항목, ≥8항목 20.6%, 조각(빈문자열·단일 숫자 등) 18.0%조각 결합 규칙 + 개수 한도 5
actions 문장화동사구 아닌 문장체 12.9%동사구(1~5단어) 강제 · 문장 금지
약한 중복(padding)한 항목이 다른 항목의 부분문자열인 클립 18.2%핵심만·과감히 생략 + 개수 한도

대표 사례로 한 e스포츠 클립은 ocr 을 28항목까지 긁어 HUD 숫자·경기 시계·KDA 조각(GEN , 1 , 25.7K , 4:53 , 4:52 , 4:51 …)을 통째로 나열했다. 이는 샘플링 축(완주·degen)이 아니라 프롬프트 차원의 문제 다. → 핵심우선 프롬프트가 이 잡음을 억제하는지 동일 샘플링(C2) 위에서 검증한다.

4.2. 결과

동일 샘플링 C2 고정, 프롬프트만 변인 (N=3 평균 · arm별 70클립). 완주는 동률, 비용·반복잡음은 핵심우선이 우위, 필드 커버리지는 설계상 좁아진다.

arm완주율penalty생성토큰infer_ms필드 커버리지
망라형99.5%3.7%141205893.8%
핵심우선 (최종)100%0.8%103166282.1%

degeneration 상세 분석, penalty 를 가르는 건 거의 repeat 한 축이다.

armrepeatfinish_lengthforeign
망라형13.3%0.5%1.0%
핵심우선1.4%0.0%1.9%

필드별 커버리지, 핵심 우선의 개수 한도·"의심시 비움"이 만든 by-design 차이.

armocractionssounds
망라형89.5%99.5%86.1%
핵심우선65.7%100%62.9%
📊 회차별 히스토리 (N=3 · arm별 1·2·3회)
회차arm완주(ok/fail)penalty생성토큰infer_ms커버리지
1망라형100% (70/0)5.00%135192294.30%
2망라형100% (70/0)2.90%141208093.20%
3망라형98.6% (69/1)3.20%147217193.80%
1핵심우선100% (70/0)0.40%102165582.20%
2핵심우선100% (70/0)1.40%105168882.50%
3핵심우선100% (70/0)0.70%103164281.80%

4.3. 분석

1. 완주는 동률

망라형 99.5% vs 핵심우선 100%, 1클립 차이로 jitter 범위다. 1단계에서 freq 0.3 이 이미 완주를 포화시켜, 프롬프트로는 더 가를 게 없다. 완주는 변별축이 아니다.

2. 비용은 핵심우선이 싸다

생성 토큰 141→103 (-27%), infer_ms 2058→1662 (-19%). "핵심만·개수 한도"가 출력 길이를 직접 줄인 결과로, 20분/영상 예산에 곧바로 유리하다. 비용이야말로 두 프롬프트의 실질 변별축이다.

3. degeneration 도 핵심우선 우위, 커버리지를 깎아서가 아니다

penalty 3.7→0.8%. 분해하면 거의 전부 repeat 한 축이며(13.3→1.4%), 회차별로도 일관(망라형 5.0/2.9/3.2 vs 핵심우선 0.4/1.4/0.7). 핵심우선의 이득은 정보를 덜 써서가 아니라 같은 말 반복·과다나열을 억제 한 데서 나온다.

5. 결론

5.1. 최적 구성 확정

두 단계를 종합한 6초 클립 분석 최종 구성:

항목
temperature0.7
frequency penalty0.3
top_p1.0
top_k-1 (비활성)
repetition penaltyoff (1.0)
프롬프트핵심우선 (개수 한도 · 조각 결합 규칙 · 동사구 · 확정 사실)
공통fps 0.5 · max_tokens 512 · 오디오 on · 4필드 strict 스키마

5.2. 종합

  • 1단계 : frequency 가 완주 레버다(2편 OFAT 재현). top_k 는 무승부, freq≥0.3 에서 완주·degen 이 포화. 최선 샘플링 = C2.
  • 2단계 : 같은 샘플링에서 핵심우선 프롬프트가 비용(생성토큰 -27%)과 반복 잡음(repeat 13→1%)을 동시에 낮추고 완주는 동률. 커버리지만 설계상 좁아진다.
  • 20분/영상 예산 : 핵심우선의 토큰 -27% 가 예산 여유를 직접 키운다(동시성·fps 상향 여력).

5.3. 한계와 남은 과제

  • C2 샘플링은 망라형 기준 최적이라, 핵심우선 자체의 샘플링 최적과 다를 수 있다. 2단계는 프롬프트 효과만 분리하려고 샘플링을 의도적으로 고정했다.
  • 좁아진 커버리지가 잉여 제거인지 정보 누락인지는 출력 측정만으로는 단정할 수 없다. 이 고리는 사람 품질 검증(§6)으로 닫는다.

6. 사람 품질 검증 (최종 구성)

최종 구성(핵심우선 프롬프트 + C2 샘플링) 출력을 사람이 직접 채점했다. §3·§4 의 출력 측정만으로는 못 닫은 고리, 좁아진 커버리지가 잉여 제거인지 정보 누락인지 — 를 사람 판단으로 확인한다. 대상은 1·2단계의 70클립 표본과 별개인 더 넓은 세트로, 6 카테고리 × 100클립 = 600클립. 필드별 -2~2 5점 척도로 매겼다.

점수의미
2정확 (거의 다 맞음)
1유사 (얼추 맞음 / 일부 누락)
0빈약 (핵심 정보 없음 / 거의 미출력)
-1오정보 (실제와 다른 내용 출력)
-2환각 (완전 오류 / 미존재 정보 출력)

6.1. 카테고리별 평균

점수는 -2~2 척도. 맨 오른쪽 열·맨 아래 행은 0~1 로 정규화한 값((원점수+2)÷4).

카테고리summaryocrsoundaction종합(0~1)
야구1.701.761.371.730.91
다큐1.671.941.121.750.91
드라마1.471.871.451.690.91
예능1.741.651.681.810.93
사극 드라마1.781.831.821.920.96
뉴스1.822.001.931.970.98
필드 종합(0~1)0.920.960.890.950.93

6.2. 점수 분포

점수summaryocrsoundaction평균
2 (정확)81.3%87.2%79.8%89.8%84.5%
1 (유사)12.8%11.5%9.2%5.8%9.8%
0 (빈약)0.8%0.2%1.3%0.5%0.7%
-1 (오정보)4.2%0.7%6.7%3.3%3.7%
-2 (환각)0.8%0.5%3.0%0.5%1.2%

6.3. 결론

  • 전체 정규화 품질 0.93 . 2점 비율 84.5% , 부정(-1·-2) 합계 4.9% .
  • 핵심우선의 좁은 출력은 사람 기준 고품질 이다. 커버리지 축소는 대체로 잉여 제거 이며 정보 누락이 아니다(오정보·환각 비율이 5% 미만). 출력 측정만으로 못 가렸던 고리가 여기서 닫힌다.
  • 필드별로는 ocr 가장 높고(0.96), sound 가장 낮다(0.89 · 부정 9.7%).비-발화 청각이 상대적 약점. 장르는 뉴스·사극이 최고(0.98·0.96), 드라마가 최저(0.91)다.