クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

言語モデルに正しい情報を渡す(RAG)

このレッスンのあとで: アプリが言語モデルに正しい情報を渡すしくみを、説明できる。

45分のレッスンコマンドなし

もっともらしい、まちがった答え

ある市役所が、ごみの出し方を答えるチャットボットを試しました。

「粗大ごみはどう出せばいいですか」と聞くと、すらすらと答えます。ところが、手数料の金額も申し込み先も、この市のものではありませんでした。

モデルは、この市の決まりを知らないまま、それらしい文を作っていたのです。このレッスンでは、アプリがモデルに正しい情報を渡すしくみを学びます。

このレッスンのゴール

メモ

アプリが言語モデルに正しい情報を渡すしくみを、説明できる。

キーワード

ことばいみれい
大規模言語モデル大量の文章から学び、続きの文を作るモデルです。LLM
プロンプトモデルに渡す指示と情報の文です。
ハルシネーションモデルが事実でないことを、もっともらしく答えることです。
検索拡張生成関係する文書を探して渡してから、答えさせるしくみです。RAG
ベクトル文の意味を表す、数の並びです。
ベクトル検索意味の近い文を、数の近さで探すことです。

学生が入力するセルは、このプレビューでは空白です。

モデルは、自分の会社の情報を知らない

大規模言語モデルは、インターネットなどの大量の文章から学んでいます。

でも、学んだのはある時点までの、公開された文章だけです。この市のごみの出し方や、社内のマニュアルは知りません。

知らないことを聞かれても、モデルは黙りません。それらしい文を作ってしまいます。これをハルシネーションと呼びます。

モデルが知っていること、知らないこと

質問モデルだけで答えられるか理由
ごみを分別する一般的な理由答えられる公開された文章に多く書かれている
この市の粗大ごみの手数料答えられない市の案内は学習に入っていない
先週変わった収集日答えられない学んだ時点より後のこと
社内の経費精算のルール答えられない社外に公開されていない

学生が入力するセルは、このプレビューでは空白です。

探してから、答えさせる

そこで、アプリが先に答えの材料を探します。このしくみを検索拡張生成、略してRAGと呼びます。

まず、市の案内文を小さな断片に分けて、保存しておきます。質問が来たら、関係する断片を探します。

見つけた断片を、質問と一緒にプロンプトに入れます。最後に「この案内文だけを使って答えてください」と指示して、モデルに渡します。

やってみよう: 関係する案内文を探す

コード: python
# 市役所の案内文です。説明のため、あらかじめ単語に分けてあります。
docs = [
    ["燃えるごみ", "月曜", "木曜", "出す"],
    ["粗大ごみ", "予約", "手数料", "シール", "出す"],
    ["引っ越し", "住民票", "窓口", "届け出"],
]
question = ["粗大ごみ", "出す", "予約"]

best = 0
best_score = -1
for i in range(len(docs)):
    score = 0
    for word in question:
        if word in docs[i]:
            score = score + 1
    print("案内文", i, "の一致:", score)
    if score > best_score:
        best = i
        best_score = score

print("モデルに渡す案内文:", docs[best])

# question を ["住民票", "窓口"] に変えて、もう一度実行しましょう。

よくある誤解

注意

RAGを使えば、モデルは自分の会社の文書を覚える、と考える人がいます。実際は、質問のたびに断片を渡しているだけで、モデルの重みは変わりません。案内文が古いと、答えも古くなります。文書を新しく保つのが、運用の仕事です。

意味の近さで探す、ベクトル検索

同じ単語で探すやり方には、弱点があります。「大型の家具を捨てたい」と聞かれても、「粗大ごみ」という単語がないので見つかりません。

そこで、文をベクトルという数の並びに変えます。意味の近い文は、近い数になるように作られています。

質問の数と近い数を持つ断片を探すのが、ベクトル検索です。単語がちがっても、意味が近ければ見つかります。

例: 文を数に変える(実際は数百個の数)

文ベクトル(簡単にした例)質問との近さ
質問: 大型の家具を捨てたい0.8、0.2
粗大ごみの出し方0.9、0.1近い
燃えるごみの収集日0.6、0.3やや近い
住民票の取り方0.1、0.9遠い

学生が入力するセルは、このプレビューでは空白です。

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。