From the uDemy course on LLM engineering.
https://www.udemy.com/course/llm-engineering-master-ai-and-large-language-models
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
403 lines
15 KiB
403 lines
15 KiB
WEBVTT |
|
|
|
00:00.260 --> 00:05.780 |
|
というわけで、 これがデータセット・キュレーションに関する最後のビデオとなる。 |
|
|
|
00:05.810 --> 00:08.120 |
|
データセットのキュレーションにうんざりしていたのだろう。 |
|
|
|
00:08.120 --> 00:10.970 |
|
さあ、 あと1枚で完成だ。 |
|
|
|
00:11.000 --> 00:16.370 |
|
だから我々は、 誇るべき優れたデータセットを作り上げたのだ。 |
|
|
|
00:16.370 --> 00:19.610 |
|
では、 最終チェックをしてみよう。 |
|
|
|
00:19.760 --> 00:23.030 |
|
あの、 ひとつ質問していいですか? |
|
|
|
00:23.060 --> 00:24.710 |
|
まあ、 とにかく聞いてみるよ。 |
|
|
|
00:24.710 --> 00:30.740 |
|
商品の価格が関係している可能性はありますか? |
|
|
|
00:30.740 --> 00:35.570 |
|
これは、 そのアイテムの説明文の長さに相関している。 |
|
|
|
00:35.570 --> 00:41.960 |
|
高価格のものほど情報量が多いという状況を想像するかもしれない。 |
|
|
|
00:41.960 --> 00:44.420 |
|
そして、 それは私たちが理解する価値のあることだろう。 |
|
|
|
00:44.600 --> 00:48.170 |
|
ああ、 それはモデルがすぐに学ぶことだからね。 |
|
|
|
00:48.170 --> 00:52.730 |
|
そして、 伝統的なアプローチに目を向けることで、 私たちがどのようなアプローチを取るべきか、 おそらく良い感覚を与えてくれる。 |
|
|
|
00:52.730 --> 01:01.220 |
|
これは、 X軸の各サイズを示す、 小さな散布図だ。 |
|
|
|
01:01.250 --> 01:07.970 |
|
説明文の長さが表示され、 Y軸には価格が表示される。 |
|
|
|
01:08.060 --> 01:12.350 |
|
では、 全サンプルのデータを見てみよう。 |
|
|
|
01:12.740 --> 01:13.700 |
|
それでは、 どうぞ。 |
|
|
|
01:13.700 --> 01:15.950 |
|
ここに素敵な写真がある。 |
|
|
|
01:15.950 --> 01:20.210 |
|
だから、 この写真には40万点がある。 |
|
|
|
01:20.360 --> 01:23.330 |
|
そして、 それは見るべきものだ。 |
|
|
|
01:23.330 --> 01:26.420 |
|
消化すべきことがたくさんあるのがわかるだろう。 |
|
|
|
01:26.450 --> 01:34.490 |
|
このような境界点では価格が高くなる傾向があるため、 このような興味深いパターンが起きていることがわかる。 |
|
|
|
01:34.490 --> 01:43.370 |
|
799ドルの商品、 うーん、 もちろん、 もっと安い商品もたくさんあることはお分かりいただけるだろう。 |
|
|
|
01:43.370 --> 01:59.480 |
|
そして、 説明文が長い商品ほど、 高価な商品である傾向があることがわかる。 |
|
|
|
01:59.480 --> 02:03.750 |
|
しかし、 その点で有意な相関関係があるかどうかは明らかではない。 |
|
|
|
02:03.750 --> 02:06.750 |
|
だから、 何かはあるんだけど、 大したことではないんだ。 |
|
|
|
02:06.750 --> 02:15.270 |
|
そのため、 従来の機械学習では、 このようなことを調べようとしても、 おそらく大きな相関関係は見いだせないと思われる。 |
|
|
|
02:15.270 --> 02:23.610 |
|
つまり、 データのさまざまな側面を理解するために思いつく図の一例です。 |
|
|
|
02:24.330 --> 02:27.510 |
|
もうひとつ、 トークンについてもう少し話したい。 |
|
|
|
02:27.750 --> 02:34.830 |
|
オープンソースのモデルに対して実際にトレーニングするようになったら、 トークンをもっとたくさん使うことになるだろうが、 |
|
|
|
02:34.830 --> 02:38.640 |
|
今はトークンに注目する価値がある。 |
|
|
|
02:38.640 --> 02:48.630 |
|
そこで、 この関数レポートを書きました。 この関数は、 アイテムを受け取り、 プロンプトを、 まず、 トレーニング中に使用される完全なトレーニングプロンプトを表示します。 |
|
|
|
02:48.630 --> 02:54.930 |
|
そして、 そのプロンプトの最後の10個のトークンをデコードする。 |
|
|
|
02:54.930 --> 02:59.010 |
|
つまり、 最後の10個のトークンに対応するテキストの断片を見ることになる。 |
|
|
|
02:59.010 --> 03:02.250 |
|
そして、 なぜ最後の10人なのか不思議に思っているのなら、 すぐにわかるだろう。 |
|
|
|
03:02.250 --> 03:08.550 |
|
では、 4万番というランダムな数字を選んで実行してみよう。 |
|
|
|
03:08.580 --> 03:09.060 |
|
オーケー。 |
|
|
|
03:09.090 --> 03:12.840 |
|
というわけで、 こんな文章で申し訳ない。 |
|
|
|
03:12.840 --> 03:18.390 |
|
このプロンプトは、 LLMに送られて学ぶことになる。 |
|
|
|
03:18.630 --> 03:22.170 |
|
ええと、 これは1ドル単位でいくらですかと聞かれそうですね。 |
|
|
|
03:22.170 --> 03:23.790 |
|
そして、 それが説明文になる。 |
|
|
|
03:23.790 --> 03:30.090 |
|
そして価格は、 そしてこれは1ドル未満を四捨五入した価格である。 |
|
|
|
03:30.180 --> 03:37.860 |
|
項目コードを見ればわかるが、 トレーニングのプロンプトを作成する際、 1ドル未満を四捨五入している。 |
|
|
|
03:37.950 --> 03:44.520 |
|
最後の10個のトークンを見れば、 何が起こっているかがわかるだろう。 |
|
|
|
03:44.550 --> 03:46.110 |
|
その10トークンとは何ですか? |
|
|
|
03:46.110 --> 03:53.010 |
|
そして、 最後の数トークンに関して、 価格が1つのトークンにマップされることを示したかった。 |
|
|
|
03:53.040 --> 04:07.410 |
|
それは、 単語の開始で再びドルになる前に、 単語の開始スペースのトークンを取得することである。 |
|
|
|
04:07.680 --> 04:12.450 |
|
そしてこれは、 私が言うように、 llamaトークナイザーの機能なのだ。 |
|
|
|
04:12.450 --> 04:18.000 |
|
GPTと同様、 3桁の数字ごとに個別のトークンがある。 |
|
|
|
04:18.000 --> 04:21.120 |
|
他のトークナイザーにはないものもある。 |
|
|
|
04:21.210 --> 04:27.120 |
|
僕らのプロジェクトには必要ないことだけど、 後々のことを考えると少しシンプルになる。 |
|
|
|
04:27.180 --> 04:32.250 |
|
そして、 その期間はトークンを1つ獲得し、 . 00はトークンを1つ獲得する。 |
|
|
|
04:32.280 --> 04:35.130 |
|
別のサンプルをやってみよう。 |
|
|
|
04:36.930 --> 04:42.000 |
|
全く別の、 あー、 全く別の場所で何かやろう。 |
|
|
|
04:42.720 --> 04:44.100 |
|
万人。 |
|
|
|
04:44.280 --> 04:47.550 |
|
そして、 これはむしろ安いものだ。 |
|
|
|
04:47.580 --> 04:51.930 |
|
価格は9000ドル。 |
|
|
|
04:51.960 --> 04:58.110 |
|
データセットの最後に近い398,000を選んでみよう。 |
|
|
|
04:58.620 --> 05:05.740 |
|
そして、 これは......コイルオーバー・ダンパー・キット。 |
|
|
|
05:05.740 --> 05:10.240 |
|
そしてこの価格は765ドル。 |
|
|
|
05:10.240 --> 05:15.430 |
|
そして、 765が1つのトークンにマッピングされていることがもう一度わかるだろう。 |
|
|
|
05:15.430 --> 05:25.840 |
|
というわけで、 このサンプルはもちろん一番安いものから順に並んでいる。 |
|
|
|
05:25.840 --> 05:28.990 |
|
だから、 1ドル単位で四捨五入した。 |
|
|
|
05:28.990 --> 05:36.100 |
|
これは、 サンプルの下位、 つまりウムな部分で最も安く、 サンプルの上位で最も高い順にソートされている。 |
|
|
|
05:36.100 --> 05:46.780 |
|
そして、 ここに書いてあるように、 1から999までのすべての数字が1つのトークンにマッピングされている、 という効果が得られていることを自分で納得できるだろう。 |
|
|
|
05:46.780 --> 05:55.870 |
|
そしてもう1度言いますが、 量、 ガンマ、 ファイの3つのトークナイザーを見れば、 そうではないことがわかるでしょう。 |
|
|
|
05:55.960 --> 06:02.350 |
|
うーん、 これは後でちょっと便利なんだけど、 必須じゃないし、 絶対に後回しなんだ。 |
|
|
|
06:02.350 --> 06:08.620 |
|
クァンタム・ジェミニ・スリーのような他のモデルを使って実験したい場合は、 単に入れ替えるだけで機能する。 |
|
|
|
06:08.650 --> 06:15.430 |
|
ここでは、 3桁の数字に対応する1つのトークンではなく、 複数のトークンにマッピングされることがわかるだろう。 |
|
|
|
06:16.690 --> 06:20.260 |
|
よし、 ほっと一息だ。 |
|
|
|
06:20.260 --> 06:22.630 |
|
私たちはデータ・キュレーションを通してそれを成し遂げてきた。 |
|
|
|
06:22.630 --> 06:27.460 |
|
最後の仕上げは、 ハブにアップロードすることだ。 |
|
|
|
06:27.460 --> 06:35.710 |
|
まずはデータセットをシャッフルしてみよう。 安い順に並べ替えたのではまったく意味がない。 |
|
|
|
06:35.710 --> 06:38.650 |
|
まず、 ごちゃごちゃしたデータセットが必要だ。 |
|
|
|
06:38.800 --> 06:44.350 |
|
まず最初に、 ランダムシードを設定します。 これは、 常にまったく同じデータセットで作業していることを確認したいからで、 |
|
|
|
06:44.350 --> 06:51.340 |
|
私が行うのとまったく同じことを再現して、 同じ結果を得ることができます。 |
|
|
|
06:51.520 --> 06:59.290 |
|
私たちはランダムを使っている。 shuffleでシャッフルして、 最初の40万件をトレーニング・データセットとする。 |
|
|
|
06:59.290 --> 07:01.900 |
|
そして次の2000をテストセットとする。 |
|
|
|
07:01.930 --> 07:03.220 |
|
今、 聞いたよ。 |
|
|
|
07:03.250 --> 07:05.230 |
|
データサイエンティストたちよ。 |
|
|
|
07:05.260 --> 07:11.380 |
|
これは通常、 少なくとも5%か10%のテストデータセットを必要とする。 |
|
|
|
07:11.470 --> 07:17.350 |
|
8000ものデータがあるんだから。 |
|
|
|
07:17.350 --> 07:21.490 |
|
もちろん、 より大きなデータセットを得るためにサンプルを増やすこともできる。 |
|
|
|
07:21.520 --> 07:27.310 |
|
テストに使うのは数百本程度だろうから、 必要ないだろう。 |
|
|
|
07:27.310 --> 07:30.160 |
|
そうすることで、 非常に正確な結果が得られる。 |
|
|
|
07:30.160 --> 07:34.090 |
|
そして、 より多くの相手とテストを続ければ、 収穫は減っていく。 |
|
|
|
07:34.090 --> 07:39.340 |
|
このプロジェクトの目的にはこれで十分だが、 ベストプラクティスである。 |
|
|
|
07:39.370 --> 07:40.630 |
|
ベストプラクティスかどうかは分からない。 |
|
|
|
07:40.660 --> 07:47.620 |
|
少なくとも5%はテスト用データセットとして確保するのが一般的で、 前にお話ししたように、 |
|
|
|
07:47.620 --> 07:52.810 |
|
テスト用と検証用に分けて5%を確保することもある。 |
|
|
|
07:52.870 --> 08:00.880 |
|
この目的には必要ないが、 望むのであれば、 追加データセットとして管理することもできる。 |
|
|
|
08:01.030 --> 08:02.300 |
|
うーん、 でもとにかく、 そうしよう。 |
|
|
|
08:02.300 --> 08:03.320 |
|
それをごちゃ混ぜにする。 |
|
|
|
08:03.320 --> 08:08.630 |
|
400,000のトレーニングデータセットと、 2000のテストセットに分かれている。 |
|
|
|
08:08.660 --> 08:14.480 |
|
最初のテスト要素を見てみよう。 |
|
|
|
08:14.480 --> 08:19.640 |
|
あなたが覚えているテストのプロンプトは、 答えを明らかにしないプロンプトです。 |
|
|
|
08:19.640 --> 08:25.310 |
|
まずトレーニングのプロンプトを見て、 次にテストのプロンプトを見ます。 |
|
|
|
08:25.340 --> 08:27.470 |
|
トレーニングプロンプトは答えを持っているものだ。 |
|
|
|
08:27.470 --> 08:31.310 |
|
だから、 トレーニングのプロンプトには、 1ドル単位でいくらと書いてある。 |
|
|
|
08:31.310 --> 08:35.120 |
|
デルファイ製の燃料ポンプモジュールだ。 |
|
|
|
08:35.390 --> 08:37.430 |
|
うーん、 そうだね。 |
|
|
|
08:37.460 --> 08:37.910 |
|
どうだろう。 |
|
|
|
08:37.910 --> 08:39.470 |
|
227ドルである。 |
|
|
|
08:39.470 --> 08:41.300 |
|
私だったら、 そんなことはまったくわからなかっただろう。 |
|
|
|
08:41.300 --> 08:50.240 |
|
つまり、 これはトレーニングの一環としてLMに送られるものの例である。 |
|
|
|
08:50.480 --> 08:54.380 |
|
では、 テストプロンプトを見てみよう。 |
|
|
|
08:54.410 --> 09:02.990 |
|
今、 テストプロンプトは、 説明文はあるが値段はない、 使用されるものを見せようとしている。 |
|
|
|
09:02.990 --> 09:07.400 |
|
これがテストセットの最初の項目だ。 |
|
|
|
09:07.400 --> 09:09.350 |
|
そうだ。 |
|
|
|
09:09.470 --> 09:22.430 |
|
最初の250のテストポイントの価格分布を見てみましょう。 |
|
|
|
09:22.430 --> 09:26.750 |
|
そして、 ここにはさまざまな価格の健康的な広がりがあるのがわかるだろう。 |
|
|
|
09:26.780 --> 09:33.410 |
|
高価なものを扱えるモデルかどうかが試されるようなものが、 高いエリアにはたくさんある。 |
|
|
|
09:33.410 --> 09:42.530 |
|
そして、 私たちのテスト・データ・セットでは、 価格のバラエティーに富んでいる。 |
|
|
|
09:43.340 --> 09:51.650 |
|
さて、 最後に、 これを一連のトレーニング・プロンプトとテスト・プロンプトに変えますが、 これは、 |
|
|
|
09:51.650 --> 09:58.910 |
|
先ほど見たプロンプトとテスト・プロンプトを、 価格とともに抜き出すだけです。 |
|
|
|
09:59.390 --> 10:03.590 |
|
この小さなコードが、 ハグする顔にアップロードする。 |
|
|
|
10:03.620 --> 10:14.330 |
|
データセットのFromdictを呼び出し、 それをデータセットのdictに入れることで、 抱きつき顔ハブに適したデータセットオブジェクトに変える。 |
|
|
|
10:15.050 --> 10:22.940 |
|
そして最後に、 この行があなたのデータセットをハギング・フェイス・ハブにアップロードし、 あなたがそれを引き続き使用したり、 |
|
|
|
10:22.940 --> 10:26.000 |
|
将来ダウンロードできるようにします。 |
|
|
|
10:26.000 --> 10:33.110 |
|
でも、 もう走ったから走らせるつもりはないよ。 |
|
|
|
10:33.110 --> 10:35.300 |
|
そして、 これはあなたのユーザー名を入れるためのものです。 |
|
|
|
10:35.300 --> 10:46.100 |
|
これは僕のユーザーネームにアップロードしてあるんだ。 |
|
|
|
10:46.100 --> 10:51.800 |
|
だから、 その方法でデータを取り出すこともできる。 |
|
|
|
10:51.830 --> 10:55.820 |
|
もし、 このデータキュレーションをすべてショートカットしたいのであれば、 できればそうしたくないだろう。 |
|
|
|
10:56.210 --> 11:07.230 |
|
そして最後に、 この列車をピックルファイルにして、 コレクションをテストします。 |
|
|
|
11:07.230 --> 11:12.270 |
|
このリストをピクルスにしてファイルに保存しておくと、 |
|
|
|
11:12.300 --> 11:16.050 |
|
将来のために読み込むことができる。 |
|
|
|
11:16.050 --> 11:23.520 |
|
Pythonのピクルスに慣れている人なら、 Pythonのオブジェクトをファイルにダンプする超簡単な方法だ。 |
|
|
|
11:23.520 --> 11:28.710 |
|
これを実行すると、 test dot pickleとtrain dot pickleという2つの新しいファイルができ、 |
|
|
|
11:28.710 --> 11:32.340 |
|
トレーニング・データとテスト・データが格納される。 |
|
|
|
11:33.090 --> 11:36.900 |
|
これでデータのキュレーション作業は完了した。 |
|
|
|
11:36.900 --> 11:44.820 |
|
データセットをもっと調査し、 異なるデータ・ポイントをトークン化する練習をしたときに、 |
|
|
|
11:44.970 --> 11:59.490 |
|
3桁の数字が常に1つのトークンにトークン化され、 それらのトークンの感覚を得ることができるかどうかを確認してください。 |
|
|
|
11:59.820 --> 12:03.720 |
|
それでは、 またスライドをご覧いただきながら、 総括をしたいと思います。
|
|
|