Studyplus Engineering Blog

スタディプラスの開発者が発信するブログ

生成AIを活用したPodcastのShow Notes作成の裏側

こんにちは、SREグループの 水口 です。

この記事では、スタディプラスが運営する「Studyplus Engineering Podcast」の公開までに行なっているPodcastのShow Notesを作成する過程について紹介します。

Show Notesと生成AI活用のモチベーションについて

Show NotesとはPodcastのエピソード内で何が起こったかを詳細にまとめたもので、一般的には以下の内容が記載されます。

  • トピックの要約
  • 言及された話題に関するリンク
  • Podcastの聴取や購読などのCTA(Call To Action / 行動喚起)

また、収録・編集ツールを提供するRiversideのブログに記載されている解説が明快だったためこちらも引用させてもらいます。

Podcast show notes are a comprehensive write up of what happens during an episode of your podcast. They vary in length and content, but usually include a detailed summary of topics discussed in the show; links to additional resources mentioned, and CTAs (calls to action) encouraging readers to listen to, subscribe to, or sponsor the podcast. *1

収録前に社内向けの構成台本も用意していますが、台本にない良いエピソードが話されることもあり、構成台本の単なる要約では収録内容を十分に説明しきれません。当社ではサービス開発を行なっているエンジニアの数人が採用広報チームとしても働いている体制で、編集時にエピソードを聞き直してShow Notesを書く作業に時間を割きたくないという課題がありました。

ここで、音声の書き起こしを音声認識モデルによって行い、それをChatGPTで要約を生成すれば時短になるのではないかと考えて試したところ、実運用で使える精度のものができました。

実行環境

機体: MacBook Pro (14インチ、2021)
OS: macOS Sonoma 14.4.1
チップ: Apple M1 Max
メモリ: 64 GB
Python: 3.9.19

音声ファイルの文字起こし

まずは書き起こしのテキストデータを準備します。収録した音声の文字起こし・要約までオールインワンで行ってくれるWebサービスも存在しておりますが、今回はAppleが提供する機械学習用のフレームワーク MLX を利用して、Macbook Pro上で文字起こしをしてみました。

ml-explore/mlx-examples リポジトリにOpenAIによって開発された音声認識モデルのWhisperを用いた例があるため、これを参考にしました。 ./whisper/requirements.txt を用いて依存ライブラリをインストールして、以下のようなコードで文字起こしができます。

import whisper

try:
    speech_file = "podcast.wav"
    result = whisper.transcribe(
        speech_file,
        verbose=True,
        language='ja',
        path_or_hf_repo="mlx-community/whisper-large-v3-mlx",
        fp16=True
    )

    with open('podcast.txt', 'a', encoding='utf-8', newline='\n') as f:
        f.write('言語: ' + result["language"] + '\n')
        f.write(result["text"] + '\n')

except Exception as e:
    print(f"エラーが発生しました: {e}")

最後に作成されたテキストデータをレビューし、必要に応じて手動で編集作業を行います。例えば、第25回の文字起こしでは出演者の名前が誤って認識されているので直しています。この段階では細かい誤字などには拘っていません。

Show Notesの生成

スタディプラス社内では ztjhz/BetterChatGPT をベースにしたWebUIを利用できるようになっており、GPT-4 Turboなどを利用してテキストを生成できます。ここでは文字起こししたテキストを入力して要約してもらいます。

このポッドキャストでは、StudyPlus Engineeringチームのメンバーが、技術的なトピックや日々の業務での経験、気になる技術に関する話題をディスカッションしています。ホストの樋口さんをはじめ、クライアントグループの明戸さん、後藤さん、そしてSREグループの水口さんが、それぞれの担当分野や興味をもつ技術について語っています。

主な内容は下記の通りです。

StudyPlusウェブ版をFlutterでリプレイスした経緯と目的。主に、学校向けにサービスを広げる方針で、ウェブ版もネイティブアプリと同等に機能を充実させる必要があったため。
リプレイスを通じて変わった点、特にユーザーに影響する機能の復活や改善。
Flutter Webの導入による開発プロセスの変化、特に共通化によるメンテナンス性の向上やネイティブアプリとのコード再利用。
社内でのRails使用状況の変化について、機能縮小によるメンテナンスコストの削減と最新バージョンへの簡単なアップデート。
モバイルアプリ開発との違い、Web特有の課題やハマったポイントについての話題。
新卒で大規模プロジェクトに参加した後藤さんの経験と感想。
技術キャッチアップや仕事での困難への対処法についてのメンバーからのアドバイス。
最後に、StudyPlusではエンジニアを積極的に募集している旨が案内されています。

このポッドキャストは、StudyPlusの技術チームによる技術的な挑戦やプロジェクトの裏話、技術的なキャッチアップ方法などを包括的に解説しており、リスナーに技術開発の現場の雰囲気と学びを提供しています。

この要約された文章の誤字や表現などを手直しして、最終的に公開されるShow Notesが完成します。

第25回はクライアントグループの明渡さん、後藤さん、SREグループの水口さんに出演いただきました。2023年12月にリリースされたStudyplus Web版についてお話ししました。

Show Notes
Studyplus Web版をFlutterでリプレイスした経緯と目的
Flutter Webでのリプレイスを通じて変わった点
Flutter Webの導入による開発プロセスの変化
社内でのRails使用状況の変化について
モバイルアプリ開発との違い、Web特有の課題やハマったポイントについて
大規模プロジェクトに初めて参加した新卒エンジニア後藤さんの感想
技術のキャッチアップや仕事での困難への対処法について

出演者
樋口 (プロダクト部 クライアントグループ)
明渡 (プロダクト部 クライアントグループ)
後藤 (プロダクト部 クライアントグループ)
水口 (プロダクト部 SREグループ)

採用情報
スタディプラスではエンジニアを採用しております。カジュアル面談もやっておりますので、ご興味のある方は下記リンクからご応募ください。

まとめ

生成AIを利用することで、Show Notes作成の効率を向上させることができました。採用広報チームの活動は開発業務の傍で行なっているため、公開作業をサポートしてくれるようなものをフル活用しながら今後もPodcastチームとして活動していきたいです。