RAGのことがやっと少し分かってきた
独自LLMの構築の話が盛り上がってますね。少し時期外れだけど。
前職も現在の会社も、どっちもLLMというか生成AIに少し足を突っ込んだ事業をやったりしてて、RAGについては聞くことが多かったんだけど、どんなものなのかさっぱり理解できていなかった。「そんなのがあるんだな」くらい。
でも、やっと最近RAGについて分かってきた気がするので、ここにまとめておこうと思った。だんだんこのNoteが雑多なものになってきたな。分けるか?
そもそもRAGって何?
一般的なRAGの説明としては、こんな感じかな。
これを見てても、分かったような分からないような。自分たちが大量に持っている内部データとか機密データをデータソースとして使えるのは分かるんだけど、それを生成AI(LLM)が見に行くわけじゃない。じゃあどうやって正しい答えを出してんだよ、と。
なんつーかね、スッキリしないんだよね。みんなこの説明でスッキリしてんのかな?理解出来てんのかな?まあ、この説明ってのは「分かった気になってもらう」ためのものであって、ちゃんと理解するためのものではないのだろうけど。
僕も詳細まで知りたいわけじゃないのだけど、それっぽい内容は知っておきたいわけですよ。それに、この説明で「どうやってLLMがその検索結果を使って正しい答えを導き出すの?」って質問には答えられないんじゃないかと。
プロセス①の検索フェーズの結果を踏まえて作るんです、なんて言われても、僕はなかなかスッキリしなかった。
まあでも、「そういうもんなのか」くらいに留めてたんだけど。
そもそも、自社データを使ってファインチューニングするとか、オープンソースLLMに自分たちのデータを食わせるとかしたらいいんちゃうの?それじゃなくてRAGを使う理由って何なの?と。
僕が理解したRAGの動き
ここのページに書いてある内容が一番分かりやすいと思った。
要はこの絵なんだよね。
どこの説明を見ても、「データベースを検索して、その検索結果を使って生成する」って書いてるんだけど、その文章がもう意味不明。だけど、この絵で腹に落ちたのが「コンテキスト」って書き方なんだよねぇ。これで「なるほど」と僕はなった。
コンテキスト、と言ってもいいし、メタデータ、と言ってもいいと思う。要するに付加情報としての検索結果を持ってきて、それでプロンプトを補強するわけだ。単なるプロンプトではなくて、プロンプトに対してコンテキストを与えることによって、生成を手助けする。
例えば、普通の人が「焼き討ちすんぞ」って言ったとしても、誰も本気で受け取らないけど、織田信長が「焼き討ちすんぞ」って言ったら、ほとんどの人が「本願寺?!」ってなると思うんだよね。これは、「焼き討ちすんぞ」という言葉に『織田信長』というコンテキストが加わった結果、反応が変わる、という例。
特定のデータベースを使ってプロンプトにコンテキストを付加することで、生成結果が変わってくる、というイメージだということに気づいたら、ホンマにすんなりと理解できた。
コンテキストをメタデータと言い換えても、同じようなイメージになると思う。
RAGはハルシネーションの夢を見るか?
ではこれでハルシネーションが全て防げるか、というと、もちろんそんなことはないわけです。やっぱりハルシネーションはあると思う。
もちろんハルシネーションの質と量の両方とも下がるとは思う。でも、やっぱりハルシネーションはなくならないんだろうな。
どこで見たんやったか忘れたけど、分からないなら分からないと答えるように独自LLMを作った、みたいな記事を読んだ記憶がある。これって大事だよね。人間もそうだけど、分からないなら分からないとはっきり言ってもらったほうが助かるわけです。
まあ、たまには「知ってるふり」をして急いで検索するとかを求められるケースもあるのだけど。
それでもハルシネーションが減るだけでも良いんじゃなかろうか。
そうだ、誰か、LLMの回答が正しいかどうか、実在するのか、をチェックする生成AIとか作ってくれないかな。そうしたらハルシネーションを信じるリスクも減るのではないかと。
そうなったら、その先には「ハルシネーションをチェックするAI」をチェックするAIとかできそうだけど。
専門家でないなら、分かった気になる程度で十分なのだよ
今回の僕は、上記の通り「コンテキストを付加することでハルシネーションを防止する」という内容でRAGのことをある程度理解できた。
ただ、詳細まで分かってるわけじゃないし、そもそもベクターデータベースもよく分かってない。ベクターだから、方向を表すものだってのは分かるんだけどね。
ベクターにすることによって、似た言葉は同じような方向を向いている、ということは分かるんだけど、そもそもその方向を決めてんのはなんなんだよ、っていうね。
でも、僕は別にAIの専門家でも技術者でもないので、この辺のところは細部に至るまで全て把握・理解する必要はないと思っている。別にそういう研究してるわけでもないし、AIを使ったビジネスをやってるわけでもないし。
それでもある程度は知っておく必要があるし、誰かに話せる様になっておくべきだと思う。
それって結局「分かった気になっている」だけだとは思ってる。でも「分かった気になる」って大事だからね。そのレベル感で取り敢えずは十分だから、今回の説明は腑に落ちた。
もちろん、技術者を目指すなら、この程度の内容で満足してちゃダメだし、もっと詳細を細部に至るまで把握しておいたほうが良いとは思うよ。
僕が細部まで把握していることってなんだろう。。。ない気がする。。。
今日の捨てるもの
今日はこちらで。
自動車のシガーソケットにつける充電器ですな。数年間使い続けて、特に不満もなかったのだけど、Amazon Vineでこれを見つけてしまって。
これはケーブル内蔵かつ巻取りまでやってくれる。こっちのほうが良さそう。ケーブルを挿しっぱにしてると、どうしても邪魔になってくるからね。ケーブル挿しっぱは「どれも一緒でしょ」とか思ってたから、不満と認識してなかった。
でも、こうやって改めて比べると、巻取りができる方が断然良いと思ったので、こちらに交換。
交換だから荷物は減ってないのだけどね。。。
この記事が気に入ったらサポートをしてみませんか?