Share
Embed
テキスト検索の原点:全文検索のしくみと活用ポイント
2024年1月18日に開催されたStudyCoの勉強会「【StudyCo with Momento】LLMに独自知識で回答させる『RAG』の理解を深めよう」でお話した際の資料です。
動画(スライド画面+音声)はこちらです。
https://youtu.be/IGJ4JPei6Wo?feature=shared&t=4331
※個人で作成したものであり、内容や意見は所属企業・部門見解を代表するものではありません。
segavvy
January 17, 2024
Transcript
22 slides
-
テキスト検索の原点 全⽂検索のしくみと活⽤ポイント 検索のための「道具」を知ろう︕ @segavvy ©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 1
RAGでも活躍 ※個⼈で作成したものであり、内容や意⾒は所属企業・部⾨⾒解を代表するものではありません。 -
はじめに ©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 2 RAGといえば ベクトル検索でしょ︖ 検索もいろいろあるのか……
⽬的にあわせて考えねば︕ 今 10分後 3章にわけてお話します よろしくお願いします︕ -
検索は「道具」 • ⽬的は「必要な情報を⾒つける」ことであり 「◦◦検索」はそのために使う「道具」 • 状況によって適切な道具は変わる a. ある商品のレビューと似たようなレビューを探したい時 レビューの⼀覧を⼆分探索したりはしない b.
商品コードがわかっている商品の在庫数が知りたい時 商品DBを全⽂検索したりはしない c. ソースコードから特定関数の呼び出し箇所を列挙したい時 ソースコードをベクトル検索したりはしない ©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 4 -
使い分けるために 道具を知ろう • 定型データ(数値、⽇付、固定⻑の⽂字列など)の検索道具は 基本アルゴリズムとして学ぶ機会が多い 線形探索、⼆分探索⽊、ハッシュテーブル、etc. • テキストデータの検索道具は 学ぶ機会が少ない ベクトル検索
ここまでのセッションでご紹介済み 全⽂検索 このセッションでご紹介 ©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 5 -
第1章のまとめ • 検索は 必要な情報を⾒つけるための道具 • 状況によって適切な道具は変わるので使い分けが必要 • そのために道具を知ろう︕ 第2章では全⽂検索の仕組みについてご紹介 ©2024
segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 6 -
©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 7 ʢٳܜʣࣗݾհ ͕͑͠Β ͔ͨ͠ ߐ಄
و࢙ !TFHBWWZʢηΨϏʣ גࣜձࣾΞΠΞΫτ ਓೳɾίάχςΟϒιϦϡʔγϣϯ෦ ςΫχΧϧσ ΟϨΫλʔ݉ΧελϚʔαΫηενʔϜ Ϧʔμʔ ͷͮ͘ΓΈͮ͘Γ͕େ͖ɻ"*ͷࣾձ࣮ʹᬏਐதʂ -
仕組みは本の索引と同じ 索引 【あ】 あご 3巻 13 ⾜ 4巻 239 頭
2巻 192 【い】 胃 2巻 28 【う】 腕 4巻 32 うなじ 2巻 129 本は索引を⾒れば ⽬的ページが すぐわかる 「⾜」については 4巻の239ページ︕ 全⽂検索でも 検索するために 索引をあらかじめ作っておく︕ ©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 9 -
索引に載せる⾔葉は どう選ぶのか︖ 索引にない⾔葉では 検索できない どんな条件でも検索できるように 索引を作る必要がある 代表的な 2つの作り⽅をご紹介 ◦ ”AI”
は検索できる × “RAG” は索引にないので 検索できない ⾔葉 単語の出現場所 AI ⽂書A(5、15⽂字⽬) ⽂書F(... 勉強 ⽂書A(8、18⽂字⽬) ⽂書G(… する ⽂書A(3、20⽂字⽬) ⽂書B(… ⼈達 ⽂書A(12⽂字⽬) ⽂書D(… ©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 10 -
索引の作成時 1.⽤語辞書(品詞や原形)を使い分解 2.助詞などの不要なものを除去 3.変化しているものを 原形へ戻す 索引の作り⽅︓①⽇本語解析 A I を勉強した⼈達 A
I 勉強 する ⼈達 検索時 検索条件の⽂字に対して 同様の処理を実施してから 索引を調べる 索引を⾒て これらが すべてあるものを探す A I を 勉強 し た ⼈達 A I 勉強 し ⼈達 A I の勉強 A I 勉強 ©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 11 -
A I を勉強した⼈達 A I を勉強した⼈達 A I を勉強した⼈達 A
I を勉強した⼈達 A I を勉強した⼈達 A I を勉強した⼈達 A I を勉強した⼈達 A I を勉強した⼈達 索引の作り⽅︓②単純に切り刻む A I を勉強した⼈達 検索時 検索条件の⽂字に対して 同じ⽂字数で切り出す 最後の半端は前の⽂字で ⽂字数を合わせる※ 索引を⾒て これらが すべてあるものを探す 索引の作成時 1⽂字ずつ ずらしながら 固定の⽂字数で 切り出していく A I の勉強 A I の勉 勉強 ※ 切り出し ⽂字数が2の場合 ©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 12 -
②単純に切り刻む︓⾔葉の途中が該当 東京都府中市 は 東京 京都 都府 府中 中市 に分解 “京都”
で検索されてしまう 索引の課題 ①⽇本語解析︓解析ミス Honda Cars 東京都 は Honda Cars 東京 都 に分解 解析部分を調整したり 後処理で不要なものを除いたり 両⽅の⽅式を組み合わせたり etc. 正しくは ひがしきょうと Honda Cars 東京都 ©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 13 “京都” で検索できない “東京” で検索されてしまう -
表記のゆれに対応する仕組み ゆれを統⼀する表や 同義語辞書などを⽤意して処理 1 全半⾓ ABC = ABC アイウ =
アイウ 2 ⼤⼩⽂字 ABC = abc ABC = abc 3 ひらがな・カタカナ りんご = リンゴ みかん = ミカン 4 数字 123 = 一二三 = 百二十三 = ⅠⅡⅢ 5 異体字・新旧字体 高 = 髙 斉 = 齊 辺 = 邊 6 送り仮名 引っ越し = 引越し = 引越 7 同義語 アメリカ = 米国 = 合衆国 = USA 8 記号 ー = ー = - = - = ― = ‐ ©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 14 -
第2章のまとめ 全⽂検索の仕組み 専⾨⽤語 1 事前に索引を作ること・その索引 インデキシング・インデックス 2 索引データ(⾔葉と出現位置の対応表) 転置インデックス、転置ファイル 3
索引作成のために 対象のデータを集めること クローリング、クロールする 4 ⽇本語の解析処理により ⾔葉を切り出すこと 形態素解析、分かち書き 5 検索で不要な 助詞などの⾔葉を 索引から除くこと ストップワードの除去 6 ⽂章を⼀定の⽂字数で単純に切り刻む⽅式 n-gram(エヌ・グラム) 7 ⽂章の分割ミスなどにより 検索に該当しないこと 検索もれ 8 ⽂章の分割ミスなどにより 間違って該当したデータ 検索ノイズ 9 表記ゆれを統⼀したり 辞書を使って対応する処理 正規化、ステミング、辞書展開 ©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 15 -
©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 16 ʢٳܜʣୈ̎ষͷݩهࣄͷ͝հ ୈষ݄ʹ ॻ͍ͨʮ୭ͰΘ͔Δશ จݕࡧೖʯͷൈਮͰ͢
͏গ͠ৄ͘͠ղઆͯ͠ ͍·͢ͷͰɺ͝ڵຯ͕͋ Γ·ͨ͠Βͥͻʂ https://zenn.dev/segavvy/articles/e97fa8417a0ee3 -
道具は万能ではないので組み合わせよう︕ 検索+ランカー 検索結果のランキング(ベクトル検索はベクトルの類似度、全⽂検索は BM25などの単語の出現頻度ベースが⼀般的)がイマイチの場合は 別のアルゴリズムや外部の情報でリランクする 検索+レコメンド どちらも「利⽤者が必要な情報を提供」という⽬的は同じ 利⽤者に合わせた情報や 検索では該当しない情報も提供できる ベクトル検索+全⽂検索
ベクトル検索は意味検索が得意で 全⽂検索は字⾯の検索が得意 両者を組み合わせて良いとこ取りする ©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 18 -
⽬的に合わせて道具を調整しよう︕ 全⽂検索は字⾯に関する調整がしやすい 固有の商品名・略称・型番などの同⼀視は同義語辞書で対応 法律⽂書や史料における異体字の区別は正規化で調整できる ベクトル検索ならLLMのファインチューニング ただし データセットの⽤意や過学習防⽌など 難易度は⾼そう…… ランカーによる調整も有効 ⽇付や参照頻度などの別フィールドによるリランクは⽐較的容易
対照学習によりランキングを調整できるものもある ©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 19 -
道具だけに頼らず⼯夫しよう︕ たとえば社内のファイルを⾃然⽂で検索したい場合 • ファイルが格納された既存DBのインデックスを流⽤する LLMに ⾃然⽂の条件からDB向けのクエリーを⽣成させる • 条件が単語のみだと検索の精度が上がらないので LLMに 必要な条件が揃うまで聞き返しをさせる
「RAG」で検索された時「RAGの何を知りたいですか︖」と聞き返す • ⼊⼒されなくても分かっている条件を⾃動的に補う 「RAGの概要が知りたい」でも営業職と技術職では欲しい情報が違う 所属部⾨と連動させて 条件を補完したり対象DBを選択したりする ©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 20 -
第3章のまとめ • 道具は万能ではないので組み合わせよう︕ • 道具を⽬的に合わせて調整しよう︕ • 道具だけに頼らず⼯夫しよう︕ 残念ながら まだ万能な検索道具はない 要件に合わせて取捨選択や⼯夫をしましょう︕
©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 21 -
おわりに ©2024 segavvy 2024/1/18【StudyCo with Momento】LLMに独⾃知識で回答させる「RAG」の理解を深めよう 22 RAGといえば ベクトル検索でしょ︖ 検索もいろいろあるのか……
⽬的にあわせて考えねば︕ 10分前 今 このお話が検索道具の理解の⼀助になれば幸いです お時間をいただき ありがとうございました