外部データをRetrievalしてLLM活用する上での課題と対策案 - ABEJA Tech Blog
Created by

発表時間
2分
勉強会日時
2023/11/09
概要
外部データをRetrievalしてLLM活用する上での課題と対策案についてのブログ記事です。課題として、関連テキストの抽出がうまくいかない場合や未知の単語を含む場合があります。対策案として、ページ構造を意識した形で文章を格納する、単語の共起ベースで類似度を計算する、ファインチューニングや異なるモデルの使用などが挙げられています。

概要
外部データをRetrievalしてLLM活用する上での課題
関連テキストを抽出するRetrievalがうまくいかないと回答ができない
あなたは対話エージェントです。 [参考]部分の情報を使って[ユーザ入力文]部分のユーザからの会話に回答してください。 [ユーザ入力文] 「桃を拾ったのは誰ですか?」 [参考] おばあさんは桃を洗濯物と一緒にたらいの中に入れて、おうちへ持って帰り、.....
JavaScript
この[参考]の情報を外部から抽出するのがRetrieval
テクニック
Case1. 元データがRetrievalしにくい形の場合
例えば元の文章がWikipediaのような長文だと取りにくい
加工前の参考情報
['カビゴン (ノブナガ)を参照。Pokémon GOにおけるカビゴンカビゴン ' '(GO)を参照。ポケモンマスターズにおけるカビゴンレッド、リラとのバディーズやタマゴから生まれるゴンべの進化形として登場する。New ' 'ポケモンスナップにおけるカビゴンNew ポケモンスナップに関連した書きかけです。加筆、訂正して下さる協力者を求めています。(プロジェクト)', 'カビゴンとメタモンまたは、カビゴンの♀と同じタマゴグループの♂の組み合わせでタマゴが見つかった時、通常はカビゴンのタマゴになり、親のどちらかがまんぷくおこうを持っていた場合はゴンベのタマゴになる。備考', '第五世代で登場した幻のポケモンである。通常であれば幻のポケモンはポケモン図鑑の終盤に番号が振られているが、ビクティニはくさタイプの御三家であるツタージャの前(イッシュ図鑑でいえばNo.000)に図鑑番号が振られている唯一のポケモンである。固定シンボルに話しかけたときの鳴き声は「きゅきゅわわ~んっ!」', 'ピカブイのフジろうじんの発言によると、目が覚めて初めて見たものを食べ物と勘違いして襲ってくることがあるという。ピカブイではポケモンのふえでカビゴンを起こすと、野生ポケモンとしては例外的に戦闘が行われ、その後捕獲が開始する、という流れになる。大食いという設定のポケモンであり、ポケマメはたべる速度こそ高くないものの2口で食べる。アニメにおけるカビゴン無印編第41話で初登場。']
JavaScript
「カビゴンってどんなポケモン?」の回答
カビゴンは、Pokémon GO、ポケモンマスターズ、New ポケモンスナップ、ピカブイ、アニメなどで登場する幻のポケモンです。くさタイプの御三家のツタージャの前に図鑑番号が振られている唯一のポケモンで、大食いという設定のポケモンです。固定シンボルに話しかけたときの鳴き声は「きゅきゅわわ~んっ!」で、ポケマメはたべる速度こそ高くないものの2口で食べるという性質を持っています。
JavaScript
対応案: ページ構造を意識した形で各文章を格納して与える
HTML構造ごとに加工した場合
カビゴン > ポケモンカードにおけるカビゴン : カビゴン (カードゲーム)を参照。 カビゴン > ポケモンずかんの説明文 : レッド、リラとのバディーズやタマゴから生まれるゴンべの進化形として登場する。 使用可能なポケモンとして登場する。カビゴン (UNITE)を参照。 カビゴン/対戦を参照のこと。 カビゴン > 進化 : レッド、リラとのバディーズやタマゴから生まれるゴンべの進化形として登場する。 使用可能なポケモンとして登場する。カビゴン (UNITE)を参照。 カビゴン/対戦を参照のこと。 カビゴン > マンガにおけるカビゴン : ポケットモンスターSPECIALにおけるカビゴン
JavaScript
回答
カビゴンはレッド、リラとのバディーズやタマゴから生まれるゴンべの進化形として登場するポケモンです。カードゲームやマンガなどで使用可能なポケモンとして登場します。
JavaScript
他にも
- 聞き方を明確にする
- 類似度を測るクエリ文章を置き換える
- 質問文をそのまま使うのではなくLLMで加工してから使う
- Hydeなど
- 不要な文章を削除する
- 参考情報をLLMで整形し直す
Case2: 未知の単語を含む場合
今までのRetrievalでは質問文のembeddingと参考情報のembeddingの類似度を使っていた
ここでembeddingを取得時に(embeddingのモデルにとって)未知語だと適切なembeddingが得られない(可能性がある)
対策案: 単語の共起ベースで類似度を計算する
embeddingの類似度ではなくTF-IDFなどを使う
- 質問文と参考情報に同じ単語がどれくらい使われているか?で類似度を測る
- GPTやDeepLearing以前から情報検索分野、自然言語処理で使われてるもので、BM25やTF-IDF、Bag-of-wordsなどの手法がある
- 未知語が多いデータだとこちらの方が良いかも
- embeddingとのハイブリットもあり?
他にも
- ファインチューニングする
- embeddingのモデルを変えてみる
などなど