📹
「字幕だけで動画を意味分割する:Embedding × 多次元Otsu法によるチャンク化設計」
字幕だけで動画を意味分割する — 多次元Otsu法によるシーンチャンク化アルゴリズム
🎯 Goal
字幕テキストだけを使って、動画の「意味の切れ目」で自動的にチャンク化(シーン分割)するアルゴリズムを、理論と設計の観点から解説します。
映像や音声解析は一切使わず、Embedding × 多次元Otsu法 × 再帰分割 のシンプルな設計で、意味的まとまりを検出します。
TL;DR
- 字幕ごとに埋め込み(Embedding)を生成
- 系列に対して 多次元Otsu法 を再帰的に適用
- 前後の平均ベクトルの距離が最大になる点を分割点とする
- チャンクの合計トークン数が
max_tokens以下になるまで再帰分割 - トークン数は累積和で管理し、区間合計を O(1) で取得
問題設定
| 項目 | 内容 |
|---|---|
| 入力 | SRT形式の字幕(インデックス、時刻、テキスト) |
| 出力 | 意味が連続するとみなせる字幕群(開始・終了時刻+結合テキスト) |
| 制約 | 映像・音響特徴は使用せず、テキストの意味変化のみで境界を検出 |
全体フロー
コアアイデア
- 各字幕テキストを高次元ベクトル(Embedding)に変換
- ベクトル列を時間順に並べ、任意の分割点で「前後の平均ベクトル差」を評価
- 差が最大になる位置を分割点とし、再帰的に分割を続ける
- 各区間の合計トークン数が
max_tokens以下になったら停止
アルゴリズム詳細
1. 字幕パース
SRTをブロック単位で処理し、以下を抽出します。
- 開始時刻
- テキスト
終了時刻は、そのシーンに含まれる最後の字幕の開始時刻を用います。
これは実装上の簡便化であり、実用上も十分機能します。
2. Embedding生成
各字幕を埋め込みモデル(例: text-embedding-3-small)でベクトル化します。
同時にトークン数も計測しておきます。
このトークン数は、再帰停止条件で利用します。
3. ベクトル正規化(L2)
ベクトル間の距離尺度を安定化させるため、各埋め込みを L2正規化 します。
4. 分割点の探索 — 多次元Otsu法
ベクトル列
に対して、分割候補
を全探索します。
目的関数(クラス間分散に相当)を次のように定義します。
💡 1次元Otsu法の多次元版
輝度ヒストグラムではなく、ベクトル分布の「意味的変化点」を最大化する方向で応用しています。
5. 再帰分割
任意の区間
6. 停止条件(max_tokens)
- 字幕ごとのトークン数の 累積和 を事前に計算
- 区間
の合計トークン数を[s, e] で算出O(1) - 合計が
max_tokens以下ならシーン確定、再帰を終了
単一字幕の場合も当然分割せず確定します。
7. 出力再構成
確定した各シーンについて:
- 開始時刻 = 最初の字幕の開始時刻
- 終了時刻 = 最後の字幕の開始時刻
- テキスト = 含まれる字幕の連結
としてSRT形式に再構成できます。
設計上のキーポイント
| 項目 | ポイント |
|---|---|
| ベクトル正規化 | L2正規化で距離評価の安定化 |
| トークン管理 | 累積和でO(1)区間取得 |
| 分割点探索 | 全探索でOK(頑健かつ読みやすい) |
| 停止条件 | 意味差ではなく max_tokens 一本化で安定化 |
計算量とパラメータ設計
| 要素 | 説明 |
|---|---|
| 計算量 | 平均再計算を素直に行う場合、1区間あたり |
| 主要パラメータ |
max_tokens: 下流(要約・生成)に適したチャンク長に設定 |
| 埋め込みモデル | コスト・品質・速度のバランスで選定(text-embedding-3-small など) |
まとめ
この手法は、字幕テキストのみで意味的な区切りを抽出するシンプルなアプローチです。
- 多次元Otsu法で「意味の変化点」を定量化
- 再帰分割とトークン上限で「自然な文脈単位」に整形
- 映像・音声なしでも チャプター化・要約前処理 に活用可能
📘 一文で言うなら:
「Embedding系列を多次元Otsu法で切ると、字幕だけで“意味的チャンク”が取れる。」
次の展開(応用例)
- 生成AIの RAGチャンク化前処理
- 自動 動画チャプター生成
- 字幕付き講義動画の 要約単位抽出
Discussion