Open GENZITSU opened 11 months ago
複数のindexからの検索結果を統合するアルゴリズムを2017年の論文 Risk-Reward Trade-offs in Rank Fusionをベースに紹介している記事
以下紹介されている手法
Combination of multiple searchesで提案された、シンプルにスコアを合計して最終的なスコアとする手法
スコアの絶対値が異なるものをfusionすると、大きいものに引っ張られてしまう
そのドキュメントが検索された回数も一緒に考慮する
ヒットした文書の中での順位を反転した値を加算することで最終的なスコアを生成する手法
ヒットした文書の順位の逆数を合算することで最終的なスコアを生成する手法
個人的には ranx というPython製のランキング評価用ライブラリを使っています。ranx を使うと、たとえばキーワード検索とベクトル検索を一度だけしておいて、ランク融合アルゴリズムだけ変えたときの性能を測定できます。実装量の少なさや、検索器を何度も実行する必要がない点を気に入っています。また、ハイパーパラメーターの最適化機能もサポートしており、たとえば RRF における k をチューニングしたときの性能を測定することもできます。
ranxというハイブリッド検索の性能評価用のライブラリがあるらしい
RRFは知っていたがその他は知らないものだった。 2017年時点での手法のまとめなので最近はもっと良い手法が出てるかもしれない。
事前学習済みLLMに新たな知識を教えるための方法をLlama-2で検証した記録の紹介
以下重要な点のみを抜粋
Llama-2に架空の文章を追加学習させて内容の解答ができるか → 1件だけだとできない。元の文章を少し変えて複数件にすることで学習可能になる
覚えさせたい事実と無関係なテキストを入れるとどうなるか? → 無関係なものが増えるほどスコアが下がる
LoRAで追加学習するさいの設定はどうすればよいか?
7B以外より大きいモデルだとどうなるのか?
公開論文に対する追加学習の検討
めちゃ有益な実験結果である
ベクトル検索と単語検索の併用であるハイブリット検索は検索精度向上のためによく利用されるが、徒に使ってもベクトル検索よりも悪化する場合があることを示している記事
利用したデータ
尼崎市のQAデータを使用します。このデータセットには、784の質問に対して対応する回答がAからCの3つのカテゴリでラベル付けされています。Aの場合は正しい情報を含み、Bであれば関連する情報を含み、Cであればトピックが同じであることを意味します。今回はこれらのカテゴリを関連文書として扱うことにします。
全文検索のチューニングや前処理を全くやらない場合、以下のようにベクトル検索よりも性能が悪化する
以下のチューニングや前処理を施すことで、ハイブリッド検索による精度向上を達成
単語ベースの検索を行う場合は前処理やチューニングが大事という教訓
PDFからのRAGシステムの精度改善をどのように行なったかの紹介をしているスライド
以下ためになったところのみ
unstructuredというライブラリは知らなかったので今度使ってみたい
特定テーマに沿った投稿文をLLMで自動生成するための取り組み紹介。
特定テーマを呟き続けるアカウントの投稿から特徴語を選出し、その特徴量語を用いた文章をLLMで生成させる。
ChatGPTに依頼する形式
messages = [
{"role": "system", "content": "You are a very helpful assistant."},
{"role": "user", "content": f"美容・健康に興味がある女性に対してTwitterでアプローチしたいです。"},
{"role": "assistant", "content": "わかりました。可能であれば参考になる投稿を教えて下さい。"},
{
"role": "user",
"content": f"""{過去の投稿文}""",
},
{"role": "assistant", "content": "ありがとうございます。具体的にどのキーワードでツイートがほしいですか?"},
{
"role": "user",
"content": f'''keyword = {今回生成に使用するキーワード} でお願いします。''',
},
]
こうやってassistantの文章を提携で入れる方法が取れるの初めて知った。
この手法は文章全体のベクトルとキーワード候補のベクトルの類似度をもとにキーワードを選定していく手法で、これまで選出したキーワードとの類似度を鑑みて意味的に多様なキーワード抽出が可能なもの
投稿後のキーワード選出時に最も類似度の和が小さくなるようなペアを選出する
OSSのLLMによる文章生成
A100 1枚で学習可能なstabilityai/japanese-stablelm-base-alpha-7bを元もに以下のようなinstruction形式で学習
{
"instruction": "美容・健康に興味がある女性に対して訴求するTwitterの投稿文をキーワードから生成してください",
"input":[EmbedRankで抽出したキーワード],
"output":[実際の投稿文]
}
加えて、「kunishou/databricks-dolly-15k-ja」のinstruction dataも用いて学習
学習時のパラメータ
絵文字の差はあれど、そこそこ自然な感じになっている
定量評価では元の投稿文とのコサイン類似度を利用していたが、これだと文章の自然さをよく表現できないということで、言語モデルが出力する単語の予測確率によって文章の自然さを定量化するMLM-Scoringというものも利用している
キーワード選出手法のEmbedRankを思い出す良いきっかけになった。 7Bのモデルは学習もやりやすくサービングも楽なので色々応用できそうだ
ChatGPTに社内文書に基づいた回答を生成させる仕組みを構築しました
cognitive searchなどの外部サービス無しでRAGシステムを構築した事例の紹介
下図のように、検索indexを作成するバッチ処理と、作成した検索indexを用いて回答を行うコンポーネントに分けて処理を実施している。
コメント
回答を行う部分は一つのマシン上で実現できるという点が嬉しいが、外部サービスを使わないことで本当にコストメリットが出るのかどうかは要検証な気がする
llamaindexで作成したindexファイルがどんくらいのサイズになるのか、それを扱うためのVMにどれくらいのスペックが必要かなどが気になる
出典