Open3

LLM

brooksbrooks

大規模言語モデルの知識を補完するための Retriever の紹介
Retrieverとは
言語モデルの知識を補完するために関連する文書を外部の文書集合から検索してきて言語モデルに入力として与えるような技術。Retrieval-augmented Language Model。

Retrieverの具体的な役割
質問に関連するドキュメントを抽出することが主な役割

【手順】
Retriever f 、質問文 q、参照する文書列 (d_1, d_2, ...) がある。

  1. Retriever fを用いたq(d_1, d_2, ...)のembedding
\begin{aligned} &e_q \in \mathbb{R}^m ~~~~s.t.~~~~~ e_q = f(q) \\ &e_{d_i} \in \mathbb{R}^m ~~~~s.t.~~~~~ e_{d_i} = f(d_i) ~~~~~~ (i \in \mathbb{N}) \end{aligned}
  1. e_q_{d_i}の類似度を計算し、上位k件のd_iを抽出

補足情報

OpenAIのembeddingについて

  • 有用だが、OpenAIのembeddingが学習で使用してないような特殊なデータを扱いたいときは精度が劣化する可能性がある。
  • 同様にOpenAIのembeddingの学習が行われた以降の知識に関しても精度が劣化する。(最新情報が反映できていない)
brooksbrooks

Advanced RAG

参考資料

Advanced RAG

RAGの課題

  • 埋め込むコンテンツのサイズが大きい、つまりchunk sizeが大きいと情報が失われる。

その1:Smaller Child Chunks Referring to Bigger Parent Chunks

類似度検索では文書のチャンクサイズを小さくして検索を行い、ユーザからの質問に対して参照させる場合(Retrieve)は大きいチャンクサイズで返す。ただし、この大きいチャンク(親チャンク)は類似度検索で抽出した小さいチャンク(子チャンク)の文書が参照しているものである。

その2:Sentence Window Retrieval

その1の子チャンクがsentence、親チャンクをsentenceを含めた前後5 sentencesとしてRAGを実現