見出し画像

RAG? In-Context Learning?Embedding?

2本目の投稿です。

生成AI、というか、大規模言語モデル(LLM)を扱っていると、RAG(Retrieval-Augmented Generation)とか、In-Context Learningとか、Embeddingなんて言葉が、似たような用法でよく出てきますよね。
正直、違いなんてどうでもいいと言えばよいのかもしれませんが、意外と気持ち悪くないですか?
ということで、今日は、言葉の違いを考えてみようと思います。
(といっても、私なりの理解を書いてみるだけなので、誤りがあればご指摘ください。)

Embeddingとは?

その名のごとく、日本語では「埋め込み」と表現されていることが多い「Embedding」ですが、自然言語処理の世界では、単語や文章を数値表現、すなわち、ベクトル化することを指していると言えるのではないかなと思っています。
厳密には、Word2Vecとかのモデルを使って、ベクトル化するとともに、情報圧縮とかもされているようですが、その辺は、いったん置いておいて、まずは、数値表現として、ベクトル化していると思ってよいと思っています。

ベクトル化すると、何が嬉しいか・・・
ベクトルって、よく矢印で表現されたりしますよね。つまり向きと長さを持つもの。この向きが同じような向きで、長さが同じような長さのとき、これらのベクトルは似ているって言えると思います。cos類似度とか言ったりします。
つまり、似たような単語や文章は、このベクトルのcos類似度を計算すれば似ているかどうかが分かるんです。

RAG(Retrieval-Augmented Generation)

と、ここで、いったん、Embeddingの話は置いておいて・・・

次に、RAGです。
Retrieval-Augmented Generationなので、「検索拡張生成」というのが直訳かと思います。実際にやっていることは、LLMを使って質問応答する際に、ハルシネーションを回避するために、質問に対して、関連するドキュメントを検索して、その結果を踏まえて、回答を生成するってことですね。
この検索の際に、ほとんどのケースでは、Embeddingしたベクトルでの文章類似度を使って、類似文章を持ってきているんです。
で、類似文章を見つけたら、それを元の質問文に、プラス情報として付加して、新たな質問文を作っておいて、それをLLMに入力し、回答を得ています。ほぼ正解が書かれたドキュメントを質問文につけて投げているので、ハルシネーションが起きにくくなりますよね。

In-Context Learning

さて、先のRAGでは、類似文章を元の質問文に付加して入力文としていました。この元の文章に、付加情報を付け加えるというのが、言ってみれば、In-Contextなんです。
こうすることによって、LLMがあたかも正解情報を知っているかのような出力を返してくれるので、ユーザから見ると、「学習」したように見えます。
こんな背景から、この手法を「In-Context Learning」とかと呼ぶのでしょうね。

おわりに

ところで、Learningとかという言葉を使うと、「学習」って訳したくなりますよね?これが、個人的には、結構やっかいだなと感じています。。

LLMの仕事をしていると、「よくLLMに学習させれば出来るようになる」って会話が出てきたりします。この時の学習って、、AIをちょっとかじったことのある人からすると、学習なんだから、モデルのパラメータ(重みとか)が変わって、恒久的な知識(?)を習得するんだよねって思われてしまいます。ところが、上記で出てきた「In-Context Learning」は、入力文に追記しているだけなので、AIでいうところの「学習」はしていないんですよね。。

まぁ、AIの「学習」というなら、「training」を使うほうがしっくりきますよね。「Learning」を使っている時点で、なんか違和感ありましたよね。

この辺が、ちょっとやっかいで、用語の分かり難さみたいなものを生んでいるのかもしれませんね。


いいなと思ったら応援しよう!