Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GPTsより精度の高いRAGシステムの構築

Matsumoto Kazutaka
December 19, 2023
9.5k

 GPTsより精度の高いRAGシステムの構築

Matsumoto Kazutaka

December 19, 2023
Tweet

Transcript

  1. 1
    G sより精度 高い AGシステム 構築

    Application eetup ol.5

    2023/12/18

    株式会社エクスプラザ

    松本和高


    View full-size slide

  2. 2
    松本 和高

    株式会社エクスプラザ リードエンジニア

    X: _mkazutaka

    Github: mkazutaka

    18年にバックエンドエンジニアとしてメルカリに入社。そ 後、ミラ
    ティブ、フリーランスを得て株式会社エクスプラザに所属。フロント
    エンドからバックエンドまで幅広く開発しています。

    Code生成系AIと相性がいい 関数型なんじゃないかと

    思って関数型プログラミングを勉強したりしています。


    View full-size slide

  3. CONFIDENTIAL INFORMATION: Not for Public Distribution - Do Not Copy
    3
    株式会社エクスプラザ (EXPLAZA, Inc.)
    会社名
    プロダクト 力で、豊かな暮らしをつくる
    ミッション
    代表取締役CEO 高橋一生
    代表者
    2020年07月03日
    設立
    東京都港区六本木4丁目8-5 和幸ビル
    所在地
    会社概要

    View full-size slide

  4. 今日 お話


    G sより AG 回答精度が高いシステムを作る


    View full-size slide

  5. 9
    🦚 AG ( etrieval-augmented Generation)

    ● と特定 外部データシステムを連携させることで、 機能を拡張する方法


    外部データと連携
    外部データに基づいた回答
    をする

    View full-size slide

  6. 10
    🦚 なぜ AGが必要か

    ● 能力を強化し、より正確かつ新しい情報を提供するため

    ○ トレーニングデータに 、最新 情報が含まれていない場合がある

    ○ AGを使用することで、リアルタイム 情報取得や専門的なトピックに対応できる

    View full-size slide

  7. 11
    🦚 AG 精度について

    ● ここで AGで 精度を「 AGで 回答がユーザにとって適切かどうか」と定義する

    ○ こ 適切具合 各社違う ず(フレンドリーさ、回答が正しけれ いい か)


    こ 回答が適切かどうか

    View full-size slide

  8. 12
    🦚 G sより高精度にするに 

    ● G sより高精度な AGにするに 

    ○ G sより、コンテキストサイズを増やす 

    ○ G sより、正確なコンテキストを渡す事が必要 

    ● やっていること 、

    AGで 回答精度を上げるため 手法を粛々とやっているだけ

    ○ G sと比較することで、ビジネス的な価値が追加される できちんとやっていきたい 

    そ うち抜かれてしまうとエンジニア いらない で ってなっちゃったり 


    View full-size slide

  9. というわけで実装していく


    View full-size slide

  10. 14
    🌵 AGをシンプルに考えたとき 実装ステップ

    1. データ 読み込み

    DFなど ドキュメントからテキストデータ 読み込み 

    2. データ チャンク分け

    読み込んだテキストデータを適切なチャンクに分ける 

    3. データを保存

    適切にわけたデータをDBに保存する 

    4. データ 検索

    ユーザ 質問に対して、関連する情報をDBから検索 

    5. 文章 生成

    DBから取得したデータをもとに文章を生成 

    6. 評価

    正しく文章が生成されているか評価する 


    View full-size slide

  11. 15
    🌱 AGをシンプルに考えたとき 実装ステップ

    1. データ 読み込み

    DFなど ドキュメントからテキストデータ 読み込み 

    2. データ チャンク分け

    読み込んだテキストデータを適切なチャンクに分ける 

    3. データ 保存

    適切にわけたデータをDBに保存する 

    4. データ 検索

    ユーザ 質問に対して、関連する情報をDBから検索 

    5. 文章 生成

    DBから取得したデータをもとに文章を生成 

    6. 評価

    正しく文章が生成されているか評価する 


    View full-size slide

  12. 16
    🌱 データ 読み込み 実装

    ● nstructured (strategy=’hi_res’) を使う

    ○ テキストドキュメント 前処理をするライブラリで

    データ 前処理とクリーニングに用いることができる

    ○ hi_resモード 、 eta社 物体検出ライブラリ「detectron2」を使って

    レイアウトを識別している

    ○ テーブル構造をH テーブルタグで構築することができる


    ● pypdf, pymupdf, unstructured 中で 

    unstructuredが最も精度が高い(弊社調べ)


    View full-size slide

  13. 🌱 データ 読み込み 実装コード

    ● partition_pdfが

    unstructured 

    呼 出す部分

    ● 主要部分自体 

    5行ぐらいで

    実行できる


    View full-size slide

  14. 18
    📚 [補足] 有料ならAzure AI Document Intelligenceもあり

    ● Azure AI Document Intelligenceと 

    ○ icrosoftが出しているAIドキュメントパーサ

    ● nstructuredと同じぐらい精度が良い(弊社調べ)

    ● 表で 出力結果 nstructuredより良かった(私 肌感)

    ○ ただし、若干高い気がする

    ドキュメントが限定的なら選択肢として良さそう

    View full-size slide

  15. 19
    🪴 AGをシンプルに考えたとき 実装ステップ

    1. データ 読み込み

    DFなど ドキュメントからテキストデータ 読み込み 

    2. データ チャンク分け

    読み込んだテキストデータを適切なチャンクに分ける 

    3. データ 保存

    適切にわけたデータをDBに保存する 

    4. データ 検索

    ユーザ 質問に対して、関連する情報をDBから検索 

    5. 文章 生成

    DBから取得したデータをもとに文章を生成 

    6. 評価

    正しく文章が生成されているか評価する 


    View full-size slide

  16. 20
    🪴 データ チャンク分け 実装

    ● 理想的に 、特定 セクション単位(意味的なまとまり)で分けたい

    ○ チャンク数が少ない => 回答に必要な情報を十分に渡せない 

    ○ チャンク数が多い => 不要なトークンや情報が混ざる 

    ○ チャンク数が多い まだ 性能でカバーできるが、少ない カバーできない 

    ● G -4を使ってセクション単位で分ける

    ○ ドキュメント テキストをすべてプロンプトに入れてセクションで分けてっていう 

    ■ 詳しく テックブログ「 G -4 urboにドキュメント チャンク分けを任せてみる 」

    ○ 今回 これが有効だった で、こ 方法を使っている 

    ○ 人間とほぼ近い感覚で、ドキュメントをセクションに分けることができる場合がある 

    ■ テストデータ作ってる最中にふと思いついた 

    ■ とくに規約系だと完璧じゃんってなる 


    View full-size slide

  17. 21
    🪴 データ チャンク分け 実装コード

    ● コンテンツを渡して

    G -4にセクション分けを

    してもらう

    ● penAIライブラリ 

    Json odeを使って

    出力を調整


    View full-size slide

  18. 22
    🌿 AGをシンプルに考えたとき 実装ステップ

    1. データ 読み込み

    DFなど ドキュメントからテキストデータ 読み込み 

    2. データ チャンク分け

    読み込んだテキストデータを適切なチャンクに分ける 

    3. データ 保存

    適切にわけたデータをDBに保存する 

    4. データ 検索

    ユーザ 質問に対して、関連する情報をDBから検索 

    5. 文章 生成

    DBから取得したデータをもとに文章を生成 

    6. 評価

    正しく文章が生成されているか評価する 


    View full-size slide

  19. 23
    🌿 データ保存 実装 (1/3)

    ● セクション単位で分けたやつをそ まま保存すべきで ない

    ○ ユーザ クエリに対して、検索される文章が多い 

    ○ セマンティック検索 、あくまで文章 類似度を検索している 

    ■ 「短い文章を含む長い文章」を「短い文章」で検索したときに 

    「短い文章を含む長い文章」がヒットすると 限らない 

    ■ 「短い文章を含む長い文章」を検索するに 、 

    「長い文章中 短い文章」を「短い文章」で検索したほうがいい 


    View full-size slide

  20. 📚 補足: コサイン類似度とドット積でベクトル化を比較する

    24

    View full-size slide

  21. 25
    🌿 データ保存 実装 (2/3)

    ● amaIndex ecursive etrieverを応用する

    ○ 検索 短い文章で、 AGで使用するコンテキスト 長い文章を渡す 

    ○ 以下 図 、特定 チャンク数で分けた場合 ecursive etriever イメージ図 

    検索 こっちを使う コンテキストに
    こっちを渡す

    View full-size slide

  22. 26
    🌿 データ保存 実装 (3/3)

    ● amaIndexで 、特定 チャンク数分け方 実装ケースとか紹介がない

    ● で、 ecursive etriever 機構を利用して独自実装する


    View full-size slide

  23. 27
    🌿 データ 検索と文章 生成 実装

    ● amaIndex 機構を利用する

    ○ ecursive etrieverが amaIndexを使用している で、独自に実装するメリット ない 

    ○ プロンプト 外部から渡すようにする 


    View full-size slide

  24. 28
    🌿 データ保存 実装コード

    ● セクションとセンテンス
    ode arserを作る

    ● それぞれ Index odeを作る。 

    Index odeが親子 関係を 

    保存している

    ● すべて Indexを toreに保存 


    View full-size slide

  25. 29
    🌿 データ 検索・文章生成 実装コード

    ● こ あたり amaIndex 

    ドキュメントから参照している 

    ● 1行目: ectorIndex etrieverを作る 

    ● 4行目: ecursive etrieverを作る 

    ● ecursive etrieverを呼ぶときに 

    ○ root_idを検索

    ○ root_idが etrieverなら etrieverを 

    呼ぶ

    ○ ectorIndex etrieverが呼 れる 

    ○ 子IDを検索、親IDを返す 

    ○ ecursive etrieverが親ID 

    結果を返す


    View full-size slide

  26. 30
    🚀 AGをシンプルに考えたとき 実装ステップ

    1. データ 読み込み

    DFなど ドキュメントからテキストデータ 読み込み 

    2. データ チャンク分け

    読み込んだテキストデータを適切なチャンクに分ける 

    3. データ 保存

    適切にわけたデータをDBに保存する 

    4. データ 検索

    ユーザ 質問に対して、関連する情報をDBから検索 

    5. 文章 生成

    DBから取得したデータをもとに文章を生成 

    6. 評価

    正しく文章が生成されているか評価する 


    View full-size slide

  27. 31
    󰞵 評価

    ● 対象: G s / 今回 実装

    ● ドキュメント:

    ○ 商工会議所が出している「中小企業・小規模事業者 ため インボイス制度対策」

    ● G sと今回 実装ケースを比較評価する

    ○ 質問文を15個用意

    ■ ドキュメントをみて、私が準備 

    ■ インボイス制度に関するQ&A目次一覧 

    ○ 質問文から 回答 評価 => G -4を使う 


    View full-size slide

  28. 32
    󰞵 G -4で評価する

    あなた 、チャットボット 返答が適切かを評価する優秀なアシスタントです。

    ユーザ 入力する質問と回答を以下 基準に従って評価してください


    1. 適切性: 回答がきちんとした文章や丁寧な文章になっているか(1点 不適切、5点 非常に適切)

    2. 正確性: 情報 正確さ(1点 誤情報、5点 完全に正確)

    3. 補足情報: 回答に有用な補足情報が含まれているか(1点 全くなし、5点 非常に有用)


    総合評価: これら 要素を踏まえた上で、回答に対する総合的な評価を1-5点で付けてください。


    J で結果を出力します。

    キー値に 、appropriateness, accuracy, additional, score, commentを含めてください。

    総合評価 キー値 `score`にしてください。


    View full-size slide

  29. 33
    󰞵 結果

    ● G sと今回 実装ケースを1-5で評価する

    ○ 今回 システム(top-k=2)がもっとも良い評価が出た 

    ○ top-k3 とつだけ質問 回答にわかりませんと答えてスコアが1になってた で 

    それに っ られて下がっている 

    GPTs 今回 システム
    (top-k=2)
    今回 システム
    (top-k=3)
    中央値 3.0 5.0 5.0
    平均 3.5 4.64 4.43

    View full-size slide

  30. 34
    📚 補足1: . インボイス制度について教えてください

    インボイス制度 、2019年(令和元年)10月に導入された消費税 軽減税率に伴って、2023
    年(令和5年)10月1日から開始される制度です。こ 制度で 、適格請求書(インボイス) や
    り取りが必要となり、インボイスを受け取った事業者 みが消費税 仕入税額控除を受けるこ
    とができます。インボイス発行に 税務署長へ 登録申請と、登録番号 発行が必要です。
    インボイス制度 導入によって、以下 ような変化が予想されます:
    - インボイスを発行できない事業者から 購入で 、仕入税額控除ができず、消費税 負担が
    増える可能性があります。
    - それが原因で取引が見直されることがあるかもしれません。
    - 仕入先がインボイスを発行しない場合、そ 分 仕入税額控除ができなくなるため、事業者
    消費税負担が増える可能性があります。
    インボイス発行事業者になるために 、2023年3月31日までに登録申請を行う必要があり、
    2023年4月1日以降でも申請が可能となっています。また、同年度 税制改正により、2023年
    10月2日以降に登録希望日から登録を受けることも可能になりました。
    こ 制度へ 対応 特に、インボイス発行事業者になるかどうかに応じて異なるため、各事業
    者 自身 状況に応じた対策を行う必要があります。本書 、消費税 免税事業者、課税事
    業者からインボイス発行事業者になる者、ならない者を対象に、事業者 タイプごとに情報を色
    分けして確認できるようになっています。

    インボイス制度と 、2023年(令和5年)10月1日から導入される消費税 仕入税額控除 方
    式です。こ 制度で 、課税事業者が取引に関して適格請求書(インボイス)を発行し、そ 写
    しを保存することが必要になります。インボイスに 、発行者 氏名また 名称、登録番号、取
    引年月日、取引 内容(軽減税率 対象品目である旨)、税率ごとに区分して合計した対価
    額およ 適用税率、税率ごとに区分した消費税額、受領者 氏名また 名称などが記載され
    ます。
    こ 制度 導入により、原則として免税事業者等から 仕入について 、本則課税による仕入
    税額控除ができなくなります。免税事業者 、基準期間(原則として個人事業者 前々年、法
    人 前々事業年度) 消費税 課税売上高が1,000万円以下など 要件を満たす事業者で
    す。免税事業者がインボイス発行事業者になるために 、消費税 課税事業者になる必要が
    あります。
    インボイス発行事業者になるために 、税務署に登録申請をし、インボイス発行事業者として
    登録を受けなけれ なりません。登録された内容 、国税庁 適格請求書発行事業者公表サ
    イトにて公表されます。
    課税事業者であっても、インボイス発行事業者へ 登録 任意です。例え 、主な販売先が一
    般消費者である場合、事務処理や業務へ 影響を十分考慮し、インボイス発行事業者へ 登
    録を行わない選択肢もあります。
    インボイス制度 導入に伴い、事業者 適切な対応を行う必要があります。例え 、免税事業
    者から 仕入が多い場合 、インボイス発行事業者になることを提案する、取引価格 見直し
    を行うなど 対策が考えられます。また、価格表示 ルールにも注意が必要で、消費税額を含
    めた価格を表示することが義務づけられています。
    インボイス制度に関する詳細や、登録申請 手続きについて 、国税庁 ウェブサイトや関連
    する資料を参照することをお勧めします。
    GPTs(Score: 4.5)
    今回 top-k3 実装(Score: 5)

    View full-size slide

  31. 35
    「適格請求書等保存方式」(インボイス制度) 、2023年(令和5年)10月1日から開始される制
    度で、課税事業者が取引をする際に適格請求書(インボイス)を用いなけれ なりません。こ
    制度により、インボイスを受け取った者 みが消費税 仕入税額控除を行えるようになります。
    インボイスに 、従来 請求書内容に加えて、登録番号や適用税率、税率ごとに区分した消費
    税額など 記載が必要とされています。インボイスを発行するために 、税務署長宛に登録申
    請書を提出し、インボイス発行事業者として 登録と登録番号 発行を受ける必要がありま
    す。
    こ 制度 、具体的な計算例や図解をまじえながら解説されており、自社がインボイスを発行
    できない場合、販売先が仕入税額控除を行えなくなるため、消費税 負担増により取引 見直
    しが生じる可能性があること、また仕入先がインボイスを発行しない場合に 自社 消費税負
    担が増えることなど 影響もあるため、インボイス制度について正しく理解し、適切な対策を講
    じることが重要です。

    「適格請求書等保存方式」と 、2023年10月1日から導入される消費税 仕入税額控除 新し
    い方式です。こ 方式 、インボイス制度とも呼 れており、課税事業者が仕入税額控除を行
    うために 、適格な請求書(インボイス)を受領し、これを保存する必要があります。
    以下に、適格請求書等保存方式 主な概要を説明します。
    1. **インボイス 発行義務**:
    課税事業者 、取引に関して適格な請求書(インボイス)を発行する義務があります。インボ
    イスに 、発行者 名称、登録番号、取引年月日、取引 内容、税率ごと 対価 額およ 消
    費税額などが記載されている必要があります。
    2. **適格請求書発行事業者 登録**:
    インボイスを発行するために 、事業者 税務署に登録申請を行い、「適格請求書発行事業
    者」として登録を受ける必要があります。登録を受けた事業者に 登録番号が交付されます。
    … (略)
    5. **文書 保存**:
    課税事業者 、受領したインボイスを保存する義務があります。これにより、税務調査等で仕
    入税額控除 適正を証明することができます。
    こ 方式 導入により、消費税 適正な課税と納税が確保され、取引 透明性が向上すること
    が期待されています。課税事業者 、新しい制度に適切に対応するために、必要な準備を行う
    ことが求められます。
    GPTs(Score: 4)
    今回 top-k:2 実装(Score: 5)
    📚 補足2: . 「適格請求書等保存方式」 概要を教えてください


    View full-size slide

  32. 📚 補足3: . インボイス制度が始まると課税事業者 どうなりますか?

    36
    現在開いている文書にページ移動 失敗が発生しましたが、インボイス制度が始まると、課税
    事業者 インボイス発行事業者となることが期待されます。これにより、販売先 事業者が仕
    入税額控除を行うことができるようになり、取引が継続する可能性が高まります。仕入れを行う
    際も同様に、課税事業者がインボイス発行事業者から購入を行うことによって、仕入税額控除
    を行うことができ、結果として税負担が軽減されることが期待されます。ただし、インボイス制度
    へ 対応に 申告や納税 手続きが必要となり、事務 負担が増加することを含めた対策が
    必要になります。
    課税事業者がインボイス発行事業者になるため 具体的な対応や詳細な情報について 、文
    書 該当箇所を開示する必要がありますが、現在文書 閲覧に問題があるため、正確な情報
    を共有することができません。文書 閲覧が可能になり次第、詳細について追ってお伝えしま
    す。なお、情報 確認が必要な場合 、文書ファイル 直接閲覧もご考慮ください。
    インボイス制度において発行者が直面する可能性 あるデメリットとして 、以下 点が挙げら
    れます。
    1. **管理負担 増加**:インボイス制度に準拠した適切なインボイスを発行し、記録を保持する
    ために 、事業者 新たなシステム 導入や既存 会計システム アップデートが必要になる
    場合があります。これにより、管理 手間やコストが増加する可能性があります。
    2. **登録申請 手続き**:インボイス発行事業者になるために 、税務署へ 登録申請が必
    要です。こ 手続きに 時間と労力がかかることがあります。
    3. **取引関係へ 影響**:インボイス発行事業者として登録しない場合、販売先が仕入税額控
    除を受けられなくなるため、取引先から取引 見直しを求められる可能性があります。
    インボイス 登録申請について 、制度が開始される2023年(令和5年)10月1日以前に行う必
    要があります。ただし、具体的な申請期限について 、税務署から 案内や公式な情報を確認
    することが重要です。事業者 、制度開始前に十分な準備を行い、スムーズに移行できるよう
    にする必要があります。
    もし、具体的な登録申請 期限や手続きについて 詳細が必要であれ 、最寄り 税務署や
    税理士など 専門家に相談することをお勧めします。
    GPTs(Score: 3)
    今回 top-k:2 実装(Score: 4)

    View full-size slide

  33. 37
    🌸 まとめ

    ● G sより精度 高い AGシステム 構築を紹介しました

    ○ 具体的に 、 nstructured + G -4によるチャンク分け + ecursive etrieverを使う 

    ● 注意点

    ○ 本番運用 まだ間に合ってない。 ecursive etriever 機構を本番DBで適用できるか 

    検証が必要

    ● 今回 資料とコード 後ほどアップロードする予定です

    ○ @_mkazutakaをフォローしていただけると幸いです 


    View full-size slide