
動画から議事録を自動生成するシステムを実装してみた──Whisper AIで見えた「本当の価値」と「落とし穴」
はじめに
こんにちは、DIVXの阿部です。
議事録作成は、従来の手作業で時間がかかるプロセスですが、音声認識AIを活用することで自動化できます。
この記事では、**OpenAI Whisper**をベースにした議事録自動生成システムを構築した経験と、実際に使ってみて分かった「使えるポイント」と「注意すべき落とし穴」について共有します。
最小限のセットアップ(ローカル環境で準備)
Whisperを使い始めるのに必要な準備は、驚くほどシンプルです。
Whisperのインストール
まず、仮想環境を作成してWhisperをインストールします。
基本的な使い方
python3 -m venv .venv
source .venv/bin/activate # Windowsの場合は .venv\Scripts\activate
pip install whisperWhisperの基本的な使い方は、以下のように非常にシンプルです。
import whisper
model = whisper.load_model("base")
result = model.transcribe("audio.mp3")これだけで、音声ファイルから文字起こしが可能です。言語指定はオプションで、自動検出も利用できます。
システムの基本的な構成
今回実装したシステムは、以下のような構成になっています。
各コンポーネントの役割
1. Web UI: ファイルのアップロードと結果の表示を行うインターフェース
2. Flask API: ファイルの受け取り、Whisperの呼び出し、後処理を統括
3. Whisper: OpenAIが開発した音声認識エンジン(オープンソースとして提供、ライセンス下で利用可能)
4. 後処理: タイムスタンプの整形、専門用語の置換など
実装の詳細
基本的な実装の流れ
Whisperを使った実装は、以下の3ステップで完了します。
コード例(最小限)
1. 音声認識の実行
import whisper
model = whisper.load_model("base")
result = model.transcribe(filepath, language='ja')2. タイムスタンプの整形
from datetime import timedelta
def format_timestamp(seconds):
"""秒数を時:分:秒形式に変換"""
td = timedelta(seconds=int(seconds))
hours, remainder = divmod(td.seconds, 3600)
minutes, seconds = divmod(remainder, 60)
return f"{hours:02d}:{minutes:02d}:{seconds:02d}"3. 専門用語の自動置換
TECHNICAL_TERMS = {
'クーベネティス': 'Kubernetes',
'エーピーアイ': 'API',
'エーピーアイゲートウェイ': 'API Gateway',
}
def replace_technical_terms(text):
"""専門用語を辞書に基づいて置換"""
for key, value in TECHNICAL_TERMS.items():
text = text.replace(key, value)
return text今回はプロトタイプとして、分かりやすさを優先し、辞書をコードにベタ書きしています。
一方で、サービス運用を前提にする場合は、辞書をコードにベタ書きするのではなく、CSV/スプレッドシートやDBで管理し、更新を運用フローに乗せるのが現実的です。用語の表記揺れや同義語も増えるため、更新頻度や責任範囲を決めて「辞書を育てる」設計が重要になります。
ローカル環境で動作確認してみる
サーバー起動
docker-compose upブラウザで http://localhost:5001 にアクセスすると、以下のようなUIが表示されます(ポート番号は設定によって異なる場合がありますので、事前に確認してください)。
ファイルをドラッグ&ドロップするか、クリックしてファイルを選択すると、対応する音声ファイル形式(例:.wav, .mp3など)の場合に自動的に音声認識が開始されます。
実際の処理結果
4分程度の会議音声ファイルを処理した結果、以下のような議事録が生成されました。
処理時間: 約2分18秒
ファイル形式: WAV
生成された議事録の一部(誤認識も含まれる例):
[00:00:00 - 00:00:04] 票は鈴木さんが 研修のため不財です
[00:00:04 - 00:00:06] それ以外の皆さんはそろっているので
[00:00:06 - 00:00:10] 今週の集事定例新直会を 始めていきましょう
[00:00:10 - 00:00:16] それぞれ新直の報告をお願いします まず高橋さんからお願いしますタイムスタンプ付きで文字起こしが生成され、後から確認しやすい形式になっています。
実際に使ってみて分かった「落とし穴」
落とし穴1: 音声ファイルの形式問題
問題: 対応していない形式の音声ファイルをそのまま渡すと、音声形式やサンプリングレートの不一致によりエラーが発生することがある。
対策: まずは「対応形式を明示し、非対応ファイルは受け付けない」という設計に寄せるのが現実的です。必要であれば、特定の形式(例:モノラル/16kHz)に統一する前処理を追加することで、対応範囲を広げられます。
落とし穴2: 処理時間の見積もり
問題: 一般的なCPU環境では、モデルサイズや音声品質、ハードウェア構成によって処理時間が大きく変動する。条件によってはリアルタイムの2〜5倍程度かかることがある。
対策: モデルサイズを調整することで、精度と速度のバランスを取れます。
tiny: 処理は速いが精度は低めbase: 精度と速度のバランスが良い(今回採用)large: 高精度だが処理が重い
落とし穴3: 専門用語の誤認識
問題: 技術用語や社内用語が正しく認識されない。例えば「Kubernetes」がカタカナ表記になったり、「API Gateway」が全角カタカナになることがある。
対策: 一方で、サービス運用を前提にする場合は、辞書をコードにベタ書きするのではなく、CSV/スプレッドシートやDBで管理し、更新を運用フローに乗せるのが現実的です。用語の表記揺れや同義語も増えるため、更新頻度や責任範囲を決めて「辞書を育てる」設計が重要になります。1つ具体例を挙げると文字起こしログから誤認識候補を抽出し、AIで置換候補を提示し、人が承認して反映する半自動フローにすると、安全性と効率のバランスが取りやすいのではと考えています。
学んだこと:AIは「完璧な自動化」ではなく「効率化のツール」
この取り組みを通じて、最も大きな学びは**「AIに100%任せることはできない(その必要もない)」**ということです。
人間が関与すべきポイント
1. 文脈の補完: AIは「何について話しているか」を理解できない
2. 重要度の判断: どの発言が重要で、何を記録すべきかはAIには分からない
3. 最終チェック: 誤認識や不自然な表現は、やはり人の目で確認が必要
AIの得意なこと、人間の得意なこと
AIが得意: 大量の音声を素早くテキスト化する、繰り返しの作業
人間が得意: 文脈を理解する、重要な情報を抽出する、読みやすく整形する
この役割分担を意識することで、**議事録作成の時間を約70%削減することができました**。完全に自動化するのではなく、「叩き台を作ってくれる優秀なアシスタント」として使うことが、最も効果的でした。
まとめ
Whisperを使った議事録自動生成システムの実装を通じて、以下のことが分かりました。
Whisperは強力: オープンソースでありながら、商用ツールに匹敵する精度
後処理が重要: 生の出力をそのまま使うのではなく、整形処理で使いやすさが大幅に向上
完璧を求めすぎない: 100%の自動化を目指すのではなく、「叩き台を作るツール」として使うのが現実的
Whisperは、議事録作成を驚くほど簡単にしてくれます。 ローカル環境でサクッと試せるので、ぜひ一度触ってみてください。
ただし、生成された議事録は、必ず人間による確認と修正が必要です。AIの得意なことは任せ、人間にしかできないことは人間がやる。この協働のバランスを見つけることが、真の「AI活用」なのかもしれません。
今後の展望
今回実装したシステムは、基本的な文字起こし機能の一例に過ぎません。Whisperには、さらに多くの可能性があります。
実務での展望
1. 話者識別機能の追加
Whisperは音声認識に特化したモデルであり、話者識別機能は標準では提供されていませんが、pyannote.audioなどのライブラリを組み合わせることで、話者識別を実現できます。
2. 議事録の構造化
現在は時系列の文字起こしのみですが、以下のような構造化も可能です:
議題ごとの分類
決定事項の抽出
アクションアイテムの自動抽出
3. リアルタイム処理
現在はファイルをアップロードしてから処理しますが、WebSocketを使うことでリアルタイムでの文字起こしも可能です。実現するには、音声データのストリーミングと遅延制御が必要になります。
今回の取り組みを通じて、私たちは「AIをどう使うか」ではなく「AIとどう協働するか」を考えることの重要性を学びました。これは、AIカンパニーとして、今後も様々なプロジェクトで活かしていきたい知見です。


