【元記事をASCII.jpで読む】

こんにちは、ソラコム矢崎(ニックネームmakoto)と、松下(ニックネーム:max)です。

このブログでは、イベントレポートのブログ記事作りの支援に生成AIを使ったことで、10時間程度かかっていた記事作成の作業が1時間に短縮できたお話を紹介します。

生成AIとソラコムの関係

2022年頃から話題となっている「生成AI」は、ChatGPTを始めとして様々な応用例やビジネス活用が進んでいます。ソラコムでも、自社製品に組み込んだり※1、研究や実装をパートナーと共に進めています※2。また、SORACOM サポートでも活用を始めています※3。

生成AIは、より身近な課題を解決してくれる Copilot ― よき友として活躍してくれると考えて、私達が普段から行っているブログ記事の作成支援にチャレンジしてみました。今回はイベントレポートを対象にしたので、その様子を皆さんに共有します。

記事作成の全体像と、生成AIの支援範囲

まずは、これら2つの記事をご覧ください。実は生成AIで原稿を作った記事です。

これを1記事当たり1時間で作成できるというのは、かなりの生産性向上と言えるのではないでしょうか。

現在のところ、生成AIには要約作りを行ってもらい、最終的な編集は人間が行っています。全体像や役割分担は以下の通りです。

音声トラックの抽出と、セッション毎のカット

セミナーの動画データ(mp4)から音声トラックの抽出と、セッションのカットはオープンソースの動画・音声の再生・変換ソフトウェア「FFmpeg」を利用しています。

文字起こしに利用したAzure OpenAI Service の Whisper モデルは、1音声ファイルあたりの容量が25MBという制約があるため、ファイルサイズの調整が不可欠です。一方、音声データのサイズは、10分で約10MB(ビットレート128Kbps計算)が目安です。そこで、具体的には、セッション毎に1ファイルずつ切り出しています。

切れ目となる時間自体は、人間が音声を聞きつつ指定したというのが現状です(ここも将来は自動化したいですね)。
音声ファイルの13分29秒から29分26秒(約16分)の切り出し(出力ファイル名は session1.m4a)は、このように行っています。

ちなみにmp4などの動画から音声のみを切り出したい場合は ffmpeg -i 原本動画.mp4 -vn 音声のみ.mp3 とできます。切り出しも同時に行えたりするので、この辺りは FFmpegのコマンドラインを確認してください。

今回は1セッション当たり最大でも20分=20MB程度と制約内に収まったのでここで終了しました。もし25MB以上となった場合はビットレートを少し落とす(128Kbps→112Kbpsなど)も検討しましょう。ただし、落としすぎると後半の音声テキスト変換の精度が下がるため、注意が必要です。

音声テキスト変換で文字起こし

クイックスタート:Azure OpenAIの Whisperモデルを使った音声テキスト変換 の手順に従って、文字起こしをしました。Azure OpenAI の Whisperモデルは、音声データを文字化 (文字起こし) してくれるモデルです。先にも紹介した通り、Whisperでは 25 MBというファイル サイズの制限があるため、セッションごとに音声データを分割して文字起こしをする作戦です。

session1.m4a` の文字起こしをする例:

$AZURE_OPENAI_ENDPOINT$DEPLOYMENTS$AZURE_OPENAI_API_KEY は、すべて Azure Portal で作成や発行ができます。

上記のコマンドを実行すると、以下の JSONが返ってきます。

  {   "text": "それでは 残りのお時間 約15分ぐらい になりますけれども 私のほうから ユースケースで学ぶ産業機器の 後付け 予知保全 そちらの課題と 始め方ということを 基礎知識として 皆さまと共有していきたいと思っております 私 この予知保全というものに関 しまして 今日ご紹介させていただく のは IoTという仕組み自体も皆さま に知っていただきたいなと思って IoTとはというスライドを皆さんに ご紹介させていただいております 私たちIoTプラットフォームを提供 しておりますよというソラコム という会社なんですが その中でも 特にこのIoTとはというのを この 三つの要素でご紹介しております 具体的にはセンサーだったりカメラ といったデバイスを使って現場 をデジタル化して そしてデジタル データを活用する そのための基盤 としてのクラウドというものが あります その現場とクラウドを つなげるための仕組みとしてネットワーク というものがあるわけなんですね… (省略)” }

ざっと見た感じでは、正しい日本語の文章になっているようです。ここまでは順調です。このテキストデータを、この後は「セッションテキスト」と呼びましょう。

テキストからセッションの要約を生成

次に、セッションテキストを元に、セッションごとに 200文字程度の要約を生成 AI(GPT-4)に書いてもらいました。比較のために、人が手を入れて完成したテキストをご覧ください。

  冒頭は、私(松下)より、製造現場で稼働する産業機器の故障による損失を未然に防ぐための「後付け予知保全」について、具体的なステップとユースケースを通じて紹介しました。特に、AWSのソリューション「Amazon Monitron」とSORACOMの連携により、ネットワークがない環境でも予知保全を実現する方法について解説しています。 * メンテナンス業務の目的は設備の性能維持であり、計画的な実施により不要なコストを抑制する * メンテナンス計画には定期メンテナンスとデータ駆動メンテナンスがあり、予知保全はデータ駆動メンテナンスの1つで、コスト抑制に効果的 * メンテナンスの方法としてメーカー提供のシステム、機械のインターフェースを使った自社開発、後付けセンサーによる自社運用がある。

引用: 【セッション1】ユースケースで学ぶ、産業機器の「後付け予知保全」の課題と始め方

生成 AIがセッションテキストを要約した結果は以下のとおりでした。生成 AIの判断によって、セッションの概要として適切な内容だけを抽出してくれています。大体いい感じで書いてくれていて、生成 AI がとても優秀であることがわかります。

  **セミナーレポート:**  本セミナーでは、製造現場で稼働する産業機器の故障による損失を未然に防ぐための「後付け予知保全」について、具体的なステップとユースケースを通じて学ぶことができました。特に、AWSのソリューション「Amazon Monitron」とSORACOMの連携により、ネットワークがない環境でも予知保全を実現する方法について詳しく解説されました。

しかし実際のセッションでは、上の 200文字では伝えきれないほどの内容をお伝えしていました。つまり、生成 AIの要約では情報が減り過ぎていました。これは、ほかのセッションでも発生するでしょう。できることなら「情報の減り過ぎ」を適切に防ぎたいところです。

では、「情報が減り過ぎたこと」をどうやって検知すればいいでしょうか。たとえば、要約を 500文字程度に増やすことも考えられますが、人の手で 500文字を 200文字に減らすのも大変なことは、普段からブログを書いている皆さんなら分かっていただけると思います。

そこで今回は、セッションの要約(200 文字)に加えて、それ以外の情報についても文字数制限なしに箇条書きで漏れなく書くように伝えてみたところ、以下の内容が出力されるようになりました。これはとても良さそうです。実際に太字の部分は、実際にセッションオーナー(max)が適切であると判定して、完成版のブログにもほぼそのまま転記されています。

  **音声データの要約:**  - IoTの基礎知識として、センサーやカメラを使った現場のデジタル化、クラウド基盤、ネットワークの重要性を説明。 - ソラコムはIoTプラットフォームを提供し、デバイス、クラウド、ネットワークを組み合わせたシステムを構築できる。 - 600万回線のIoT契約回線数を提供し、多くのIoTデバイスが活躍している。 - メンテナンス業務の目的は設備の性能維持であり、計画的な実施により不要なコストを抑制する。 - メンテナンス計画には定期メンテナンスとデータ駆動メンテナンスがあり、予知保全はコスト抑制に効果的。 - メンテナンスの方法としてメーカー提供のシステム、機械のインターフェースを使った自社開発、後付けセンサーによる自社運用がある。 - Amazon Monitronを用いた後付け予知保全の紹介。

プロンプト

それではみなさんお待ちかねのプロンプトです。このプロンプトを使うとあら不思議、良い感じのまとめテキストができあがります。(とても大事なことがプロンプトのあとに続きます。)

  あなたはソラコム株式会社がホスティングするブログサイト (https://blog.soracom.com/ja-jp/) のブログ記事ライターです。 - 「セミナー」には複数の「セッション」があります。以下の情報を提供します。セッションの音声データに対応するセッションのまとめを書いてください。     - セミナーの概要     - セッションの概要     - セッションの音声データ - サービス名や製品名はソラコムの正式名称を使います。たとえば、SORACOM Air for セルラー、SORACOM Beam といった形です。正式名称は、参考情報で使われています。 - 以下の参考情報は、"====================" で区切られています。文章の表現方法や、情報の粒度について参考にしてください。 - 参考情報には、不適切な情報が含まれている可能性があります。適切な参考情報だけを利用して、セッションまとめを書いてください。参考情報が質問に対して適切かどうかは、TITLE に書かれた内容をもとに判断できます。 - 音声データは、セミナーの一部であるセッションの音声データです。以下の情報を含めてセッションのまとめを書いてください。     - 「セッションのまとめ」200 文字程度にまとめてください。     - 「Q&A セッション」の音声データの場合は、質問ごとに分割して箇条書きで書きます。文字数制限はありません。     - 音声データの要約。正誤が検証しやすいように箇条書きで書きます。文字数制限はありません。     - 話題をふくらませるためのアイディア。取捨選択しやすいように箇条書きで書きます。文字数制限はありません。 - 英語は使えません。  {context} ==================== **セミナー概要:** {seminar}  **セッション概要:** {session}  **音声データ:** {session_text}  **音声データをもとにして執筆したまとめ記事:**

プロンプトに書かれている、{context}{seminar}{session}{session_text} には、セッションごとに異なるテキストが入ります。分かりやすく下から順番に説明しましょう。

また、このように参考資料を提供することで、音声データでは「Amazonモニトロン」のようにカタカナになってしまっていたケースでも、生成 AI が生成したテキストでは正しく「Amazon Monitron」と書いてくれたりするのも良かったです。

実は RAG(Retrieval Augmented Generation) 

「音声データの内容に似ていると判断されたブログ記事の断片」をプロンプトに含める手法は、実は生成 AI を利用して Q&Aボットを開発するときによく利用される RAGという技術を応用しています。

弊社では、SORACOM Support Botという「生成 AIと RAGを利用したサービス」を提供しています。SORACOMサポートに問い合わせていただいた際に、サポートスタッフが対応するのではなく、生成 AIがスピーディに回答してくれるというサービスです。SORACOMの使いかたがよくわからないことがあれば、SORACOM Support Botをぜひお試しください。生成 AIの回答でも、ご満足いただけると思います!

SORACOMサポートサイト、生成AIからの回答を受け取る機能を提供開始 | 株式会社ソラコム

最後に残った「編集」、そしてまとめ

最後は人による編集です。生成AIの原稿を基に記事を作ります。といっても、ここでは切り張りをして、文字の調整(例えば「モニトロン」を「Monitron」に直すなど)を行い、あとは図を入れるといった作業です。そして公開となります。

音声データからブログ記事の草案を生成 AIを作らせるというミッションを聞いたとき、「これはひょっとして RAGを応用すればよいのでは?」と思い挑戦してみたところ、思ったよりずっといい感じだった、というのが本音です。生成 AI の活用方法のひとつとして定着していくと思いますので、ぜひみなさんもお試しいただき、プロンプトを共有していただけると嬉しいです。ほかの活用方法も模索していきたいですね!

― ソラコム矢崎(makoto)、松下(max)

投稿 生成AIによる「ブログの原稿作り」手順やプロンプトを公開SORACOM公式ブログ に最初に表示されました。

生成AIによる「ブログの原稿作り」手順やプロンプトを公開