LangChainとPythonでYouTube動画の字幕を取得・解析する方法

PRについて
※このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。
スポンサーリンク
※このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。
LangChainとPythonでYouTube動画の字幕を取得・解析する方法 Tips集
LangChainとPythonでYouTube動画の字幕を取得・解析する方法
Pythonプログラミング逆引き大全

YouTube動画の字幕データを取得し、それをLangChainを用いて加工・解析することで、動画の要約や特定の質問への回答を自動化できます。

本記事では、字幕データの取得方法からLangChainを使った応用例まで、詳しく解説します。

ごまこ
ごまこ

AI技術が発達してPythonで本当にたくさんなことができるようになりました!
Youtubeの音声の情報から分析や要約をしてみたいんですが可能ですか?

ごまお
ごまお

それなら「youtube-transcript-api」を用いて音声字幕を取得して「LangChain」を用いて加工・解析するの良いですよ!
ただし、Youtubeの動画から取得した字幕情報の権利を侵害しないように2次利用には細心の注意を払ってくださいね!

YouTubeの字幕データを取得する方法

字幕データを取得するためには、Pythonライブラリ「youtube-transcript-api」を使用します。

このライブラリを使うことで、YouTube動画から簡単に字幕情報を取得可能です。

1. YouTubeの動画IDを取得する

YouTube動画には、固有の「動画ID」が割り振られています。

動画IDは、動画URLの v= パラメータ部分に記載されています。

URL:

https://www.youtube.com/watch?v=dQw4w9WgXcQ

動画ID:

dQw4w9WgXcQ

2. 字幕データを取得する

youtube-transcript-apiをインストールし、動画IDから字幕データを取得します。

ライブラリのインストール

以下のコマンドを実行してインストールします:

pip install youtube-transcript-api

字幕データの取得

以下のコードで、字幕データを取得できます:

from youtube_transcript_api import YouTubeTranscriptApi

def get_youtube_transcript(video_id):
    try:
        # 字幕データを取得
        transcript = YouTubeTranscriptApi.get_transcript(video_id)
        # タイムスタンプ付き字幕を結合して一つのテキストに
        full_transcript = " ".join([entry['text'] for entry in transcript])
        return full_transcript
    except Exception as e:
        return f"エラー: {str(e)}"

# 動画IDを指定
video_id = "dQw4w9WgXcQ"
transcript = get_youtube_transcript(video_id)
print(transcript)

字幕データの形式

youtube-transcript-apiが返す字幕データはJSON形式で、以下のような構造になっています:

[
  {"text": "Hello, world!", "start": 0.0, "duration": 2.0},
  {"text": "This is a test.", "start": 2.0, "duration": 2.5}
]
  • text: 字幕の内容
  • start: 字幕が表示される開始時間(秒単位)
  • duration: 字幕が表示される時間の長さ(秒単位)

3. 字幕取得時の注意点

字幕がない動画の場合

字幕が有効になっていない動画では、字幕データを取得できません。

この場合、以下のエラーが発生します:

TranscriptsDisabled: The requested video does not have any transcripts available.

対応言語の制限

動画によっては、字幕が特定の言語でしか利用できない場合があります。

利用可能な言語を確認するには以下のコードを使用します:

from youtube_transcript_api import YouTubeTranscriptApi

transcript_list = YouTubeTranscriptApi.list_transcripts("dQw4w9WgXcQ")
print(transcript_list)

LangChainを使った字幕データの解析

LangChainは、大規模言語モデル(LLM)を活用して、字幕データを加工・解析するための強力なフレームワークです。

字幕を要約したり、質問応答を行う処理を簡単に実装できます。

1. LangChainの基本構造

PromptTemplate

LLMへの指示文(プロンプト)をテンプレートとして管理します。

from langchain.prompts import PromptTemplate

prompt_template = PromptTemplate(
    input_variables=["text"],
    template="以下の字幕データを簡潔に要約してください:\n\n{text}"
)

LLM(Large Language Model)

LangChainは、OpenAIのGPTモデル(例: GPT-3やGPT-4)と連携できます。

from langchain.llms import OpenAI

llm = OpenAI(model_name="text-davinci-003")

Chain

字幕データから要約や質問応答を行う一連の処理をチェーンとして定義します。

from langchain.chains import LLMChain

chain = LLMChain(llm=llm, prompt=prompt_template)

2. 字幕データの要約

字幕データを簡潔に要約するプロセスを以下のコードで実装できます:

def summarize_transcript(transcript: str):
    """
    字幕データをLangChainで要約する関数
    """
    # プロンプト設定
    prompt_template = PromptTemplate(
        input_variables=["text"],
        template="以下の字幕データを簡潔に要約してください。\n\n{text}"
    )
    # モデルとチェーンの設定
    llm = OpenAI(model_name="text-davinci-003")
    chain = LLMChain(llm=llm, prompt=prompt_template)
    # 要約実行
    return chain.run(text=transcript)

実行例

summary = summarize_transcript(transcript)
print("=== 要約結果 ===")
print(summary)

3. 字幕データから質問応答

字幕を元に特定の質問に答える処理を実装する例です:

def answer_question_about_transcript(transcript: str, question: str):
    """
    字幕データを元に質問に回答する関数
    """
    # プロンプト設定
    prompt_template = PromptTemplate(
        input_variables=["text", "question"],
        template=(
            "以下は動画の字幕データです。\n\n{text}\n\n"
            "この内容に基づいて、次の質問に答えてください:\n{question}"
        )
    )
    # モデルとチェーンの設定
    llm = OpenAI(model_name="text-davinci-003")
    chain = LLMChain(llm=llm, prompt=prompt_template)
    return chain.run(text=transcript, question=question)

実行例

question = "この動画の内容を簡単に説明してください。"
answer = answer_question_about_transcript(transcript, question)
print("=== 質問への回答 ===")
print(answer)

応用例

キーワード抽出

字幕データから重要なキーワードを抽出します。

prompt_template = PromptTemplate(
    input_variables=["text"],
    template="以下の字幕データから重要なキーワードを抽出してください:\n\n{text}"
)

カテゴリ分類

字幕データを解析し、動画がどのカテゴリに属するかを分類します。

prompt_template = PromptTemplate(
    input_variables=["text"],
    template="以下の字幕データに基づいて、この動画がどのカテゴリに属するか判断してください:\n\n{text}"
)

要約付きレポート生成

字幕データを元に、詳細なレポートを生成します。

字幕データ処理時の制約と対応策

長い字幕データの分割処理

LLMのトークン制限に対応するため、字幕データを一定の長さに分割して処理します。

def split_text(text, max_length):
    return [text[i:i+max_length] for i in range(0, len(text), max_length)]

部分的な要約の統合

分割処理した各部分を要約し、最後にそれらを統合します。

まとめ

本記事では、YouTube字幕データの取得からLangChainを用いた解析までの方法を解説しました。

字幕データを効率的に活用することで、動画の要約や内容分析が容易になります。

LangChainを使った高度な処理を応用すれば、さらに多くの可能性が広がります。

ぜひ試してみてください!

本ブログ「ゴマフリーダムのPython教室」のトップページへは以下へアクセス!

Python自動処理の教科書
Tips集
ゴマフリーダムをフォローする

コメント

達人に学ぶDB設計 徹底指南書

最短コースでわかる ディープラーニングの数学

あたらしい機械学習の教科書 第3版

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

タイトルとURLをコピーしました