2時間のYoutube音声を自動で要約 ~ NVIDIAのCOMPUTEX 2023基調講演
先日のNVIDIAのCOMPUTEX 2023でのジェンスン・ファンさんの基調講演を題材に、Youtube音声の要約課題に再トライしてみました。
音声をダウンロード
トータル時間:1時間55分57秒
実行時間:2秒
!yt-dlp -x --audio-format mp3 https://youtu.be/i-wpzS9ZsCs -o nvidia2023.mp3
文字起こし時に長いと、なぜか止まってしまうので適当な時間に分割します。
実行時間:1秒
!ffmpeg -i nvidia2023.mp3 -f segment -segment_time 20:00 -c copy out-%02d.mp3
Faster-Whisperで文字起こし
分割した音声ファイルから、そのまま文字起こしを行いました。
実行時間:約11分
from faster_whisper import WhisperModel
model_size = "large-v2"
model = WhisperModel(model_size, device="cuda", compute_type="float16")
for i in range(6):
segments, info = model.transcribe(f"out-{i:02}.mp3", language="en", vad_filter=True, beam_size=5)
with open(f"out-{i:02}.txt", "w") as f:
for segment in segments:
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
print(segment.text ,file=f)
分割範囲ごとにサマライズして連結
実行時間:約1分
import os
os.environ["OPENAI_API_KEY"] = "your OPENAI_API_KEY"
from langchain.chat_models import ChatOpenAI
from langchain.text_splitter import CharacterTextSplitter
from langchain.docstore.document import Document
from langchain.chains.summarize import load_summarize_chain
llm = ChatOpenAI()
text_splitter = CharacterTextSplitter()
chain = load_summarize_chain(llm, chain_type="map_reduce")
summary = ""
for i in range(6):
with open(f"out-{i:02}.txt", "r", encoding="utf8") as out:
text= out.read()
texts = text_splitter.split_text(text)
docs = [Document(page_content=t) for t in texts]
summary += chain.run(docs)
ChatGPTで整形および日本語訳
実行時間:約1分
高価なGPT-4はAPIでなくChatGPTから利用します。😅
"日本語で要点を説明して: " + summary
出力結果:
まとめ
特段工夫していない(かなり乱暴な)処理をしたわりには、先日、実際にYoutubeで1.5倍速で1時間半かけて見た基調講演の要点は大体おさえられている気がしました。
あえて新製品に驚きたいときなど特別な場合をのぞけば、日本語サマリーにさっと目を通した後で、たとえば今回でいうとACE(Nvidia Avatar Cloud Engine for Games)のデモとか、DGX GH200のモジュールを手に取って、にんまりするファンさんとか、そのあたりを動画で堪能すれば時間を有効に使えそうです。
2時間弱の音声から、所要時間、15分程度で日本語サマリーを出力できるフローができて満足です。😊
おしまい。
この記事が気に入ったらサポートをしてみませんか?