AI

Document IntelligenceとAzure OpenAIでドキュメントからQ&Aを大量生成

こんにちは、セキュリティチームのぐっちーです。生成AIをやる場合でも、そうでない場合でもQ&A(よくある質問集≒FAQ)をWordやPDF等のドキュメントから大量生成したいニーズはよくあるものだと思います。生成AIの文脈でいうと、Fine-tuning用のデータとして活用したり、RAGの検索データにしたりなどが考えられます。

今回は、Azureの各種機能を使って、ドキュメントからQ&Aをサクッと作れるフローを作りました。もちろん、Q&Aの大量生成の手段はたくさん存在しますが、「ローコードでサードパーティの怪しいツールを使わずに実装できる」をコンセプトにやっていきたいと思います。

実装方針

Teamsをフロントにドキュメントを受け取り

フロント側はTeamsを使う形で実装しました。フロントは本当に何でも良いのですが、最近の担当のお客様がTeamsが多いのでTeamsにしています。要件によっては、Slackにしたり、独自のフロントを作ったりなども考えられます。

Azure AI Document Intelligence を使って文字起こし

今回インプットとして使うファイルはWordやPDFなどいくつかの型式となることを想定しています。そこで、Azure AI Document Intelligence を使ってコンテンツの中身(文字起こし)を取得します。Azure AI Document Intelligence 1は、機械学習などの技術を使って、テキスト、KeyとValueのペア、テーブル、構造をドキュメントから自動的に抽出する AI サービスです。文書処理フローの最初に噛ませることで、生成AIが扱いやすい形にデータを変換するような役割としても使うことができます。生成AIの価値を最大化するにあたって、個人的にアツいソリューションの1つです。

最初から200文字ずつ取得し、Function-CallingでQ&Aを作成しまくる

Azure AI Document Intelligence を使って文字起こしを最初から200文字ずつ順番に取得し、Function-Calling2でQ&Aを作成しまくります。具体的には、Logic Apps の Do Until のアクションを利用し、200文字ずつ順番に生成AIで文書のコンテンツをQ&Aの型式に変換します。200文字と言う部分に関しては、文書の長さや結果を見ながら変えてもいいと思いますが、今回サンプルとした文章の内容的に200文字ぐらいがちょうど良さそうだったので、エイヤーで200文字にしています。

フローの中身

ここからは、実際のフローの中身を解説します。まず、Azure AI Document Intelligence を利用するには、Blob ストレージに文書があると処理しやすいので、ファイル情報を取得して、Blobストレージに格納します。その後、HTTPリクエストでAzure AI Document Intelligence を実行して、文書を処理していきます。

続いて、取得した文字列を200文字ずつ取得して、AIに投げていきます。変数をいくつか定義しつつ、Do Until アクションを利用して、繰り返し処理を実施します。

動作確認

動作確認として、Teams上に召喚したボットにWordの情報を渡します。処理に3分程度時間がかかるのですが、このドキュメントの内容を読み取って、Q&A型式に変更してくれました。

今回作成したフローでは、Teamsに直接Q&Aをcsv型式で返す形にしました。もちろん、結果をどこに格納するかは、作り込み次第で柔軟に対応することができます。JSONL型式などで返せば、Fine-tuning用のデータとしてもすぐ利用することができます。

別の手段

冒頭に述べた通り、この手のQ&A生成は様々な手段があります。例えば、別の手段として、OpenAI の Batch API というものもおすすめではあります。Batch API はリアルタイムにAIの実行結果が取得できない分、大量データ処理を安くできるのが特徴です。

あるいは、マイクロソフトさんがQ&A生成のサンプルを出していたりしますので、上級者であればこちらを試してみるのも良いかと思いました。

応用

今回のフローのエッセンスを応用すれば、Q&Aの生成の他、以下のようなシーンでも活用することができそうだと考えています。

  • ドキュメントからテスト問題の生成
  • ドキュメントからトークスクリプトの生成

終わりに

プログラマーであれば、こんなことをしなくても、コードを書いて実現しちゃうと思いますが、コードを書くのが苦手な人などは是非このようなアプローチでQ&Aの大量生成にチャレンジしていただけたら幸いです。今回のフローはエラーハンドリング等はあまりやっていなくて、さっくりしたフローとなっていますが、参考になればと思います。

参考文献

  1. Azure AI Document Intelligence | Microsoft Azure ↩︎
  2. Azure OpenAI Service で関数呼び出しを使用する方法 – Azure OpenAI Service | Microsoft Learn ↩︎

ぐっち

コンサル会社にてISO27017やISMAP等のセキュリティ規格案件を経験した後、クラティブに入社。セキュリティチーム所属ですが、最近は生成AI等を使ったシステムの開発や導入をやっています。趣味はダンス(Soul, Lock, Waack)です。