Raggle第2回コンペ - StaticEmbeddingで安全に爆速RAGを実施する
Raggleの第2回コンペでアイデア賞をいただいたのでメモ。ありがとうございます〜
ソースコード
下記を参考に、Transformerモデル組み込みたいんやけど...と生成AIに相談してコード作りました。要件定義と手元デバッグ野郎でした。
解法のコア
このツイートにほぼすべてが詰まっています。Twitter最高!
TransformerではないEmbeddingモデルである、static-embedding-japanese
をベクトル検索に用いました。
著者のセコンさんもTwitterに書いてくださっていますが、CPUでも爆速でEmbeddingできます。
今回のコンペで使った文書のEmbeddingに使う時間を比較してみたところ、以下の通りでした。
モデル | 時間 |
---|---|
static-embedding-japanese | 343 ms |
text-embedding-3-small(OpenAI API) | 5.78 s |
上記は 396chunks(1chunk, 1000文字ごとチャンク) での計測時間です。
※ 各々のCPUのスペックやOpenAIのリソース状況によっても異なるので、参考情報としてください。
OpenAI APIより早いため、システムのレスポンス性能という観点で実用的です。また、外部に情報送らなくて済むので、セキュリティ的にも選択肢に入ると感じました。
アンサンブルでのStaticEmbedding利用
-
Transformerを使用していないモデルであるため、通常のTransformerモデルによる結果とは違った文章を取ってこれると思い、OpenAIのtext-embeeding-smallとアンサンブルしました。
-
アンサンブルの際には、StaticEmbeddingで類似度を計算し、コサイン類似度が0.9を下回っている場合のみRAGの候補として追加とすることで参考情報の多様性を担保しました。
精度は?
Raggleから公開されるスコアのCorrectnessを見る限り、98点(1個90点で、残り4個は100点)でした。手元でも見ていましたが、公開されている質問例には解答できていそうでした。以下に質問例を記載しますが、検索に引っかかって来そうなキーワードが入っているためうまく行ってるかもな〜という感想です。
- 存在意義(パーパス)は、なんですか?
- 事務連絡者の電話番号は?
- Vロートプレミアムは、第何類の医薬品ですか?
- 肌ラボ 極潤ヒアルロン液の詰め替え用には、何mLが入っていますか?
- LN211E8は、どのようなhiPSCの分化において、どのように作用しますか?
まとめ
今回のコンペでは、static-embedding-japanese
を活用したことで、高速かつ安全に高精度な検索システムを実現できました。特に、OpenAI APIと比較してもレスポンス速度の面で大きなアドバンテージが得られた点は大きな成果です。
開催いただいた株式会社Galirage様、協賛のロート製薬株式会社様、ありがとうございました!
Discussion