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.
526 lines
19 KiB
526 lines
19 KiB
WEBVTT |
|
|
|
00:00.620 --> 00:03.530 |
|
そして今、 データセットをキュレーションする時が来た。 |
|
|
|
00:03.530 --> 00:09.110 |
|
ハグした顔から得たデータ・ポイントを、 Pythonのオブジェクト、 |
|
|
|
00:09.140 --> 00:16.430 |
|
itemというクラスに変換します。 |
|
|
|
00:16.430 --> 00:22.310 |
|
とても重要なことなので、 実は別のモジュール項目を設定したんだ。 このクラスはJupyterノートブックではなく、 |
|
|
|
00:22.310 --> 00:35.630 |
|
独自のモジュールにPythonのコードとして書いた。 |
|
|
|
00:35.630 --> 00:47.750 |
|
その中には、 データをきれいにするために、 データを分解するための面倒なコードが含まれている。 |
|
|
|
00:47.750 --> 00:54.050 |
|
でも、 もっと詳しく見て、 もう少し詳しく理解するための練習があるんだ。 |
|
|
|
00:54.110 --> 00:59.870 |
|
だから、 独自のモジュール項目になっているんだ。 pyで、 クラス項目を定義しています。 |
|
|
|
00:59.890 --> 01:11.560 |
|
そして、 それを始める前に、 ベースモデルという定数をラマ3に設定することから始めることを指摘しておく。 |
|
|
|
01:11.560 --> 01:11.560 |
|
180億バリアントのベースモデル。 |
|
|
|
01:11.920 --> 01:17.380 |
|
今、 私たちがやっていることとラマ・モデルがいったい何の関係があるのか、 と言われるかもしれない。 |
|
|
|
01:17.380 --> 01:20.080 |
|
オープンソースに進むのは来週だ。 |
|
|
|
01:20.080 --> 01:23.560 |
|
今週は、 微調整のためのフロンティアモデルの使い方についてだ。 |
|
|
|
01:23.950 --> 01:25.330 |
|
その答えはこうだ。 |
|
|
|
01:25.330 --> 01:36.970 |
|
llamaトークナイザーの最大トークン数として、 ある一定のトークン数に収まるようにデータセットを作成します。 |
|
|
|
01:36.970 --> 01:41.200 |
|
なぜそうするかというと、 オープンソースのモデルを使うことになったときに、 より安く、 |
|
|
|
01:41.200 --> 01:43.900 |
|
より簡単にトレーニングできるからだ。 |
|
|
|
01:43.900 --> 01:50.530 |
|
また、 フロンティア・モデルを使用することで安くなる。 |
|
|
|
01:50.530 --> 02:01.690 |
|
だから、 プロンプトを作成し、 それを一定のトークン数に固定するとき、 フロンティアモデルとオープンソースモデルの両方が同じ量の情報を得られるようにしたい。 |
|
|
|
02:01.690 --> 02:09.190 |
|
もっと予算があり、 もっと大きなGPUで訓練したり、 フロンティアモデルでもっと予算があれば、 カットオフの幅を広げて、 |
|
|
|
02:09.190 --> 02:14.260 |
|
もっともっと大量のテキストを扱えるようになる。 |
|
|
|
02:14.260 --> 02:19.570 |
|
でも、 それぞれのデータにはたくさんのテキストがあるはずだ。 |
|
|
|
02:19.570 --> 02:25.270 |
|
だから、 フロンティア・モデルとオープンソース・モデルのトレーニングはこれで十分なのだ。 |
|
|
|
02:25.870 --> 02:30.670 |
|
とにかく、 これがllamaモデルを見ている理由だ。 文字数が正しいかどうかをチェックするときに、 |
|
|
|
02:30.670 --> 02:34.660 |
|
このモデルのトークナイザーを使うことになるからだ。 |
|
|
|
02:34.840 --> 02:42.280 |
|
各アイテムには、 タイトル、 価格、 カテゴリー(家電製品など)、 |
|
|
|
02:42.310 --> 02:49.000 |
|
トークン数(トークンの数)が設定されます。 |
|
|
|
02:49.000 --> 03:00.660 |
|
そして最も重要なのは、 LLMに入力されるテキストとなるプロンプトだ。 |
|
|
|
03:01.770 --> 03:07.080 |
|
つまり、 ごく簡単に言うと、 このコードに目を通し、 私は何も悪いことはしていない、 |
|
|
|
03:07.080 --> 03:15.810 |
|
これはすべて、 健全な家事と文字列の掃除に過ぎない、 と納得することだ。 |
|
|
|
03:15.810 --> 03:24.360 |
|
スクラブ・ディテールという機能があって、 モデルにとって邪魔になりそうなものをテキストから削除するんだ。 |
|
|
|
03:24.390 --> 03:27.030 |
|
バッテリーが含まれているようなものだ。 |
|
|
|
03:27.150 --> 03:33.060 |
|
それから、 この中にある "メーカー "という言葉。 |
|
|
|
03:33.060 --> 03:39.870 |
|
そのため、 関連性がない、 または関連性が大きくないものがたくさんあり、 そこにあることで貴重なトークンを消費するよりは、 |
|
|
|
03:39.900 --> 03:44.310 |
|
取り除いたほうがいいと思った。 |
|
|
|
03:45.030 --> 03:59.990 |
|
スクラブという方法があって、 変な文字を一掃してくれるし、 正規表現忍者のために正規表現を使って複数のスペースを1つのスペースに変換してくれる。 |
|
|
|
04:00.080 --> 04:03.500 |
|
あなたにとっては簡単なことでしょう。 |
|
|
|
04:03.530 --> 04:13.280 |
|
また、 このスクリプトを再利用することで、 文字列のさまざまな問題を取り除くことができる。 |
|
|
|
04:13.280 --> 04:18.680 |
|
また、 Jupyterノートブックでこれをテストして、 書いてあるとおりに動いていることを確認することもできる。 |
|
|
|
04:19.070 --> 04:30.500 |
|
というのも、 この行は、 私たちの特別なケースに役立つちょっとしたトリックを入れただけだからだ。 |
|
|
|
04:30.530 --> 04:38.180 |
|
アマゾンの商品説明に品番を引用しているものが多いことに気づいた。 |
|
|
|
04:38.180 --> 04:42.650 |
|
だから彼らは、 これは部品番号と互換性があると言うんだ。 |
|
|
|
04:42.650 --> 04:50.720 |
|
そして、 これらの部品番号は多くの場合、 8桁、 8文字以上で、 文字と数字を含んでいる。 |
|
|
|
04:50.720 --> 04:59.360 |
|
トークンに変換されるときに、 トークンをたくさん使ってしまうという問題がある。 |
|
|
|
04:59.360 --> 05:11.330 |
|
そうすると、 トークンの無制限な容量を、 私たちのモデルにはまったく関係のない部品番号を表すトークンでいっぱいにしてしまうことになる。 |
|
|
|
05:11.360 --> 05:19.190 |
|
つまり、 この行は、 8文字以上で数字を含む単語があれば、 その単語をスクラップする、 |
|
|
|
05:19.190 --> 05:23.180 |
|
というものだ。 |
|
|
|
05:23.180 --> 05:24.950 |
|
気が散るだろうね。 |
|
|
|
05:25.160 --> 05:32.720 |
|
このことを強調したのは、 やはり、 データを掘り下げて初めてこのような発見に出くわすということを示すためです。 |
|
|
|
05:32.750 --> 05:37.190 |
|
たくさんの例を見て、 こういうことが起こっていることを知った。 |
|
|
|
05:37.190 --> 05:39.410 |
|
これを試す瞬間がある。 |
|
|
|
05:39.410 --> 05:44.630 |
|
そしてモデルを再実行すると、 ここ数週間で1度か2度やったことがあると思うが、 |
|
|
|
05:44.930 --> 05:51.860 |
|
データがよりリッチになり、 より正確になっているため、 改善されていることに気づく。 |
|
|
|
05:52.460 --> 05:56.080 |
|
だから、 それはプロセスの重要な部分なんだ。 |
|
|
|
05:56.530 --> 06:10.180 |
|
そして、 データ・ポイントを受け取り、 さまざまなスクラブやストリッピングを行い、 最終的にプロンプトに変換するparseメソッドを使用する。 |
|
|
|
06:10.420 --> 06:14.890 |
|
そしてプロンプトとともに、 そのプロンプトに含まれるトークンの数をカウントする。 |
|
|
|
06:14.890 --> 06:17.440 |
|
すぐにプロンプトが表示されます。 |
|
|
|
06:17.440 --> 06:23.110 |
|
しかし、 プロンプトはLLMに合格するためのものであり、 それを完成させることが求められる。 |
|
|
|
06:23.230 --> 06:25.510 |
|
そして、 これにはいくらかかるんだ? |
|
|
|
06:25.510 --> 06:27.490 |
|
その代償は大きい。 |
|
|
|
06:28.390 --> 06:31.870 |
|
プロンプトを見る機能もあるだろう。 |
|
|
|
06:31.900 --> 06:36.580 |
|
また、 テストプロンプトと呼ばれるものもあり、 これはプロンプトと同じものだが、 |
|
|
|
06:36.580 --> 06:38.410 |
|
答えは明らかにされない。 |
|
|
|
06:38.440 --> 06:42.370 |
|
このプロンプトはトレーニング中に使用され、 そこには答えが書かれている。 |
|
|
|
06:42.370 --> 06:48.160 |
|
そのため、 トレーニングの間に、 モデルはテスト時に答えを予測する能力がどんどん向上していく。 |
|
|
|
06:48.160 --> 06:50.620 |
|
答えは見せたくない。 |
|
|
|
06:50.620 --> 06:54.540 |
|
テキストを与えて、 それが正しい答えを導き出すかどうかを確かめたい。 |
|
|
|
06:54.540 --> 06:58.680 |
|
トレーニングのプロンプトとテストのプロンプト。 |
|
|
|
06:58.710 --> 07:03.660 |
|
後で、 データをトレーニングセットとテストセットに分けることについて話すつもりだ。 |
|
|
|
07:03.900 --> 07:05.520 |
|
もっと見ることができるだろう。 |
|
|
|
07:05.550 --> 07:07.350 |
|
後でもっとはっきりする。 |
|
|
|
07:08.160 --> 07:10.740 |
|
これがアイテム・クラスだ。 |
|
|
|
07:10.740 --> 07:13.650 |
|
そして、 もっとこの記事に目を通すことをお勧めする。 |
|
|
|
07:13.650 --> 07:17.880 |
|
しかし、 恐れることはない。 私たちは、 これらのアイテムと多くの時間を過ごし、 それらを眺めることになるのだ。 |
|
|
|
07:17.880 --> 07:21.840 |
|
それで、 この機能が何をするものなのか、 よく理解できるだろう。 |
|
|
|
07:21.990 --> 07:33.120 |
|
さて、 ここに戻って、 これから行うのは、 データセットの中の価格を持つすべてのものに対して、 これらのアイテム・オブジェクトを1つ作成することだ。 |
|
|
|
07:33.450 --> 07:36.090 |
|
では、 今すぐ実行してみよう。 |
|
|
|
07:37.110 --> 07:40.620 |
|
つまり、 これはそのコードの中を走っているのだ。 |
|
|
|
07:40.620 --> 07:43.200 |
|
それはゴシゴシ洗うことだ。 |
|
|
|
07:43.200 --> 07:45.540 |
|
部品番号のようなものを削除しているんだ。 |
|
|
|
07:45.540 --> 07:51.540 |
|
変な文字をスペースに置き換えている。 |
|
|
|
07:51.870 --> 08:00.140 |
|
そして、 プロンプトを作成し、 そのプロンプトが適切な数のトークンに収まるようにするのだ。 |
|
|
|
08:00.140 --> 08:11.450 |
|
つまり、 そのすべてが今起きていることであり、 4万台以上の家電製品、 つまり価格のある家電製品に対してそれを行うことになる。 |
|
|
|
08:11.570 --> 08:14.870 |
|
だから、 もうそろそろ終わるはずだ。 |
|
|
|
08:17.240 --> 08:20.990 |
|
それを終えている間に、 私は私たちに見てもらうための準備をする。 |
|
|
|
08:20.990 --> 08:21.680 |
|
終わったよ。 |
|
|
|
08:21.830 --> 08:22.490 |
|
これでよし。 |
|
|
|
08:22.490 --> 08:26.750 |
|
では、 その中の最初の1枚を見てみよう。 |
|
|
|
08:28.040 --> 08:33.440 |
|
そこで最初に紹介するのが、 ラックローラーとスタッドのアッセンブリーキットだ。 |
|
|
|
08:33.440 --> 08:37.580 |
|
アミ・パーツのフルパックは、 ブラブラブラに代わる。 |
|
|
|
08:37.610 --> 08:43.940 |
|
これが商品のタイトルで、 これが9ドルの値段だ。 |
|
|
|
08:43.940 --> 08:46.910 |
|
そして、 そのことはアイテムのタイトルにも記されている。 |
|
|
|
08:46.910 --> 08:50.390 |
|
こういう部品番号、 こういう長い部品番号がある。 |
|
|
|
08:50.420 --> 08:51.260 |
|
もうひとつ見てみよう。 |
|
|
|
08:51.260 --> 08:52.980 |
|
その中の最初の項目を見てみよう。 |
|
|
|
08:53.760 --> 08:56.310 |
|
繰り返すが、 最初の項目はこうだ。 |
|
|
|
08:56.340 --> 09:00.750 |
|
ドアピボットブロック対応。 |
|
|
|
09:00.780 --> 09:01.680 |
|
ケンモア・キッチンエイド |
|
|
|
09:01.680 --> 09:03.480 |
|
メイタグのワールプール冷蔵庫。 |
|
|
|
09:03.510 --> 09:06.090 |
|
ここにもたくさんの部品番号がある。 |
|
|
|
09:06.300 --> 09:18.390 |
|
では、 この関数がアイテムを作成したというプロンプトを見たらどうなるか見てみよう。 |
|
|
|
09:18.390 --> 09:20.070 |
|
もう一度やってみてもいい。 |
|
|
|
09:21.060 --> 09:22.260 |
|
それを印刷しよう。 |
|
|
|
09:22.260 --> 09:25.740 |
|
そのため、 きれいな空行でフォーマットされて表示される。 |
|
|
|
09:28.410 --> 09:30.930 |
|
プロンプトにはこう書いてある。 |
|
|
|
09:30.930 --> 09:33.570 |
|
1ドル単位でいくらかかりますか? |
|
|
|
09:33.600 --> 09:35.640 |
|
それについては1ドル単位で詳しく話そう。 |
|
|
|
09:35.670 --> 09:36.810 |
|
後の時代には |
|
|
|
09:36.810 --> 09:42.300 |
|
なぜそうすることにしたのか、 そのメリットとデメリットについて話そう。 |
|
|
|
09:42.300 --> 09:45.210 |
|
では、 1ドル単位でいくらかかるのか。 |
|
|
|
09:45.960 --> 09:52.780 |
|
そしてここに、 見出しのための1行と、 説明のための1行がある。 |
|
|
|
09:52.780 --> 10:00.970 |
|
そしておわかりになるのは、 案の定、 これらの部品番号はこの説明から抜き出され、 切り捨てられたものだということだ。 |
|
|
|
10:00.970 --> 10:03.760 |
|
トークンの数が一定数に達したらね。 |
|
|
|
10:03.760 --> 10:09.100 |
|
実際、 180トークン弱になる。 |
|
|
|
10:09.100 --> 10:10.930 |
|
それがここにある。 |
|
|
|
10:11.110 --> 10:16.300 |
|
そして、 これを読めば、 その品物そのものについての豊かな記述であることがわかる。 |
|
|
|
10:16.300 --> 10:18.730 |
|
トレーニングにはこれで十分だろう。 |
|
|
|
10:19.330 --> 10:21.760 |
|
次を見てみよう。 |
|
|
|
10:22.000 --> 10:25.570 |
|
もちろん、 これが私たちのピボット・ブロックだ。 |
|
|
|
10:25.600 --> 10:27.130 |
|
ドアピボットブロック。 |
|
|
|
10:27.160 --> 10:33.070 |
|
背番号100、 アイスメーカー・メカを目指そう。 |
|
|
|
10:33.190 --> 10:35.650 |
|
これはサムスンの交換部品です。 |
|
|
|
10:36.100 --> 10:41.200 |
|
ここには部品や交換用パーツがたくさんあることにもお気づきだろう。 |
|
|
|
10:41.200 --> 10:50.400 |
|
ここでもまた、 以前我々が見たように、 このスペースは、 交換部品のような低価格の部品によって混雑する可能性がある。 |
|
|
|
10:50.400 --> 10:56.460 |
|
やや意外だが、 この部品は118ドルもするので、 そう簡単な部品ではない。 |
|
|
|
10:56.880 --> 11:02.310 |
|
このサムスン製氷機のメカが必要ないことを祈るよ。 |
|
|
|
11:03.180 --> 11:09.120 |
|
そう、 これはトレーニングのプロンプトを見ているんだ。 |
|
|
|
11:09.120 --> 11:12.330 |
|
これがトレーニング中にパスするものだ。 |
|
|
|
11:12.330 --> 11:22.830 |
|
そして、 モデルにはこれが与えられ、 トレーニング中にこの価格を再現する最善の方法を学び始める。 |
|
|
|
11:22.830 --> 11:24.810 |
|
テスト中はどうなんだ。 |
|
|
|
11:24.810 --> 11:29.010 |
|
そのモデルが役に立っているかどうかを評価する時はどうだろう? |
|
|
|
11:29.010 --> 11:35.880 |
|
では、 アイテム番号100のこの男を見て、 テスト時間になったらどうするか見てみよう。 |
|
|
|
11:35.880 --> 11:37.260 |
|
私たちはそうする。 |
|
|
|
11:39.660 --> 11:42.600 |
|
これをモデルに提供する。 |
|
|
|
11:42.630 --> 11:46.590 |
|
まったく同じだが、 ここで終わっている。 |
|
|
|
11:46.620 --> 11:54.420 |
|
そしてもちろん、 モデルはこのような例を数多く見てきており、 さまざまな異なるアイテムをカバーしているため、 |
|
|
|
11:54.420 --> 12:10.740 |
|
実行時に再びこのような例を見せられたときに、 どのようにしてこの価格を完成させればよいかを知っている。 |
|
|
|
12:12.030 --> 12:12.960 |
|
分かった。 |
|
|
|
12:12.990 --> 12:22.230 |
|
これらのアイテムに通常いくつのトークンが入っているのか、 別の図を使って見てみよう。 |
|
|
|
12:22.230 --> 12:28.860 |
|
そしておわかりのように、 トークンの数が最も多いのは178である。 |
|
|
|
12:28.890 --> 12:32.850 |
|
平均は176。 |
|
|
|
12:32.850 --> 12:35.010 |
|
本当にぎっしり詰まっているんだ。 |
|
|
|
12:35.340 --> 12:43.650 |
|
だから、 私たちは一般的に、 この程度の情報を持つデータセットを選択し、 作成してきた。 |
|
|
|
12:43.650 --> 12:47.250 |
|
トークンは最大180枚。 |
|
|
|
12:47.250 --> 12:51.470 |
|
また、 フロンティア・モデルを使用する場合にも、 |
|
|
|
12:51.470 --> 13:00.350 |
|
コストを低く抑えることができる。 |
|
|
|
13:01.640 --> 13:02.450 |
|
オーケー。 |
|
|
|
13:02.450 --> 13:09.800 |
|
そして、 選んだアイテムの価格分布を見てみよう。 |
|
|
|
13:10.160 --> 13:11.450 |
|
さあ、 始めよう。 |
|
|
|
13:12.020 --> 13:16.190 |
|
だから平均価格は100ドルだ。 |
|
|
|
13:16.340 --> 13:21.560 |
|
こっちの最高値は......11,000ドル近くだ。 |
|
|
|
13:21.560 --> 13:29.450 |
|
そのため、 選別の過程で、 実はあの超高価な電子レンジを外したのだ。 |
|
|
|
13:29.570 --> 13:31.760 |
|
それでも、 かなり高価なものを手に入れた。 |
|
|
|
13:31.790 --> 13:36.440 |
|
それが何であるかは、 私が上に書いたことを再現すればわかる。 |
|
|
|
13:36.590 --> 13:46.730 |
|
そして、 私たちが見てきたように、 おそらく交換部品と思われる激安品に大きく偏っていることがわかる。 |
|
|
|
13:46.730 --> 13:51.010 |
|
だから、 これも次回の調査対象だ。 |
|
|
|
13:51.910 --> 13:58.810 |
|
それから、 これらのデータセットを視覚化することは、 私たちがよくやることだということも言っておきたかったんだ。 |
|
|
|
13:58.840 --> 14:01.420 |
|
そして、 さまざまな方法で多くのことを行うことになる。 |
|
|
|
14:01.450 --> 14:06.280 |
|
ええと、 matplotlibの様々な機能を利用できるのはいいことだよ。 |
|
|
|
14:06.280 --> 14:12.100 |
|
そのひとつが、 さまざまな色のチャートを作成できることだ。 |
|
|
|
14:12.100 --> 14:16.660 |
|
これらの色が何色なのか知りたい方は、 |
|
|
|
14:16.660 --> 14:25.360 |
|
matplotlibのページにリンクしてあります。 |
|
|
|
14:25.360 --> 14:27.610 |
|
それを見てみるのはいいことだ。 |
|
|
|
14:27.760 --> 14:32.680 |
|
ええと、 これは、 ブックマークしておくためのちょっとしたおまけです。 |
|
|
|
14:32.710 --> 14:40.570 |
|
ええと、 今日はもうひとつ、 ちょっとしたプロとしての心得があるんだけど、 本当にやるべきことは、 アイテムクラスを見てくることなんだ。 |
|
|
|
14:40.570 --> 14:42.100 |
|
あっという間に終わってしまった。 |
|
|
|
14:42.100 --> 14:53.770 |
|
それは、 データを可能な限り高品質にするために、 実際のデータ例に基づいて行う、 よりぞっとするようなデータAスクラブがあるからだ。 |
|
|
|
14:54.130 --> 15:01.780 |
|
そして、 私はすべての詳細であなたを退屈させませんでしたが、 それは、 あなたがこれから自分自身で詳細を見てくれると信じているからでもあります。 |
|
|
|
15:01.810 --> 15:10.510 |
|
JupyterLabを使って、 これらの関数がどのようにデータをクリーンアップし、 将来トレーニングプロンプトやテストプロンプトとして使用される各データポイント、 |
|
|
|
15:10.510 --> 15:18.310 |
|
各アイテムについて、 約180トークンのリッチな説明、 リッチな表現を持つようになったかを調べ、 |
|
|
|
15:18.310 --> 15:26.890 |
|
試し、 理解する。 |
|
|
|
15:27.220 --> 15:34.000 |
|
だから次回は、 これをさらに拡大して、 他の多くの種類の製品を組み合わせることになるだろう。 |
|
|
|
15:34.000 --> 15:39.700 |
|
このデータセットが大きなデータセットだと思ったのなら、 あなたはまだ何も見ていない。 |
|
|
|
15:39.700 --> 15:41.260 |
|
だから、 その準備をしておくんだ。 |
|
|
|
15:41.260 --> 15:45.730 |
|
その前に、 この日を締めくくるスライドをもう2枚。
|
|
|