Slide 1

Slide 1 text

LangChain/Llamaindex/Whis perを使ったアプリケーション開発の まとめと展望 2023.06.01

Slide 2

Slide 2 text

(C)PharmaX Inc. 2022 All Rights Reserve 2 自己紹介 自己紹介 上野彰大 PharmaX共同創業者・エンジニアリング責任者 好きな料理はオムライスと白湯とコーラ マイブームはLLMとRust Twitter:@ueeeeniki

Slide 3

Slide 3 text

3 (C)PharmaX Inc. 2022 All Rights Reserve PharmaXのプロダクトの簡単な説明

Slide 4

Slide 4 text

(C)PharmaX Inc. 2022 All Rights Reserve 4 「薬局」は医療体験の中でも身近な存在 日用品から処方薬まで。「薬局」は皆さまの日常の近くに存在している ドラックストア 調剤薬局 実現したいこと

Slide 5

Slide 5 text

(C)PharmaX Inc. 2022 All Rights Reserve 5 医療体験を横断する2つの事業領域 実現したいこと セルフメディケーション事業 未病・予防 治療 調剤事業 オンライン薬局サービスを展開している

Slide 6

Slide 6 text

(C)PharmaX Inc. 2022 All Rights Reserve 6 LINEから利用できるバーチャルな薬局 最短 即日 ※ お薬をもっと手軽に、もっと安心して受け取れる「 YOJO薬局」 お薬はお家までお届け LINEで薬剤師にいつでも相談 好きなときにお薬の説明 ※東京23区内のみ

Slide 7

Slide 7 text

(C)PharmaX Inc. 2022 All Rights Reserve 7 ソフトウェアに閉じないプロダクト開発 調剤事業 独自の薬局オペレーションシステムを構築し、最適化されたオンライン薬局を実現 × 自社薬局をプロトタイプラボ化 ソフトウェア オペレーション リモート 薬剤師組織 薬局業務を効率化す るオペレーションシス テム(薬局OS) 質の高い患者さま対応 のためのオンライン特 化組織 対人業務の質を高め るための対物業務効 率化 「ソフトウェア×オペレーション×薬剤師組織」を プロダクトとして開発

Slide 8

Slide 8 text

(C)PharmaX Inc. 2022 All Rights Reserve 8 生成AI/LLMチームの立ち上げ 生成AI/LLMチームを立ち上げ複数の PoCを並行して行っている

Slide 9

Slide 9 text

9 (C)PharmaX Inc. 2022 All Rights Reserve はじめに

Slide 10

Slide 10 text

(C)PharmaX Inc. 2022 All Rights Reserve 10 個人情報の扱いについて 疑義照会とは 個人情報の扱いに関しては、責任を負いかねますのでくれぐれもご注意ください ● このLTは「技術的に可能であること」を示すものであり、参考にされた方や企業の個人情報保護 の問題などについては責任を負いかねます ● PharmaXでは、サンプルの処方せんデータ および服薬指導音声を用いてPoCを行っております ● 特に医療の個人情報は要配慮個人情報と呼ばれるものにあたるので、扱いにはご注意ください ○ 要配慮個人情報の第三者提供のプライバシーポリシーへの同意はオプトイン形式でしか取れない ので、過去のユーザーのデータを扱う場合にも十分お気をつけてください

Slide 11

Slide 11 text

(C)PharmaX Inc. 2022 All Rights Reserve 11 今回の発表での実装例について 疑義照会とは 個人情報の扱いに関しては、責任を負いかねますのでくれぐれもご注意ください! ● 今回の発表は、LangChainやLlamaindexの書き方を体系的に学べるような内容ではなく、 様々な応用例を示すことに注力している点をご了承ください ○ 特にLangChainの使い方を体系的に学びたい方は、大嶋さん( @oshima_123)の「プロ ンプトエンジニアリングから始める LangChain入門」やUdemy講座「LangChainによる大 規模言語モデル(LLM)アプリケーション開発入門―GPTを使ったチャットボットの実装ま で」をご覧ください ● LangChainやLlamaindexといったライブラリは非常にアップデートが激しく、今回示したコード が最新バージョンで動くかどうかは確認できていない点もご了承いただければ幸いです ○ PoCタイミングも4月〜5月に渡っており、その時点でのバージョンでは動いたものの、最新 バージョンでは動かないということが起こることは十分に考えられます

Slide 12

Slide 12 text

12 (C)PharmaX Inc. 2022 All Rights Reserve LLMによる服薬指導音声から 薬歴の自動生成PoC

Slide 13

Slide 13 text

(C)PharmaX Inc. 2022 All Rights Reserve 13 服薬指導とは何か? 薬剤師が処方薬を販売する際に正しい服薬方法や処方薬についての注意点などを説明すること 服薬指導音声例1 服薬指導音声例2

Slide 14

Slide 14 text

(C)PharmaX Inc. 2022 All Rights Reserve 14 薬歴とは何か? 薬歴とは 服薬指導で話した内容や他の薬剤師への引き継ぎ事項などを記載した文章のこと ● 薬歴はSOAP形式でまとめる ○ Subjective (S)(主観的所見): 患者さん自身が感じている症 状や問題を記録する部分 ○ Objective (O)(客観的所見): 検査結果や観察による客観 的なデータを記録する部分 ○ Assessment (A)(評価): SubjectiveとObjectiveの情報を もとに、患者さんの病状や薬物治療の効果・副作用を評価 する部分 ○ Plan (P)(計画): 評価をもとに、今後の治療方針や薬物療法 の変更、患者さんへの指導内容など、具体的なアクションプ ランを立てる部分

Slide 15

Slide 15 text

(C)PharmaX Inc. 2022 All Rights Reserve 15 薬歴の記入を自動化する意義 薬歴とは ● 忙しい薬局だと処方箋の受付が落ち着くまで、薬歴を書くことができないので、今まで自分が受 け持った患者さんの薬歴をまとめて記入しなければならないことが多々ある ● 薬歴を書くまでに時間が空いてしまうので、正確な内容を記録できなかったり、残業につながっ てしまったりする ● 服薬指導した音声から薬歴が自動で生成できれば、薬剤師の負担を大幅に削減することが可 能 薬剤師の負担を劇的に軽減できる

Slide 16

Slide 16 text

(C)PharmaX Inc. 2022 All Rights Reserve 16 服薬指導音声から薬歴内容を自動生成する手順 ● ① その患者の処方せんから医薬品の処方情報を抜き出して構造化する ● ② 服薬指導の音声の録音からWhisperで文字起こしする ○ 必要があれば、患者と薬剤師で話者分離する ● ③ ①の処方情報と、②の服薬指導内容の文字起こしから GPTで薬歴の内容を自動生成する

Slide 17

Slide 17 text

(C)PharmaX Inc. 2022 All Rights Reserve 17 手動で作成した会話からChatGPTで薬歴を生成する ChatGPTで 薬歴を生成する 服薬指導の例 薬剤師:上野さん、お待たせしまし た。今日はどうされましたか? 患者:はい、子どもを抱っこしようとし たら腰がピキッといってしまって。。。 それから腰の痛みが引かなかったの で、クリニックに行って薬をもらうこと にしました。 薬剤師:それはお辛いですね。今回 は痛みを和らげるための薬が 2種類 出ています。 1つ目がモーラステープというお薬で す。 ・・・(中略)・・・ 患者:飲み薬は1回飲んだらどれくら い間隔を空ける必要がありますか? 薬剤師:1回飲んだら、6時間ぐらい空 けるようにお願いします。 他になにか気になることはあります か? 患者:分かりました。ありがとうござい ます。他に気になることはないです。 薬剤師:お大事にどうぞ。

Slide 18

Slide 18 text

(C)PharmaX Inc. 2022 All Rights Reserve 18 手動で作成した会話からChatGPTで薬歴を生成する ChatGPTで 薬歴を生成する SOAP形式は何かの説明・処方内容・会話内容を投げる

Slide 19

Slide 19 text

(C)PharmaX Inc. 2022 All Rights Reserve 19 ChatGPTが作る薬歴はクオリティが高い 薬歴とは S ・子供を抱っこしようとして腰痛 O ・ 痛み止め2種類処方 A ・ 腰痛 ・光線過敏症注意 P ・用法用量説明 ・次回副作用確認 <人間の薬歴> ChatGPTは丁寧な薬歴を生成してくれる

Slide 20

Slide 20 text

(C)PharmaX Inc. 2022 All Rights Reserve 20 服薬指導音声から薬歴内容を自動生成する手順 ● ① 患者の処方せんから医薬品の処方情報を抜き出して構造化する ● ② 服薬指導の音声の録音からWhisperで文字起こしする ○ 必要があれば、患者と薬剤師で話者分離する必要もある ● ③ ①の処方情報と、②の服薬指導内容の文字起こしから GPTで薬歴の内容を自動生成する

Slide 21

Slide 21 text

(C)PharmaX Inc. 2022 All Rights Reserve 21 ステップ①: 処方せんから医薬品の処方情報を抜き出して構造化する ステップ① ● 薬局で受け取った処方せんの情報からテキストを抽出する ○ 紙の処方せんをOCRで抽出する ○ PDFデータからPDFMinerなどで抽出する 処方せん画像をOCRでテキスト化したり、 PDFデータからテキストを抽出したりする 医師 薬剤師 オンライン診療 オンライン服薬指導

Slide 22

Slide 22 text

(C)PharmaX Inc. 2022 All Rights Reserve 22 ステップ①: 処方せんから医薬品の処方情報を抜き出して構造化する ステップ① 処方せんのテキストデータから、処方情報を抽出して JSON配列形式として構造化する

Slide 23

Slide 23 text

(C)PharmaX Inc. 2022 All Rights Reserve 23 ステップ①: 処方せんから医薬品の処方情報を抜き出して構造化する ステップ① ● 正規表現でいろんなパターンをマッチさせて引っ掛けて来る方 式もあり得ると思うが、複数あるテキストパターンから特定の 情報を抜き出すのは、正規表現では難しくなる ● GPT-4のAPIを使って、処方せんのテキストから処方情報を JSON配列の形式で抽出する ○ Few-Shotプロンプティングで例を与えることで十分構造 化可能 処方情報をJSON配列の形式に構造化して抽出する

Slide 24

Slide 24 text

(C)PharmaX Inc. 2022 All Rights Reserve 24 コード例(このままでは動きません) 入力例 出力例 冒頭の文章 最後の文章

Slide 25

Slide 25 text

(C)PharmaX Inc. 2022 All Rights Reserve 25 ステップ②: 服薬指導の音声の録音からWhisperで文字起こしする 薬歴の自動生成 Whisper単体では話者分離ができないので、話者の区別なく文字起こしされる 今日は薬が2種類出ております 咳の 症状で受診されたんですかね そうで すね はい分かりましたありがとうござ います じゃあまず一つ目のアストミン という薬をご説明させていただきます これは咳を止める薬です で、埋食後 に1回2錠飲んでください もし咳が治 まってくるようであれば無理に 5日分 飲まなくても大丈夫ですので 咳に調 節して飲んでください もう1個目が・・・ (中略)・・・ 他に何か気になられているところはご ざいますか いや大丈夫です はい承 知しましたじゃあのお大事になさって ください はいありがとうございます。

Slide 26

Slide 26 text

(C)PharmaX Inc. 2022 All Rights Reserve 26 ステップ③: ①と②の文字起こしからGPTで薬歴を自動生成する 薬歴の自動生成 S: 患者は咳と喉の痛みの症状で受診。 O: 1. アストミン錠10mg (1日6錠、分3 毎食後、 5日分) 2. SPトローチ0.25mg 「明治」 (外用、医師 の指示通り、15錠) A: 咳と喉の痛みの症状に対して、咳止め薬と 喉の痛みを取る薬が処方されている。 P: 1. アストミン錠10mgは、毎食後に1回2錠服 用するよう指導。咳が治まってくるようであれ ば、無理に5日分飲まなくても大丈夫と説明 した。 2. SPトローチ0.25mgは、1日6回を目安に1 回1錠を口の中に含んで、噛み砕かずに少 しずつ溶かすように使うよう指導。症状が良 くなったら無理に飲まなくても大丈夫と説明 した。 話者分離をせず、文字起こしした内容をそのまま GPT-4に与えても、かなり丁寧な服薬指導内容を生成すること ができた

Slide 27

Slide 27 text

(C)PharmaX Inc. 2022 All Rights Reserve 27 ステップ②: 服薬指導の音声の録音を話者ダイアライゼーションする ● pyannoteでdiarization→Whisper文字起こし→GPTで話者推定 ○ pyannoteは音声ファイルから話者ダイアライゼーションされた音声データを作成するの によく使われるライブラリ ○ 欠点は、話者ダイアライゼーションされた時にデータの欠損などが起こってしまうことやあ まり精度が高くないこと 話者ダイアライゼーション のアプローチには複数考えられるが、今回は pyannoteを使った方法を共有

Slide 28

Slide 28 text

(C)PharmaX Inc. 2022 All Rights Reserve 28 ステップ②ー1: 服薬指導の音声の録音をpyannoteで話者ダイアライゼーションする 音声ファイルをpyannoteで処理すると、ラベル付けされて 1つずつのwavファイルに分割されて保存される [ 00:00:04.277 --> 00:00:04.547] C SPEAKER_01 [ 00:00:05.273 --> 00:00:05.982] D SPEAKER_01 [ 00:00:09.947 --> 00:00:16.005] A SPEAKER_00 [ 00:00:16.731 --> 00:00:29.995] E SPEAKER_01 [ 00:00:32.948 --> 00:00:42.837] F SPEAKER_01 [ 00:00:44.102 --> 00:00:47.697] G SPEAKER_01 [ 00:00:48.389 --> 00:00:55.982] H SPEAKER_01 [ 00:01:01.450 --> 00:01:02.985] I SPEAKER_01 [ 00:01:09.955 --> 00:01:11.659] J SPEAKER_01 [ 00:01:12.182 --> 00:01:17.295] B SPEAKER_00 話者は番号で識別される SPEAKER_01: はい SPEAKER_01: ではさあ SPEAKER_00: 便秘で病院の先生に薬を出し てもらいました。 SPEAKER_01: 今日は3種類の薬が出ており ますので、お薬の説明させていただきます ま ず一つ目がモビコール配合内容剤ということ で こちらは便秘の薬ですね SPEAKER_01: 便の排出を促す薬ですので、 1日に1回の朝夕食後に飲んでください SPEAKER_01: そのうち朝2方になっているん ですけど ちゃんと便が出るようだったら夜は 飲まなくて大丈夫ですのでよろしくお願いいた します ……(略) GPTで 文字起こし

Slide 29

Slide 29 text

(C)PharmaX Inc. 2022 All Rights Reserve 29 ステップ②ー1: 服薬指導の音声の録音をpyannoteで話者ダイアライゼーションする 文字起こしした 会話内容を与える 薬剤師: はい 薬剤師: ではさあ 患者: 便秘で病院の先生に薬を出してもらい ました。 薬剤師: 今日は3種類の薬が出ておりますの で、お薬の説明させていただきます まず一つ 目がモビコール配合内容剤ということで こち らは便秘の薬ですね 薬剤師: 便の排出を促す薬ですので、 1日に1 回の朝夕食後に飲んでください 薬剤師: そのうち朝2方になっているんですけ ど ちゃんと便が出るようだったら夜は飲まなく て大丈夫ですのでよろしくお願いいたします ……(略) GPTをつかってどちらが薬剤師 or患者の発言なのか、ラベリングすることは可能

Slide 30

Slide 30 text

(C)PharmaX Inc. 2022 All Rights Reserve 30 ステップ②ー1: 服薬指導の音声の録音をpyannoteで話者ダイアライゼーションする pyannoteで話者ダイアライゼーションするのはかなり限界があると感じた ● 特に男性&男性の音声では、会話内容の欠落がかなり起こってしまっており、さらにラベリング の間違いも多々発生している ○ 情報の欠落が激しく、話者ダイアライゼーションしない場合と比べても薬歴の生成内容の 質が低くなってしまった ● 男性&女性の音声、男性&男性の音声では、音質に大きな違いはないが、男性 &女性の音声 の方がきれいに話者ダイアライゼーションされた結果となった ○ 男性と女性の声質は区別しやすいから話者ダイアライゼーションしやすいということがあ るのだろうか?

Slide 31

Slide 31 text

31 (C)PharmaX Inc. 2022 All Rights Reserve 今後の改善ポイント

Slide 32

Slide 32 text

(C)PharmaX Inc. 2022 All Rights Reserve 32 今後の改善ポイント ● ①:音声が悪い問題の改善:実際の服薬指導では音声が割れていたり、雑音が入ってしまうこ とが想定される ○ 後ろで音楽を爆音で流している状態では、 Whisperはほぼ問題なく文字起こしすることが 可能だった ● ②:添付文章の内容を踏まえた副作用の注意点などの高度な指摘 ○ 添付文章の内容を踏まえて、次回受診時に確認すべきポイント(「〇〇といった副作用は 出ていないか?」等)を指摘することも可能だった ● ③:患者さん側が複数人いらっしゃる場合の薬歴生成 ○ 高齢者の方の付き添いで、ご家族が一緒に会話に参加するケース

Slide 33

Slide 33 text

33 (C)PharmaX Inc. 2022 All Rights Reserve LLMによる疑義照会の半自動化PoC

Slide 34

Slide 34 text

(C)PharmaX Inc. 2022 All Rights Reserve 34 疑義照会とは何か? 疑義照会とは 医師が発行した処方せんの間違いなどを発見し、医師に問い合わせること ● 赤枠の欄にその人に処方される医薬品名や 1日の服用数、 服用タイミング、合計の処方量などが記載されており、その 内容に従って薬剤師が調剤行う ● 処方内容が間違っていることが多々あるため、医療事故を 防ぐために、指摘して処方せん内容を変更してもらうこと( = 疑義照会)薬局・薬剤師の重要な職務 ○ 疑義照会の7、8割ぐらいが、法律に定められている処方量 とのズレ(1日の最大容量を超えた量が処方されているなど) や、単純な記載ミス ○ 2割程度は、併用薬などを詳しく聞かないと分からない内容

Slide 35

Slide 35 text

(C)PharmaX Inc. 2022 All Rights Reserve 35 疑義照会の自動化に必要なステップ 疑義照会とは ● ①処方せん情報をテキストデータ化する ● ②処方せんのテキストデータから医薬品の処方情報を抜き出して構造化する ● ③処方情報からその医薬品の添付文書を取得する ● ④処方情報とその医薬品の添付文書を照らし合わせて疑義照会の文章を自動作成する 今回は特に②と④で GPT-4のAPIを用いている

Slide 36

Slide 36 text

(C)PharmaX Inc. 2022 All Rights Reserve 36 ステップ①: 処方せん情報をテキストデータ化する 疑義照会とは ● 薬局で受け取った処方せんの情報からテキストを抽出する ○ 紙の処方せんをOCRで抽出する ○ PDFデータからPDFMinerなどで抽出する 処方せん画像をOCRでテキスト化したり、 PDFデータからテキストを抽出したりする 医師 薬剤師 オンライン診療 オンライン服薬指導

Slide 37

Slide 37 text

(C)PharmaX Inc. 2022 All Rights Reserve 37 ステップ②: 処方せんから医薬品の処方情報を抜き出して構造化する ステップ② 処方せんのテキストデータから、処方情報を抽出して JSON配列形式として構造化したい

Slide 38

Slide 38 text

(C)PharmaX Inc. 2022 All Rights Reserve 38 ステップ②: 処方せんから医薬品の処方情報を抜き出して構造化する ステップ② 技術的に難しいのは、処方せん内の処方情報欄の形式はクリニックのシステムによって様々である点

Slide 39

Slide 39 text

(C)PharmaX Inc. 2022 All Rights Reserve 39 ステップ②: 処方せんから医薬品の処方情報を抜き出して構造化する ステップ② ● 正規表現でいろんなパターンをマッチさせて引っ掛けて来る方 式もあり得ると思うが、複数あるテキストパターンから特定の 情報を抜き出すのは、正規表現では難しくなる ● GPT-4のAPIを使って、処方せんのテキストから処方情報を JSON配列の形式で抽出する ○ Few-Shotプロンプティングで例を与えることで十分構造 化可能 処方情報をJSON配列の形式に構造化して抽出する

Slide 40

Slide 40 text

(C)PharmaX Inc. 2022 All Rights Reserve 40 ステップ③: 処方情報からその医薬品の添付文書を取得する ステップ③ ● PMDAの情報からスクレイピングなどで医薬品の添付 文書情報を取得し事前にDBなどに保存しておく ○ 添付文書は定期的に変更されるので注意 ● ②で構造化した情報の中の医薬品名で DBを検索し て、添付文章を取得する 事前に保存した添付文書を②で取得した薬名で検索して取得する

Slide 41

Slide 41 text

(C)PharmaX Inc. 2022 All Rights Reserve 41 ● ②と③で取得した情報を埋めて GPT-4 APIに比較させる ● 出力形式は、薬ごとに気になるポイントを比較するように支持 する ステップ④:処方情報とその医薬品の添付文書を 照らし合わせて疑義照会の文章を自動作成する ② ③ ステップ④ 処方情報とその医薬品の添付文書を照らし合わせて疑義照会の文章を作るように GPT-4 APIに指示する

Slide 42

Slide 42 text

(C)PharmaX Inc. 2022 All Rights Reserve 42 コード例ー1

Slide 43

Slide 43 text

(C)PharmaX Inc. 2022 All Rights Reserve 43 コード例ー2 先程のアウトプット1が入る

Slide 44

Slide 44 text

(C)PharmaX Inc. 2022 All Rights Reserve 44 最終アウトプット

Slide 45

Slide 45 text

(C)PharmaX Inc. 2022 All Rights Reserve 45 ステップ④:処方情報とその医薬品の添付文書を 照らし合わせて疑義照会の文章を自動作成する ステップ④ ● 現場の薬剤師からすると細かすぎるところはあると思うが、かなり正確に指摘できている ○ 人間からするとむしろ指摘が細かすぎるところの方が問題かもしれない ● 手元で自作した数百枚の処方せんサンプルすべてに対して、 GPT-4のAPIに問い合わせた所、 数件を除いてほぼすべての処方せんで指摘漏れはなかった 自作した処方せんサンプルのほとんどで正確に指摘できていた

Slide 46

Slide 46 text

46 (C)PharmaX Inc. 2022 All Rights Reserve LlamaIndex ✕ Pineconeで てPharmaXエンジニアチームについて 質問できるBotを作ってみた

Slide 47

Slide 47 text

(C)PharmaX Inc. 2022 All Rights Reserve 47 PharmaXテックブログの情報をもとに質問回答させたい テックブログ(https://tech.pharma-x.co.jp)を運営しており、積極的な発信をしている

Slide 48

Slide 48 text

(C)PharmaX Inc. 2022 All Rights Reserve 48 LlamaIndex(旧GPT Index)とは ● LLMは社内独自のデータは学習していない問題やコンテキストサイズ限界の課題に対する 1つ の解として開発されているOSS ○ いわゆるIn-Context-Learningという手法が簡単に実装できる ● 情報をどのように抽出してコンテキストとして与えるかが回答精度をあげる鍵 ○ あらかじめ保存しておいた文書から「質問文」と類似度の高いものを抽出 ○ 質問+類似度の高い文書を一緒にプロンプトにまとめて質問(複数回繰り返す) ● In-Context-Learningを利用したアプリケーション例 ○ 複数記事の要約作成と記事への QA ○ ヘルプ文書のQAボット 質問に適した文章データを取得して、コンテキストして与えることで

Slide 49

Slide 49 text

(C)PharmaX Inc. 2022 All Rights Reserve 49 Llamaindexとは @oshima_123『LlamaIndex で Text-to-SQL 100 本ノック!』(https://speakerdeck.com/os1ma/llamaindex-de-text-to-sql-100-ben-notuku)

Slide 50

Slide 50 text

(C)PharmaX Inc. 2022 All Rights Reserve 50 Pineconeとは 人気急上昇中のvectore storeサービス

Slide 51

Slide 51 text

(C)PharmaX Inc. 2022 All Rights Reserve 51 Pineconeの特長 ● 特長 ○ 速い:数十億のアイテムがあっても超低クエリレイテンシーを実現している ○ フレッシュ:データを追加、編集、削除すると、インデックスがライブ更新され、(最新の)データをす ぐに準備することができる ○ フィルタリング :ベクトル検索とメタデータフィルタを組み合わせることで、より適切で迅速な検索結 果を得ることができる ● 概念整理 ○ Pod:Indexを管理するハードウェアの単位。 TypeとSizeがありType✕Sizeで容量やスループットな どが決まる ○ index:データを管理する単位で、ベクトルの次元数や類似性検索の方法を指定し、 Podもindexの 単位で指定する ○ Metadata:queryを実行する時にMetadataでフィルタリングすることで、 Vectorを効率よく検索する ことができる フルマネージドで簡単に使い始められる便利な vectore store

Slide 52

Slide 52 text

(C)PharmaX Inc. 2022 All Rights Reserve 52 LlamaIndexを使った質問回答Bot作成の手順 ● ① ブログの情報をスクレイピングで取得する ○ スクレイピング時点で、htmlのタグなどの無駄な要素をどの程度省けるかが重要 ● ② 取得した文章をベクトル化し、Pinconeに保存する ○ 1かたまりの文章の長さ(chunk size)や検索方法を変えたければ、保存の時点で変える 必要がある ● ③ 保存した文章から問の文章に近しいものを取得し、コンテキストとしてプロンプトに埋め込ん でGPTに質問する ○ コンテキストとして与える文章数などはここで指定する 後述するように①〜③で様々に要素を変化させてみて、どの程度回答精度が高まるかを確認した

Slide 53

Slide 53 text

(C)PharmaX Inc. 2022 All Rights Reserve 53 今回の実験で行ったことと大枠のPDCAの流れ ● ① シンプルにブログのスクレイピングを行って、文章から特にタグの削除等は行わずデフォルトの設定で pineconeに保存した ○ LlamaIndexはデフォルトではchunk size(文章サイズ)が小さく、 htmlタグなどの無駄な情報が多 く、適切にコンテキストを読み込ませられなかった ● ①でスクレイピングした文章からタグを削除し、②で chunk sizeを大きくすることでかなり回答の精度が高 まった ○ ある程度chunk sizeをの大きくした方が適切なコンテキストを読み取ることができて、回答の精度 は高まる ● ③でプロンプロトに与えるコンテキストの数を増やしてみたが大幅な精度の向上は見られなかった ● 通常のコサイン類似度での検索ではなく、 hybrid検索を試してみたが精度の向上には至らなかった ○ あまりうまく行かず時間切れ

Slide 54

Slide 54 text

(C)PharmaX Inc. 2022 All Rights Reserve 54 コード例ー1)Pinconeの初期化

Slide 55

Slide 55 text

(C)PharmaX Inc. 2022 All Rights Reserve 55 コード例ー2)Pinconeへの保存 必要な設定を行う (予測に何モデルを使うか?などは保存時点では必要ないはず) 保存処理

Slide 56

Slide 56 text

(C)PharmaX Inc. 2022 All Rights Reserve 56 コード例ー3)回答の生成 Pineconeのindexを 使えるようにする コンテキストの取得と回答の生成を行う

Slide 57

Slide 57 text

(C)PharmaX Inc. 2022 All Rights Reserve 57 投げた質問一覧

Slide 58

Slide 58 text

(C)PharmaX Inc. 2022 All Rights Reserve 58 回答例(chunk size1500) ほぼ完璧な回答

Slide 59

Slide 59 text

(C)PharmaX Inc. 2022 All Rights Reserve 59 回答例(chunk size1500)

Slide 60

Slide 60 text

(C)PharmaX Inc. 2022 All Rights Reserve 60 コンテキスト(chunk size1500)

Slide 61

Slide 61 text

(C)PharmaX Inc. 2022 All Rights Reserve 61 コンテキスト(chunk size1500)

Slide 62

Slide 62 text

(C)PharmaX Inc. 2022 All Rights Reserve 62 hybrid検索とは何か? ● ベクトル検索は、完璧ではない。特に新しいドメインでファインチューニングできるようなデータセットがない 場合、まだ従来の検索の方が有利な場合がある。 ● ベクトル検索(=密な検索)と、従来のキーワード検索(疎な検索)、どちらもメリットデメリットがあり、いいと こ取りできないか?という発想に基づく ● pineconeのアプローチは、単一の粗密インデックスを作る。点線部分が pineconeのハイブリッドインデック スによってハンドルされる部分。ハイブリッドインデックスを作るには、疎密、両方のベクトルが必要。 ハイブリッド検索では、粗と密の両方の手法を組み合わせることで、広範囲かつ重点的に検索を行える

Slide 63

Slide 63 text

(C)PharmaX Inc. 2022 All Rights Reserve 63 コード例ー4)hybrid検索

Slide 64

Slide 64 text

(C)PharmaX Inc. 2022 All Rights Reserve 64 まとめ・注意点 ● 一番精度の向上に寄与したのは chunk sizeの調整(&無駄なテキストを削除すること) ○ 精度の向上にはパラメータの調整を行って PDCAを回していく必要がある ● hybrid検索などの他の検索パターンはまだまだ探索の余地がありそう ○ 知見がある人いれば、DMでもなんでもいいのでこっそり教えてください! ● Pineconeは、フルマネージドで便利であるものの、ネットワークの秘匿性などには限界がある ので、注意は必要

Slide 65

Slide 65 text

(C)PharmaX Inc. 2022 All Rights Reserve 65 今後の改善ポイント ● 質問文と近似したベクトルの文章を取得してきているが、質問文に答えるためにはより適切な 検索クエリがある可能性がある ○ 例えば、「PharmaXのエンジニアチームについて教えてください」という質問に答えたけ れば、「エンジニアチーム 特徴」「エンジニアチーム 人数」などの答えになりそうな文章と 近しい検索クエリを生成した方が精度は高まるだろう ● 難しい問いには段階的にアプローチし、情報が足りなければ取得し直して、最終的な問に回答 するようなゴールシーク的な実装を行うことは可能なはず ○ 例えば、「一番ブログ記事を書いている人は誰ですか?」という問い対しては、著者が含 まれている文章(冒頭の自己紹介など)を何度も取得して集計するなど