0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ファインチューニングしたLLMから学習データは取り出せないのか試してみた

0
Last updated at Posted at 2026-09-26

社内の文書を学習させた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件ごとに、次の手順で測りました。

アダプタを外した状態で正解の文章の値を出し、続けてアダプタを入れた状態で同じ文章の値を出し、差を求めます。

例として、学習データの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文の引き写しです。続く部分も入力に含まれる要求の言い回しです。入力を読ませれば、モデルは学習データを覚えていなくても、同じ文章を組み立てられます。

そこで、入力を読ませずに試しました。

図2 入力を読ませない条件

与えたのは、判定の理由の冒頭20文字だけです。続きをモデルに書かせ、学習データの正解と突き合わせます。

あわせて、入力を読ませた場合も試しました。この条件では、モデルが覚えていたのかどうかは分かりません。分かるのは、モデルと入力の両方を手に入れた相手が、どこまで書き出させられるかです。

図3 入力を読ませる条件

試したのは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回のままで、学習に使った文章と使っていない文章とで、正解と同じ文章を出す確率の上がり方に差が現れました。

取り出せなくても、学習に使ったかどうかの手がかりは残ります。学習に使った文章と使っていない文章とで、正解と同じ文章を出す確率の上がり方には差が現れました。文面が出てこないことと、学習に使った文章について何も分からないことは、別のこととして理解してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?