我々は2020年創業の金融DXを担っている会社で、法人ビジネスの審査を効率化するプロダクトや情報基盤を作っています。
例えば、銀行口座を作る際や融資を受ける際に、銀行では取引先となる法人に対し審査を行います。これらの審査には長くて1ヶ月〜2ヶ月を要するとされます。
法人審査においては、対象の法人に関する情報を収集する必要があります。代表的な情報の例として挙げられるのは、法人の所在地や、営んでいる事業の内容などです。資力の有無の判断に必要な定量情報は、比較的容易に得られますが、「そもそも実在する会社なのか」「実際には何を生業にしているのか」といった情報はインターネット上に掲載されている場合もあれば、オフラインにしかない場合もあります。我々は通常であれば収集・集約・整理に数日かかる法人の情報を、30秒でレポーティングする「SimpleCheck」を中心に、金融DXの裏側を支えるプロダクトを開発・提供しています。
これらを通じ、審査を形式的なものではなく、データを中心に真にフェアなものに近づけることに取り組んでいる会社です。
当社のプロダクトは、主に銀行やカード会社など、法人審査が頻発する金融機関のお客様に使っていただいております。金融機関はデータのセキュリティやコンプライアンスの必要水準が高く、こうしたお客様に対してどのようにAIサービスを提供していくかがテーマです。
近年はLLMの進化がめざましく、特にAIと審査は非常にシナジーがあると言われている領域です。そのため、社内やお客様の中でもLLMを使って審査に関して何かできないのかという声が上がっています。
RAGを適用したAIで法人審査を行う
出力した法人の特徴を基に審査の観点を提案してくれる現在開発中のAI Chatの機能を紹介していきますが、実際の会社情報にはモザイクをかけています。
使用しているAIモデルはChatGPT-3.5や4ですが、RAGやファインチューニングを適用していない純粋なモデルに質問しても当たり障りのない提案しか出てきません。そのため、独自のデータを検索可能にして、実際の現場の審査に近い提案ができれば良いと考えました。
金融機関において法人審査を行う際の指針として、金融庁が策定・公表している「マネーロンダリングやテロ資金供与に関するガイドライン」が広く参照されています。金融機関の法人審査のシーンを想定し、このガイドラインをベクターデータとして格納しておいて、一部の情報を参考にしながら回答するRAGを使用した構成です。
AML/CFT(マネーロンダリングやテロ資金供与)に関する資格試験の問題集をGPT-4に解かせてみると、RAG無しの場合での正解は全91問中49問で、半分くらいの正答率でした。
一方で、様々なガイドラインやインターネット上の情報を検索可能にしたRAGでは88問正解と100%に近い正答率を叩き出しました。
PineconeとOpenAI APIを使用したアーキテクチャの課題
デモのアーキテクチャではまずベクターデータを用意します。最初はOpenAIのEmbedding機能を使ってPDFをベクターデータ化して、ベクトルデータを格納できるデータベース「Pinecone」に保存しておきます。
実際にユーザーが使う時は先ほどのWebサービスを介して、特定の法人情報を我々のデータ基盤で定義しているリスク一覧から「このぐらいの規模の法人ではこういうリスクがある」のように可能性のあるリスクを特定しておきます。この時点ではまだAIは使っていません。
しかし、リスクはかなり広い範囲で取っているので、実際はリスクではないものも含まれている状態です。その上で先ほどのガイドラインを参照して法人の規模による審査観点の傾向に関するプロンプトを内部で作って、OpenAIのAPIを介してリスクを正しく評価していきます。
仮に高いリスクがあると判断された場合、追加で取るべきアクションを提案します。可能性のあるリスクN個に対して上記の流れを踏んだ上でユーザーに返すまでが一連の構造です。
しかし、こちらのアーキテクチャで運用する際には可用性やデータのガバナンス、セキュリティの課題があります。先ほど金融庁のガイドラインのような公的なドキュメントは役に立ちますが、最も役に立つのはお客様が内部で持っている審査マニュアルです。
こういった顧客データがサードパーティでどう扱われるか、どの程度の水準でセキュリティが担保されているのかといった問いが発生してきます。
Azure OpenAIでセキュリティやコンプライアンスの基準を満たした構成に
運用の際の課題を考慮した結果、Azure OpenAIを使うことにしました。
Azure OpenAIとはMicrosoftが提供するAIサービスです。MicrosoftとOpenAIは資本関係にあるのでMicrosoftのクラウドサービスの中ではOpenAIと全く同じ機能を使えます。
OpenAIとは何が違うのかというと、 Azure OpenAIの方はMicrosoftのセキュリティやコンプライアンス水準でサービスが提供されます。そのため、Azure上でOpenAIを使って先ほどと同じ機能を作れば課題も軽減するのではないかと思ってAzureに乗り換えたという経緯です。
しかし、実際にやってみると構造自体はあまり変わりませんでした。
先ほどはPineconeにベクターデータを格納していましたが、今回はAzure Document Intelligenceを使用しているのが変更点になります。
Azure Document IntelligenceではPDFを含む様々な形式のファイルをアップロードした上でドキュメントの情報を抽出できるサービスです。このサービスで抽出したデータに対して、Azure AI Searchという別のサービスでセマンティック検索ができるようになります。
リスク評価の構造も大きくは変わっていませんが、Azure OpenAIの中でRAGの仕組みも全部やってくれるので、プロンプトにRetrievalした結果を挿入する作業がAzure側で可能となります。
Azure AI StudioではノーコードでRAGを作れる
Azureのサービスで言うと、Azure AI StudioというGUIも非常に便利でノーコードでRAGを作れます。
アシスタントツールが最近リリースされていて、プログラミングコードを解釈して回答させたり、コードの生成もできます。また、先ほどのドキュメントを読み込んで好きな方式で検索できるようにして、プロンプトに埋め込んで回答するところまでアシストしてくれます。
実は先ほどのデモに関して、Azureに置き換えたものをお客様に提供する段階まではできていません。そのため、お客様の反応は紹介できないですが、当初の課題は解決できたので、今後もデモの開発と提案を進めていく予定です。
丸岡氏のコメントと視聴者からの質問に答える質問タイムへ
――まずは丸岡さんの方から技術的な観点やコメントを一言いただければと思います。
丸岡:Azure Document Intelligenceは精度が良くて表も読み込んでくれて便利なので、我々もいつも使っています。あとはAzure OpenAI Serviceもエンタープライズ相手だと重要な立ち位置になってきていると思います。
――「Azure Document IntelligenceにおけるPDFの構造解釈は多くの作業を自動化できているのでしょうか」とのことですが、いかがでしょうか。
小間:我々が試したのは文字のみが埋め込まれているPDFが多かったので、 画像が含まれる場合などは未検証です。 文字が含まれているPDFであれば、アップロードすると文字の抽出とベクトルに変換する部分は自動化されている認識です。
――続いて、「Pineconeをベクトルデータベースとして使われていたので、Bedrockを使う選択肢もあると思いました。なぜAzure OpenAIを選ばれたのでしょうか」とのことですが、いかがでしょうか。
小間:確かにBedrockを使う選択肢もあったと思っています。 BedrockではClaude3という精度が良いモデルが現在では使えますが、私が選定していたタイミングではGPT-4以外はあまり使う意味がないと言われていたので、GPT-4が使える分野を選びました。
――最後の質問です。「RAGから検索された情報はどのようにプロンプトに追加されるのでしょうか」とのことですが、いかがでしょうか。
小間:検索方式にもよりますが、ドキュメントの前後数百文字を適切なチャンクに分けてデータベースの中で保存しておくと、検索結果として上位10件の内容が類似度順に出てきます。
ここで、自分で実装する場合はプロンプトに対して工夫を施します。
具体的にはテンプレとしてまず変数の部分を用意しておいて、そこに検索されたチャンク10個が入ります。次に自然文で「上記の文脈を考慮して次の質問に答えてください」のような指示を出します。つまり、長文を読んで次の文章に答えなさいという国語の問題のイメージでLLMにインプットされる形です。