72.7K Views
June 17, 23
スライド概要
大規模言語モデルのために文献をRetrieveする際の試行錯誤のメモです
化学・材料・データ・AI・ロボット
LLMのための 文章検索に関する 勉強・試行錯誤のメモ Kan Hatakeyama 2023/6/17 1
背景 文献検索の必要性と課題 2
Retrieve(検索)型のChatBot GPTに最近の情報や先端知識を覚えさせ、回答させるためのテクニック (Context learning, prompt tuning, …) 質問と類似度の高い データを検索して GPTに一次記憶させる GPTの記憶容量: 原稿用紙 数十枚程度 世の中のデータ: 超大量 3
Retrieve型で回答するChatBot 質問 猫の名前は何ですか? 期待する回答 猫の名前はありません。 文献情報を読み込んだ上で、GPTが回答 参考文献 1. 吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当が つかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた 事だけは記憶している。 2. 彼等は我儘なものだと断言せざるを得ないようになった。ことに 吾輩が時々同衾する小供のごときに至っては言語同断である。 3. … 4
文献の検索方法 質問 猫の名前は何ですか? 期待する回答 猫の名前はありません。 質問と、参考文献を見比べながら、類似度の高いものを抽出 (e.g., キーワード検索, BM25, Embedding vectorの比較) 参考文献 1. 吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当が つかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた 事だけは記憶している。 2. 彼等は我儘なものだと断言せざるを得ないようになった。ことに 吾輩が時々同衾する小供のごときに至っては言語同断である。 3. … 5
類似度検索の方法と主な問題点 これらの問題をそれなりに解決しているGoogle 検索はすごい! • キーワード検索 • 基本は単語レベルで検索 • 複数単語のマッチなどを、どう重み付けするかが自明でない • 表記揺れに弱い • AI≒人工知能 だが、キーワード検索では引っかからない • ベクトル検索 • テキストの「意味」をLLMでベクトル化してコサイン類似度などを比較 • 表記揺れには強い • 未学習の単語に弱い • 専門用語や人名 6
類似度検索の特に大きな問題点 類似度だけを指標にすると、質問と意味的に関係性の低い文章が 拾われるケースが多々ある(特に、検索すべき文献数が多い場合) 質問 猫の名前は何ですか? 参考文献 1. 吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当が つかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた 事だけは記憶している。 2. 彼等は我儘なものだと断言せざるを得ないようになった。ことに 吾輩が時々同衾する小供のごときに至っては言語同断である。 3. 虎の名前は何でしょうか? しまじろうです。 4. 彼女は言った。「貴方の名前は何ですか? 私の名前は何ですか? 彼 の名前は何ですか?」 7
文章検索の松竹梅 • 松: 類似度判定(キーワード検索・Embedding) • 長所: 高速かつシンプル • 短所: おかしな文献が抽出されがち 質問と文献の関係性は、実は単純なアルゴリズム(コサイン類似度)で 処理できるほど、実は自明ではないケースが多い 8
文章検索の松竹梅 • 竹: AIによる関連性の判定 • 質問と文献の(非自明な)関係性を、AIに教え込む • (後述) • 梅: 大規模言語モデル(究極系) • 膨大な文献を学習し、質問に対して的確に回答できるよう訓練されたAI • ローカルLLMやGPT2レベルだと、質問に対して、丸暗記的な文献情報を回答する ケースも多い • GPT3.5以降は、独自に文献をSummarizeしているので、滑らかな回答となっている • 欠点: もはや、どの文献を参照したのか分からなくなってしまっている • 科学研究のような、情報の正確性を求める用途では難あり 9
竹: AIによるテキスト間の 関係性の学習と評価 10
参考ページ • 最近のLLM関連では、こちらの記事がとても参考になります 11
Sentence BERT (SBERT) • こちらの記事が参考になります。 • SBERT.netのdocumentも有用です • Q&Aのデータセットを容易しておき、BERTに よって出力されるQ&Aに対応するベクトルu, vのコサイン類似度が高くなるように、ファイ ンチューニングするアイデア • 「質問」と「回答」の内容は通常、異なるので、こ のように、関係性をAIに教えてあげる作業が 極めて有効 • Claude v1の開発者も、SBERTを推しています (2022/6/17時点) 12
SBERTの状況 (日本語) • 訓練済みモデル • こちらが定番のようです • こちらのWebサイトで色々と紹介されています • 課題 • トークン数が512まで • • • • • GPT全盛時代には、ちょっと厳しい! 訓練済みモデルのデータセットがブラックボックス ファインチューニング用のデータをどう調達するか BERTのモデルもちょっと情報が古くなってきているかも?(専門用語など) など 13
GPT etcでRetrieveするには? • SBERTは、LLMのモデル更新が必要(?)なので、GPTには使えなそう • REPLUG: Retrieval-Augmented Black-Box Language Models (Shi+ 2023) あたりが最近の試み • 論文URL • ただし、6/17時点で、実際の実装が見当たりませんでした。 14
Retrieveに関する アイデアと 試行錯誤 15
GPTやBERT以外のEmbeddingを使う • ローカルLLMで有名な、Vicuna、RWKVなどでも、そこそこの精度 でvector計算が可能 • Token長の問題は解決できる。SBERTのように、LLMを訓練すれば..? • こちらの記事を参照 (下図は、I am a catとの類似度比較) Vicuna GPT 16
LLMの出力の後にMLPを挟む 軽く試した感じでは、上手く行きませんでした(データ不足/モデルが雑) ・LLM: RWKV (出力: 4096次元) ・MLP: 4096 2層 ・学習データセット: databricks-dolly-15k-ja (BM25でcos類似度の教師データを生成, 約100万件) MLP MLP LLM LLM 17
LLMによる類似度判定 • アイデア • 最近のLLMは賢いので、特別なトレーニング無しに、質問と文献間の関 係性を判定出来る可能性がある • キーワード、ベクトル検索結果のre-rankingに使えるかも? • GPT3.5以降なら、ほぼ間違い無くOK。しかしコストの問題有り • → ローカルLLMの活用 18
Rinna3.6b • CTranslate2を使うと、高速で動きます • やや間抜けながら、一応の判断能力があります。 • 結果はばらつくので、同じ推論を繰り返すのが良い? 19
Rinna3.6b 統計的な結果 • 10回の平均を取った結果 • ちょっと微妙です。 • プロンプトの改善 and 今後のモデルの進化次第では、使えるかも? 20
検討中の内容 On going.. 21
短期: SBERTをベースにした改善 • 費用対効果を考えると、既存のSBERTをfine tuneしていくのが良い? • モデル: 上手く回ってきたら、BERT部分を最近のLLMに変えたい • ただしこれは細かなチューニング、データセット作成etcが必要 • 誰かがbase modelを作ってくれるのを流用したい(本音) • データセット: • Q&A形式のデータセットが必要 • SBERTの訓練にも必要 • LLMをfine tuneするにも必要 22
データセットの(自動)作成 • GPTに作らせるというアイデア(を検討中) 23
長期: ローカルLLMのファインチューニング 猫の名前は? オリジナルデータ 猫です。名前はまだ無いです。 どこで生まれたかとんと見当が つきません。… ローカルLLMに特有のコピペ気味な返答と 類似度の高いオリジナル文献を探し、 Answerとして返送 (To 人, GPT-4, etc.) ローカルLLM 吾輩は猫である。名前はまだ無い。どこで生 れたかとんと見当がつかぬ。何でも薄暗いじ めじめした所でニャーニャー泣いていた事だ けは記憶している。 コサイン類似度で 検索可能? オリジナル文献は やっぱりほしい For 研究 etc 24