【AIのためのデータ整理】似たQ&Aをグルーピングする技術
はじめに
こんにちは!株式会社Almondo(アーモンド) AIエンジニアの福谷です。
Almondoでは、AIの社会実装を広く行っており、その一環として、AI時代のデータ基盤整理、すなわちAIが理解し活用しやすいようにお客様のデータを整える取り組みを行なっています。先日、非常にありがたいことに、私が関わらせていただいていたデータ基盤整理のプロジェクトで賞をいただきました。詳細は以下のリンクをご覧ください。
データ基盤整理の1種として、過去の問い合わせログからFAQを生成するという取り組みがあります。"FAQ"の"F"とは"Frequently"、すなわち「よくある」という意味ですが、問い合わせログのデータでは別のお客様や別の日時から似た問い合わせが寄せられることが多く、これらを1まとまりにする必要が出てきます。この記事では、そのグルーピングの技術として Cross-Encoder, Bi-Encoder,そしてBERTopicについてご紹介します!
Almondoでこれらの技術を使った背景
グルーピングを行うのにあたって、初期のプロトタイプではAzure AI Searchを用いて都度検索を行い、上位のものを1グループと扱うという処理を行っていましたが、対象データ数が増加すると費用が莫大になることが課題となっていました。愚直なアルゴリズムを用いた場合、ざっと見積もってデータ件数の2乗に比例する費用となるため、対象データの件数が数万件、数百万件と増えた場合対応できません。
ここで、いくつかの方針出し・サーベイの結果から、ローカルモデルを用いて類似度を測ることにより、費用を削減しつつ高性能なグルーピングをしようというアイデアを採用することにしました。今回対象としている取り組みでは、
- 既存の類似度測定モデルでもある程度性能が良い
- 類似度を測りたい文章はQ&Aの形になっているもののみである
という観点から、既存の類似度測定モデルをファインチューニングすることにより、高性能かつオリジナリティのあるグルーピング手法を確立することにしました。
Cross-Encoder, Bi-Encoder, BERTopicとは?
Bi-Encoder
Bi-Encoderとは、その名の通り2つのEncoderを用いて(正確には2回の埋め込みを挟み)文章間の類似度を測るものです。文章A、文章Bをそれぞれ同じEncoderにより埋め込みを行い、これらのcos類似度を計算することで類似度を計算します。ファインチューニングする際はEncoderのチューニングを行います。
それぞれの埋め込みを独立して作成するため、一度埋め込みベクトルを作成すると使い回すことができ、高速化を行うことができます。
Bi-Encoderの模式図
Cross Encoder
Cross Encoderは、2つの文章を同時にBERTモデルに入力として与えることでスコアを返すものです。BERTモデルの学習時は類似文かどうか(含意関係認識の場合は文が含意されるかどうか)を予測する二値分類問題とし、推論時はBERTモデルの出力層(分類器)から出力される連続値をAとBの類似度スコアとして利用します。各文章の埋め込みの作成は行いません。また、文章は2つセットとして与える必要があります。
処理の特性上、埋め込みベクトルの使い回しができないため処理時間がかかりますが、類似度が各文章を見た上で決定されるためBi-Encoderによる類似度よりもパフォーマンスが高いという特徴があります。
Cross Encoderの模式図
Bi-Encoder, Cross-Encoderのこれらの特徴から、文章Aと同じグループに属するものの決定は、Bi-Encoderで文章Aとあらかじめ設けた閾値以上の類似度をもつ文章全てを、文章AとともにCross-Encoderに入力し、こちらでも閾値以上の類似度が返される場合同じグループに属すると判断することが合理的です。Bi-Encoderでゆるくグルーピングを行った後、Cross-Encoderでじっくりグルーピングを行うようなイメージです。
Bi-EncoderとCross Encoderを組み合わせたグルーピング
BERTopic
BERTopicは、Sentence-Transformerとc-TF-IDF(文章の中で重要な要素を抽出する手法であるTF-IDを、クラスタリングに拡張したもの)により、高密度なクラスタリングを行えるトピック分類の1手法です。(本記事では、クラスタリングとグルーピングをほとんど同じ意味合いで用いています。)
BERTopicの特徴は、BERTによって埋め込みモデルを作成し、c-TF-IDFによって特徴を抜き出したものをHDBSCANにより階層的クラスタリングを行っているところです。従来のトピック分類での手法は、形態素解析などを行い文章の構成要素単位をみることによりクラスタリングを行っていましたが、BERTopicは埋め込みベクトルを用いることにより、意味単位でクラスタリングできることが大きな強みとなっています。
ファインチューニングしたCross-Encoder、Bi-Encoderによるグルーピングの検証
- モデルの選定
まず、Cross-Encoder,Bi-Encoderに用いるBERTモデルを選定します。今回の検証では、日本語で学習している比較的新しめのモデルとして、東北大の bert-base-japanese-v3を用いることにしました。また、いくつかの検討の上、Bi-Encoderに用いるBERTモデルとCross-Encoderに用いるBERTモデルは同じものにしました。
- データの選定
次に、ファインチューニングに用いるデータを選定します。サーベイした結果、公的機関が出しているかつ件数の多いQ&Aのデータとして、日本の官公庁のWebサイトに掲載されている「よくある質問」データセットを用いることにしました。
こちらのデータセットでは、質問と対応する回答の他に、copyright(著作権が属する場所)と元データのURLがカラムとして存在します。今回の学習では、同じcopyrightであるQ&Aは同じグループに(スコアが高くなるように)、異なるcopyrightであるQ&Aは異なるグループに属するように(スコアが低く出るように)学習することにしました。また、データセットのうち15%を検証用データとして取り出しました。
- Bi-Encoder, Cross-Encoderのファインチューニング
次に、Bi-Encoder, Cross-Encoderのファインチューニングを行います。
Triplet Lossを用い、データセット内のそれぞれのデータに対して、同じcopyrightを持つデータをpositive, 異なるcopyrightを持つデータをnegativeとラベル付けし、損失関数としてTriplet Lossを設定し学習させました。
- 似たドキュメントの検索
ファインチューニングさせたBi-Encoder,Cross-Encoderを直列に用いたグルーピング機構を試しに使ってみます。テストデータとして取り出した15%のデータのグルーピングを行ってみます。1つめのグループには以下のようなデータが集まっていました。研究に関わるお金の話がまとまっていることがわかります。
結果
['研究協力者に謝金を支払った際に、源泉徴収を行う必要がありますか?',
'「研究費の応募・受入等の状況」欄に入力するエフォートについては、研究計画には参画はしているが、研究費の配分を受けていない研究課題についても入力しなければならないでしょうか?',
'「研究費の応募・受入等の状況」欄に入力するエフォートについては、研究計画には参画はしているが、研究費の配分を受けていない研究課題についても入力しなければならないでしょうか?',
'交付決定後に研究分担者に配分する分担金の額を一部変更 し、他の研究機関に所属する研究分担者に送金する場合、研究代表者の所属研究 機関を経由することなく、直接、研究分担者の所属研究機関間で分担金の送金の手続を行っても差し支えないでしょうか?',
'研究代表者として複数の研究課題を遂行している場合、海外における研究滞在等による研究中断の手続はどのように行う必要がありますか。',
'他府省又は企業からの受託研究等による研究活動の不正行為は、適用対象外となりますが、どのように対応すればよいですか。',
'年度途中に科研費(補助金分)を全額使用し補助事業を終了した後に、育児休業等を取得する場合、育児休業等による研究中断の手続は必要でしょうか?',
'管理条件の履行が認められない場合、当該研究機関全体に対する競争的資金の間接経費措置額を削減するのか。例えば、当該機関の一定の部局で管理条件が履行されていない場合、当該条件が履行されている他の部局も当該競争的資金の間接経費措置額の削減の対象になるのか。',
'研究計画調書の「研究費の応募・受入等の状況」に記入する研究費については、「科研費のみならず他の競争的研究費等(国外のものも含む)」と今年度から「国外のものも含む」が追加され ていますが、具体的には何を記入する必要があるのでしょうか?',
'研究活動における不正行為は、「公表前」の研究成果に関する行為も含まれうるのでしょうか。',
'研究者使用ルールには、「直接経費の各費目の対象となる経費」が記載されていますが、ここに記載されている経費にしか使えないのでしょうか?',
'科研費(補助金分)について補助事業の中断手続を行い未使用額を返還した場合に、翌年度以降、育児休業等から復帰する時には、返還した未使用額と翌年度以降 に交付を受ける予定だった補助金額を合算した額の補助金が交付されるのでしょうか?']
また、このアーキテクチャのみでは類似した文章の検索のみができるため、最終的にグルーピングする際は、ルールを追加する必要があります。今回は、各文章にIDを付与し、IDが小さいものから順に同じ類似度が高い文章をグループにまとめ、以降何らかのグループに属している文章は再度グルーピングしないというルールを追加し、全体のグルーピングを行いました。
BERTopicを用いたグルーピングの検証
BERTopicによって先ほど用いたデータに対してグルーピングを行った結果、1つめのグループには以下のようなデータが集まっていました。デフォルトのクラスタリング手法であるHDBSCANを用いると、3750件のデータから、72のグループができており、1つめのグループは以下のようになっていました。
361件と、クラスタ数を特に指定せずに実行すると、件数としてはかなり多くなりました。また、797がどのグループにも属さない外れ値となっていました。
クラスタ数およびクラスタリング手法は、BERTopicのオプションにより変更できます。Bi-Encoder+Cross-Encoderでグルーピングしてみた結果が11件だったので、1グループの件数が平均十件ほどになるよう、クラスタ数を350件に指定し、さらにクラスタリング手法をKmeansに変更してクラスタリングを再実行すると、1つめのグループは以下のようになりました。
結果
['研究協力者に謝金を支払った際に、源泉徴収を行う必要がありますか?',
'研究インテグリティが重要視される中、令和3(2021)年度公募では何が変わったのでしょうか?',
'研究代表者と同一の研究機関に所属する研究分担者の分担金の管理方法について留意する点を教えてください。',
'同時に複数の研究等を行いたい場合、研究毎に申出書等を提出する必要がありますか。',
'共同参画機関(共同参画者)に研究費を配分しない場合、経費の欄はどのように書けばいいか。',
'チェックリストの提出に当たっては、「監事又は監事相当職」の確認を経た上で提出するようにとのことですが、監事は非常勤のみであり、多忙のため、時間を割いてもらうことが難しいのですが、それでも監事の確認が必要ですか。',
'研究代表者として複数の研究課題を遂行している場合、海外における研究滞在等による研究中断の手続はどのように行う必要がありますか。',
'管理条件の履行が認められない場合、当該研究機関全体に対する競争的資金の間接経費措置額を削減するのか。例えば、当該機関の一定の部局で管理条件が履行されていない場合、当該条件が履行されている他の部局も当該競争的資金の間接経費措置額の削減の対象になるのか。',
'研究計画調書の「研究費の応募・受入等の状況」に記入する研究費については、「科研費のみならず他の競争的研究費等(国外のものも含む)」と今年度から「国外のものも含む」が追加され ていますが、具体的には何を記入する必要があるのでしょうか?',
'「研究成果報告書」を期日までに提出しない場合の取扱いを教えてください。',
'研究者使用ルールには、「直接経費の各費目の対象となる経費」が記載されていますが、ここに記載されている経費にしか使えないのでしょうか?',
'民間企業との共同研究又は受託研究において、企業の経費の支払いを後払いとすることは可能か。',
'研究分担者が本制度を利用することは可能ですか。',
'競争的研究費等の不正の調査が終了した場合に配分機関に対して報告すべき事項としては、調査報告書ひな形(参考資料3)で示されている事項が含まれていれば十分であると考えてよいですか?',
'研究中断期間中に、研究代表者が行う必要がある定例の事務手続はありますか。',
'e-Rad応募画面「基本情報」タブに、「研究目的」「研究概要」を入力する欄があるが、何を入力すれば良いか。また、「研究目的ファイル」「研究概要ファイル」のアップロード欄があるが、何を提出すればよいか。',
'交付決定後に研究分担者に配分する分担金の額を一部変更 し、他の研究機関に所属する研究分担者に送金する場合、研究代表者の所属研究 機関を経由することなく、直接、研究分担者の所属研究機関間で分担金の送金の手続を行っても差し支えないでしょうか?',
'研究分担者が所属する研究機関を変更する際の具体的な手続について教えてください。',
'研究代表者と研究分担者の所属研究機関が同一学校法人内の大学と短大に分かれている場合は、事務局が同じであっても分担金を配分しなければならないでしょうか?',
'「研究費の応募・受入等の状況」欄に入力するエフォートについては、研究計画には参画はしているが、研究費の配分を受けていない研究課題についても入力しなければならないでしょうか?',
'研究中断期間中に、研究代表者が行う必要がある定例の事務手続はありますか。',
'海外における研究滞在等による研究中断期間は、1年を超える場合を原則として、一度の申請につき最大5年間とされていますが、次のような手続を行うことは可能ですか。① 1年以内の研究中断の申請 ② 5年を超える研究中断の申請 ',
'e-Rad応募画面「基本情報」タブに、「研究目的」「研究概要」を入力する欄があるが、何を入力すれば良いか。また、「研究目的ファイル」「研究概要ファイル」のアップロード欄があるが、何を提出すればよいか。',
'研究活動における不正行為は、「公表前」の研究成果に関する行為も含まれうるのでしょうか。',
'「大学院学生内訳票」について、入学者に社会人経験のある外国人留学生がいる場合、「10 年 齢別入学者数」の「左記のうち『社会人』『留学生』」ではどちらに計上すればいいですか?',
'研究分担者が所属する研究機関を変更する際の具体的な手続について教えてください。',
'当初の研究期間を終了しても研究費に残額がある場合にはどうしたらよいでしょうか?',
'実験試料の保存に関して保存スペースやコストのためのやむ得ない廃棄を容認すべきではないですか。',
'研究指導教員等になれる者の一般的な基準や目安(必要となる論文業績等)はありますか。',
'地方公共団体の研究機関において科研費 (直接経費)の送付を受ける場合、地方公共団体の収入に計上し、予算化する(県の口座に入れる)必要があるでしょうか? ',
'「研究費の応募・受入等の状況」欄に入力するエフォートについては、研究計画には参画はしているが、研究費の配分を受けていない研究課題についても入力しなければならないでしょうか?',
'インターネットでのディスカッションは、研究成果の発表に当たるのでしょうか。',
'実施中に研究代表者を変更することは可能か。']
Bi-Encoder+Cross-Encoderによるグルーピング手法が研究に関わるお金のトピックにまとまっていたのに対して、こちらの結果は研究に関する話が全般的にまとまっていることがわかります。
おわりに
ここまで読んでくださりありがとうございました!本記事では、自然言語のデータのグルーピング手法としてBi-Encoder, Cross-Encoder, BERTopicの3つの手法について紹介しました。
Almondoでは、このようにローカルモデルも適宜用いながら、AIの社会実装をさまざまなプロジェクトを通して行っています。ご興味のある方は、ぜひお問い合わせください!
参考
以下は、この記事の執筆にあたって参考にした記事になります。興味があってさらに知りたい方はぜひ読んでみてください!
- https://www.sbert.net/examples/applications/cross-encoder/README.html
- https://osanseviero.github.io/hackerllama/blog/posts/sentence_embeddings2/
- https://maartengr.github.io/BERTopic/index.html
- https://www.nico-soda.jp/blog/post/20230426_000128.html
- https://qiita.com/takky_0330/items/9cf8d642be3b216dd70d
Discussion