社内の文書を学習させたLLMを、業務用の端末に配って使う計画があるとします。検討を始めると、学習に使った文書が外に出ないかどうかが問題になります。
学習を終えたモデルのファイルを開いても、学習に使った文書が文章のまま入っているわけではありません。入っているのは膨大な数値です。しかし、文章のまま入っていないことと、文章を取り出せないことは、別の話です。
実際にファインチューニングしたモデルを対象に、学習に使った文書は取り出せるかを試しました。
今回、試行対象としたのは、ISMS(情報セキュリティマネジメントシステム)の規格の要求ごとに、適合しているかどうかの判定と、判定の理由を書かせるために学習させたモデルです。
学習の設定は、連載「ローカルLLMにISMSの適合状況評価を支援させる」の第5回「ローカルLLMに答え方を教え込む、ファインチューニングの実際」に記載した設定を用いました。学習に使った文章は、架空の企業5社を設定して作成したものです。
本記事は、架空の企業5社の情報を社外に出せない機密データの代わりとして扱い、実際の機密データで学習させていたとすれば、何が判別でき、何が取り出せたのかを試みた記録です。
試行した結果は、次のとおりでした。
- 学習に使った文章そのものは、書き出させられませんでした。判定の理由の冒頭だけを与えて続きを書かせても、学習に使った文章とは一致しませんでした。
- ただし、学習に使ったかどうかの手がかりは、モデルに残っていました。学習に使った文章と使っていない文章とで、モデルの反応の変わり方に、偶然では説明できない差が現れました。
- 繰り返し回数だけを8回に増やして学習し直したモデルでは、判定に使う文章と、取り出したい文章の冒頭とを手元に持っている場合に限り、100件のうち2件で、判定の理由がほぼそのまま出てきました。
本記事は、関連記事である「Llama 3.1-8Bのファインチューニング(QLoRA、GGUF、量子化)」の最後に記述した問いに対する答えにあたります。
1. 対象と方法
1-1. 学習データの取り出しに関する3つのレベル
本記事では学習データの取り出しを3つに区別し、レベルA・レベルB・レベルCと定義します。
| 本記事での呼称 | 内容 |
|---|---|
|
レベルC 分布推定 |
学習データ全体の傾向が分かるかどうかです。どの分野の文書が多く含まれていたか、どのような書き方の文章が多かったか、といった集まりとしての性質を指します。1件ごとの文面は分かりません。ある文章が学習に使われたかどうかも分かりません。本記事では試していません。 |
|
レベルB メンバーシップ推定 |
学習に使ったかどうかの手がかりが、モデルに残っているかどうかです。同じ文章に対するモデルの反応が、学習の前と後でどれだけ変わったかを、1件ごとに数値で出します。それを、学習に使った文章と使っていない文章とで比べます。学習に使った文章の文面は、1文字も出てきません。 学習に使っていない文章でも、モデルの反応は変わります。比べるのは、変わり方の大きさです。 結果は、次の2通りに分かれます。 学習に使った文章の側が大きければ、手がかりが残っています。ただし、集まりとして大きいことと、手元の1件について学習に使われたと言えることは、別です。 大きさが変わらなければ、何も言えません。学習に使っていないのか、使ったけれども手がかりが残らなかったのかを、区別できないためです。学習に使った文章であっても、手がかりが残るとは限りません。 |
|
レベルA 逐語抽出 |
学習に使った文章そのものを、モデルに書き出させられるかどうかです。逐語とは、一字一句そのままという意味です。モデルの中から文章を探し出すのではありません。モデルに文章を書かせ、書かれた文章を学習に使った文章と突き合わせて、一致しているかどうかを確認します。 |
1-2. 対象としたモデル
試行の対象としたのは、Llama 3.1-8Bをファインチューニングしたモデルです。ISMSの規格が求める項目に会社の現状を突き合わせ、達しているかどうかと、その理由を書かせます。
規格の条文を一つの義務ごとに書き直した文を、以降、要求と呼びます。モデルに読ませるのは、要求と会社の現状をまとめた文章です。以降、入力と呼びます。書かせたい判定と理由の文章を、正解と呼びます。
学習では、入力と正解を対にしたものを975件用意し、それぞれを2回ずつ読ませました。以降、975件を学習データと呼びます。
本記事が試すのは、ここまでに述べた条件でファインチューニングしたモデルから、学習データである正解の文章を取り出せるかどうかです。
1-3. 比較するために準備したデータ
レベルBは、学習に使った文章と使っていない文章を比べて成立します。比べる相手として、学習に使っていない文章を977件用意しました。学習データと、同じ手順で作ったデータです。題材とした架空会社の設定が異なります。
2. 学習に使ったかどうかの判別
節2は、レベルBを試した記録です。ある文章が学習に使われた場合、モデルの中に手がかりが残るのかどうかを試しました。
2-1. 判別方法
モデルは、文章をトークンという短い単位に区切り、1つずつ選びながら書いていきます。選ぶ時点で、候補それぞれについて、選ばれる確率を持っています。モデルを組み込んだプログラムからモデルを呼び出すと、この確率が返ってきます。正解の文章を渡し、正解の部分の各時点の確率を受け取って掛け合わせると、モデルが正解と同じ文章を出す確率になります。
確率をそのまま扱うと、極端に小さな数になります。対数を取り、トークンの数で割った値を用います。値は0以下です。0に近いほど、正解と同じ文章を出す確率が高いことを表します。
ファインチューニングで作られたのは、元のモデルとは別のファイルです。元のモデルには手を加えず、別のファイルを足して使います。以降、アダプタと呼びます。アダプタを外すと、ファインチューニングを行う前のモデルに戻ります。同じ件について、行う前と行った後の両方の値を出せます。
1件ごとに、次の手順で測りました。
アダプタを外した状態で正解の文章の値を出し、続けてアダプタを入れた状態で同じ文章の値を出し、差を求めます。
例として、学習データの1件についての計算結果では、値は、アダプタを外した状態で -0.3552、アダプタを入れた状態で -0.1047 となり、差は +0.2505 でした。学習データの975件と、比較するために準備したデータの977件の全件について行いました。
最後に、2つのデータそれぞれについて差の平均を出し、平均を比べました。
2-2. 判別結果
測る前に、除いておくものがあります。
判定の理由は、入力の中の言葉でできています。要求の言い回しだけでできている場合、会社が変わっても、同じ文章になります。そのため、学習データの正解と、比較するために準備したデータの正解が、一字一句同じになることがあります。
学習データ975件のうち405件、比較するために準備したデータ977件のうち382件が、これにあたります。
この787件は、両側が同じ文章の集まりです。同じ文章を同じモデルに測らせれば、同じ値が出ます。学習に使ったかどうかにかかわらず、両側の値は同じように散らばります。測っても、違いは出ません。
含めれば、違いが出ないと分かっている件数を増やすだけです。除いて測りました。
残ったのは、学習データ570件と、比較するために準備したデータ595件です。差の平均は、次のとおりです。
| 件数 | 差の平均 | |
|---|---|---|
| 学習データ | 570 | +0.4363 |
| 比較するために準備したデータ | 595 | +0.3399 |
| 平均の差 | +0.0964 |
モデルは、学習データを読むうちに、判定の理由の書き方を身につけます。どの順序で、どういう言い回しで書くか。身につけた書き方は、学習に使っていない正解にも当てはまります。2つは同じ手順で作った同種のデータであるため、学習が書き方を身につけるだけの効果であれば、差の平均に大きな違いは生じにくいと考えられます。
結果は、学習データの側が +0.0964 多く上がっています。
ただし、平均の差が +0.0964 であることだけでは、それが偶然によるものかどうかは分かりません。別のデータで測れば、違う値になります。
そこで、1,165件から、学習データを1件、比較するために準備したデータを1件、取り出します。上がり方が大きいのはどちらかを見ます。すべての組み合わせについてこれを行い、学習データのほうが大きかった割合を求めます。この割合がAUCです。
学習データがどの組み合わせでも上回れば1.0です。どちらが大きいかが五分五分であれば0.5になります。
1,165件で求めたAUCは、0.6772 でした。学習データのほうが大きかった組み合わせが、67.72%だったということです。五分五分の0.5は上回りますが、1.0からは遠い値です。
もう1つ、確認すべきことがあります。今回測ったのは、570件と595件の計1,165件です。別のデータで同じ手順を行えば、AUCの値は多少変わります。変わり方の幅を見積もると、0.6460 から 0.7054 の間に収まります。この幅を、95%信頼区間と呼びます。幅の中に、五分五分を表す0.5は入っていません。
学習に使った文章と使っていない文章とで、正解と同じ文章を出す確率の上がり方には差が現れました。ただし、学習データのほうが大きい組み合わせは、67.72%、およそ3分の2にとどまります。残る3分の1では、学習に使っていない文章のほうが大きくなっています。手元にある文章が学習に使われたという兆候はつかめますが、言い切るには足りません。
3. 学習データの抽出
節3は、レベルAを試した記録です。学習データの文章そのものを、モデルに書き出させられるかを試しました。
3-1. 抽出方法
モデルからの出力として正解の文章を書かせ、学習データと突き合わせます。
正解は、次の形をしています。
{"label": "達している", "evidence": "実施状況に『決めたルールや記録を、最新版がわかるように整理し、必要な人がいつでも使える状態にしている』とあるため、文書化した情報の作成・更新時に適切な識別及び記述がなされていると判断できるため。"}
波括弧、label、evidence、引用符、区切りの記号は、どの件でも同じです。label に入るのは、達しているか、達していないか、判断できないかの3通りです。でたらめに選んでも当たることがあり、記憶の証拠になりません。取り出せたかどうかが表れるのは、判定の理由である「"evidence": 」以下の文章です。
判定の理由は、入力の中の言葉でできています。示した例では、『決めたルールや記録を…』が、入力に含まれる聞き取りの1文の引き写しです。続く部分も入力に含まれる要求の言い回しです。入力を読ませれば、モデルは学習データを覚えていなくても、同じ文章を組み立てられます。
そこで、入力を読ませずに試しました。
与えたのは、判定の理由の冒頭20文字だけです。続きをモデルに書かせ、学習データの正解と突き合わせます。
あわせて、入力を読ませた場合も試しました。この条件では、モデルが覚えていたのかどうかは分かりません。分かるのは、モデルと入力の両方を手に入れた相手が、どこまで書き出させられるかです。
試したのは200件です。学習データから100件を選び、比較するために準備したデータからも100件を選んで、同じ手順で比べました。
選んだのは、モデルが最も書き出しにくいと考えられる判定の理由を持つデータです。次の3つを満たすものを選んでいます。
- その群にしか出現しない文章であること
- 群の中で1回しか登場しないこと
- 文章が長いこと
3-2. 抽出結果
200件のいずれについても、判定の理由と最後まで一致した文章は出てきませんでした。
先頭から一致した長さは、次のとおりです。
| 件数 | 先頭から一致した長さの平均 | |
|---|---|---|
| 学習データ | 100 | 0.46文字 |
| 比較するために準備したデータ | 100 | 0.51文字 |
最も長く一致したものでも、7文字です。
学習データの側が長く一致したわけではありません。平均では、比較するために準備したデータの側のほうがわずかに長くなっています。
3-3. 入力を読ませた場合の抽出結果
同じ200件について、入力を読ませた場合も試しました。
先頭から一致した長さは、次のとおりです。
| 件数 | 先頭から一致した長さの平均 | |
|---|---|---|
| 学習データ | 100 | 6.08文字 |
| 比較するために準備したデータ | 100 | 4.72文字 |
最も長く一致したもので、67文字です。
入力を読ませると、一致する長さは伸びます。学習データの側は0.46文字から6.08文字に、比較するために準備したデータの側は0.51文字から4.72文字になりました。比較するために準備したデータの側も伸びています。
それでも、判定の理由と最後まで一致した文章は、200件のいずれについても出てきませんでした。
3-4. 繰り返し回数を8回とした場合の抽出結果
取り出せなかった結果が、繰り返し回数によるものかどうかを確かめました。学習データは同じまま、繰り返し回数だけを2回から8回に変えて、学習し直しました。
入力を読ませない条件では、最も長く一致したものが7文字でした。2回の場合と変わりません。
入力を読ませた条件では、最も長く一致した長さが67文字から215文字に伸びました。
学習データの100件のうち2件で、判定の理由がほぼそのまま出てきました。
| 学習データの正解の長さ | 与えた冒頭 | 残り | 先頭から一致した長さ | |
|---|---|---|---|---|
| 1件目 | 236文字 | 20文字 | 216文字 | 215文字 |
| 2件目 | 114文字 | 20文字 | 94文字 | 93文字 |
1件目では、215文字目まで1文字の狂いもなく一致しています。216文字目で、句点が読点に変わりました。モデルは、そこで文章を終えずに、さらに19文字を書いています。
学習データの判定の理由は、次の文章で終わっています。
…運用に寄与していると推測されるため。
モデルが書いた文章は、次のとおりです。
…運用に寄与していると推測されるため、要求の核心を満たしていると判断できる。
最後まで一致したかどうかで数えると、0件です。215文字目まで一致した文章を、0件と数えることになります。
先頭から一致した長さの平均は、次のとおりです。
| 件数 | 繰り返し2回 | 繰り返し8回 | |
|---|---|---|---|
| 学習データ | 100 | 6.08文字 | 4.47文字 |
| 比較するために準備したデータ | 100 | 4.72文字 | 1.12文字 |
平均は下がっています。一部の件でほぼ全文が出るようになったのであって、全体が伸びたのではありません。
取り出せたかどうかは、元の学習データと突き合わせて分かったことです。学習データを持たない相手には、モデルが書いた文章が学習データと一致しているのかどうかを確かめる手立てがありません。
4. 判別と抽出に関する評価
本記事では、レベルBとレベルAの2つを試しました。
| 試したこと | 行ったこと | |
|---|---|---|
|
レベルB 判別 |
学習に使ったかどうかの手がかりが、モデルに残っているかどうかを試しました | 同じ文章について、ファインチューニングを行う前と後で、モデルが同じ文章を出す確率がどれだけ上がったかを求め、学習に使った文章と使っていない文章で比べました |
|
レベルA 抽出 |
学習に使った文章そのものを、モデルに書き出させられるかどうかを試しました | 判定の理由の冒頭20文字を与えて続きを書かせ、書かれた文章を学習データと1文字ずつ突き合わせました |
2つは、成立する条件が異なります。
レベルAが成立したのは、次の2つの条件がそろった場合のみでした。
- 判定に使う文章をモデルに入力すること
- ファインチューニングの繰り返し回数を8回にすること
どちらか一方が欠けると、学習データの文章は出てきませんでした。判定に使う文章を入力したうえで繰り返し回数を8回にすると、それまで出てこなかった文章が、100件のうち2件で出てきました。
学習データの中身が変われば、繰り返し回数が変われば、結果は変わりえます。学習の設定のうち、変えたのは繰り返し回数だけです。ほかの項目は、いずれも1つの値のままとしました。取り出し方も、判定の理由の冒頭20文字を与えて続きを書かせる1つだけです。100件のうち2件について取り出しに成功していましたが、元の学習データがなければ、取り出せたのかどうかを判別できない内容でした。
今回の試行で、繰り返し回数2回のモデルから学習データの文章を書き出させられなかったことは、この設定であれば学習データが守られる、という意味にはなりません。限られた条件で試した結果であり、その条件を1つ変えただけで、結果は変わっています。
レベルBは、どちらもなくても成立しました。
ファインチューニングの繰り返し回数も2回のままで、学習に使った文章と使っていない文章とで、正解と同じ文章を出す確率の上がり方に差が現れました。
取り出せなくても、学習に使ったかどうかの手がかりは残ります。学習に使った文章と使っていない文章とで、正解と同じ文章を出す確率の上がり方には差が現れました。文面が出てこないことと、学習に使った文章について何も分からないことは、別のこととして理解してください。


