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.
460 lines
15 KiB
460 lines
15 KiB
WEBVTT |
|
|
|
00:01.430 --> 00:06.980 |
|
そして今回は、 このコースの大きなプロジェクトに対してコーディングする初めての機会だ。 |
|
|
|
00:06.980 --> 00:08.930 |
|
Jupyter Labへようこそ。 |
|
|
|
00:08.930 --> 00:14.390 |
|
ビッグプロジェクトに乗り出す第6週のフォルダへようこそ。 |
|
|
|
00:14.390 --> 00:21.710 |
|
というわけで、 私たちのプロジェクトは、 商品の説明に基づいて、 その商品の値段を推定できるモデルを構築することである。 |
|
|
|
00:21.710 --> 00:26.120 |
|
そして今日は、 データ・キュレーションの最初のステップを行う。 |
|
|
|
00:26.120 --> 00:34.220 |
|
まずは、 家電製品、 洗濯機などのデータの一部を見てみよう。 |
|
|
|
00:34.220 --> 00:36.710 |
|
それではまず、 データセットそのものをお見せしよう。 |
|
|
|
00:36.710 --> 00:39.260 |
|
データセットはこちらのリンクにある。 |
|
|
|
00:39.260 --> 00:46.190 |
|
これはHugging Face hubのHugging Face datasetsセクションにあるデータセットです。 |
|
|
|
00:46.580 --> 00:55.520 |
|
アマゾンのレビューをスクレイピングしたもので、 過去にさかのぼります。 |
|
|
|
00:55.520 --> 00:59.810 |
|
しかし、 20日に行われたこの最新のスクレイプは、 2023年後半に行われたものだった。 |
|
|
|
01:00.020 --> 01:07.450 |
|
ええと、 膨大な数のレビューが含まれていますが、 ほぼ5000万件の商品も含まれています。 |
|
|
|
01:07.450 --> 01:15.040 |
|
だから、 いろいろな製品があり、 それぞれのカテゴリーに分かれている。 |
|
|
|
01:15.250 --> 01:17.410 |
|
これらすべてを扱うつもりはない。 |
|
|
|
01:17.410 --> 01:24.070 |
|
この練習のために、 この中から最も興味のあるカテゴリーのサブセットを抜き出す。 |
|
|
|
01:24.490 --> 01:28.930 |
|
そうでないと、 トレーニングにものすごく時間がかかるし、 面白くない。 |
|
|
|
01:28.930 --> 01:34.000 |
|
これで、 私たちが扱っているデータの種類をご理解いただけると思います。 |
|
|
|
01:34.330 --> 01:41.560 |
|
データセットがメタデータと呼んでいる、 商品、 |
|
|
|
01:41.590 --> 01:48.400 |
|
説明、 価格そのもののデータだ。 |
|
|
|
01:48.430 --> 01:49.270 |
|
これだ。 |
|
|
|
01:49.300 --> 01:59.320 |
|
電子機器などのデータセットを見れば、 5ギガバイト強のサイズであることがよくわかるだろう。 |
|
|
|
01:59.320 --> 02:05.110 |
|
つまり、 これらは大きなデータセットであり、 有益な情報をたくさん持っていることになる。 |
|
|
|
02:05.110 --> 02:08.160 |
|
アップロードされたのは7カ月前だ。 |
|
|
|
02:08.160 --> 02:10.290 |
|
だから、 これはすべてごく最近のことなんだ。 |
|
|
|
02:11.100 --> 02:14.010 |
|
さあ、 始めよう。 |
|
|
|
02:14.010 --> 02:16.410 |
|
まずは輸入品から。 |
|
|
|
02:16.440 --> 02:19.440 |
|
特に複雑なことはない。 |
|
|
|
02:19.470 --> 02:20.700 |
|
今のところはまだだ。 |
|
|
|
02:20.730 --> 02:22.380 |
|
まだまだ続くだろう。 |
|
|
|
02:22.680 --> 02:24.660 |
|
これから環境を整えるんだ。 |
|
|
|
02:24.690 --> 02:26.550 |
|
今日使うわけではない。 |
|
|
|
02:26.550 --> 02:28.260 |
|
ハグする顔を使うだけだ。 |
|
|
|
02:28.290 --> 02:29.970 |
|
ハグ顔にログイン。 |
|
|
|
02:30.720 --> 02:37.230 |
|
そして、 matplotlibがJupyterノートブックにチャートを表示できるようにする。 |
|
|
|
02:37.380 --> 02:41.070 |
|
そこで最初にすることは、 データセットをロードすることだ。 |
|
|
|
02:41.070 --> 02:45.660 |
|
これから行うのは、 データセットの名前、 アマゾンのレビューを指定することだ。 |
|
|
|
02:45.660 --> 02:49.980 |
|
まずは家電製品のカテゴリーから。 |
|
|
|
02:50.010 --> 02:56.970 |
|
冷蔵庫や洗濯機などのような家電製品は、 最初にHugging faces |
|
|
|
02:57.000 --> 03:03.480 |
|
load data set機能を使って読み込みます。 |
|
|
|
03:03.780 --> 03:13.370 |
|
最初にこれを実行すると、 Huggingfaceのハブからダウンロードされる。 |
|
|
|
03:13.400 --> 03:20.870 |
|
これはすでに完成しており、 どれだけの電化製品があるか見てみることになる。 |
|
|
|
03:20.990 --> 03:26.510 |
|
そこには94,000台の家電製品がある。 |
|
|
|
03:26.510 --> 03:28.520 |
|
では、 そのうちの一人を見てみよう。 |
|
|
|
03:28.520 --> 03:34.550 |
|
データ・ポイントとデータ・セットを見てみよう。 |
|
|
|
03:35.030 --> 03:36.290 |
|
まず1つ目。 |
|
|
|
03:36.290 --> 03:37.100 |
|
なぜだ。 |
|
|
|
03:37.370 --> 03:38.360 |
|
見てみよう。 |
|
|
|
03:42.590 --> 03:44.210 |
|
というわけで、 こんな感じだ。 |
|
|
|
03:44.210 --> 03:45.950 |
|
たくさんの情報がある。 |
|
|
|
03:45.950 --> 03:49.370 |
|
しかし、 特に特徴というものがあるのがわかるだろう。 |
|
|
|
03:49.370 --> 03:54.350 |
|
タイトルもついているし、 他にもいくつか役に立つことが書いてある。 |
|
|
|
03:54.530 --> 04:01.910 |
|
そして特に、 タイトル、 説明、 特徴、 詳細、 価格を持っている。 |
|
|
|
04:01.940 --> 04:04.970 |
|
それぞれをプリントアウトして、 ざっと見てみよう。 |
|
|
|
04:05.030 --> 04:06.770 |
|
これがタイトルだ。 |
|
|
|
04:06.770 --> 04:09.860 |
|
これは製氷機のカウンタートップ。 |
|
|
|
04:09.890 --> 04:13.280 |
|
これは空虚な説明である。 |
|
|
|
04:13.820 --> 04:16.430 |
|
これがその詳細だ。 |
|
|
|
04:16.460 --> 04:24.830 |
|
そのため、 多くの機能、 ここでの詳細、 そしてすぐに問題が見えてくる価格が特徴だ。 |
|
|
|
04:24.830 --> 04:26.870 |
|
この場合、 値段は関係ない。 |
|
|
|
04:26.870 --> 04:30.080 |
|
だから、 すべての商品に値段がついているわけではないのは明らかだ。 |
|
|
|
04:30.560 --> 04:35.780 |
|
そして、 その説明はリストの形で表示されることに気づくだろう。 |
|
|
|
04:35.780 --> 04:41.090 |
|
つまり、 Aには特徴があるのに対して、 詳細は辞書の形で提供される。 |
|
|
|
04:41.090 --> 04:43.790 |
|
しかし、 これは辞書ではない。 |
|
|
|
04:43.790 --> 04:47.180 |
|
JSONを含む文字列である。 |
|
|
|
04:47.180 --> 04:58.940 |
|
つまり、 これはテキストであり、 これを読み込むには、 それをロードしてAを使い、 JSONロード文字列ロードsを使って辞書に変換する必要がある。 |
|
|
|
05:00.020 --> 05:01.310 |
|
うーん、 わかった。 |
|
|
|
05:01.310 --> 05:05.060 |
|
次は別のデータを見てみよう。 |
|
|
|
05:05.060 --> 05:12.740 |
|
冷蔵庫のエッグホルダーのようだが、 卵は10個まで入る。 |
|
|
|
05:13.250 --> 05:15.390 |
|
これも値段はない。 |
|
|
|
05:15.420 --> 05:17.880 |
|
そしてこの3本目も値段がない。 |
|
|
|
05:17.880 --> 05:20.940 |
|
真新しい乾燥機のドラムスライドだ。 |
|
|
|
05:20.940 --> 05:24.720 |
|
だからこの時点で、 私たちは初めて心配することになるかもしれない。 |
|
|
|
05:24.750 --> 05:27.300 |
|
94,000台の家電製品がある。 |
|
|
|
05:27.300 --> 05:30.000 |
|
最初の3つは値段がない。 |
|
|
|
05:30.000 --> 05:32.340 |
|
では、 いくつに値段がついているのか見てみよう。 |
|
|
|
05:32.340 --> 05:37.800 |
|
そのための簡単な方法は、 データ・セットのすべてのデータ・ポイントを繰り返し処理することだ。 |
|
|
|
05:37.800 --> 05:40.410 |
|
そして、 その対価を得る。 |
|
|
|
05:40.650 --> 05:44.040 |
|
それをトライブロックに入れる。 |
|
|
|
05:44.190 --> 05:50.010 |
|
なぜなら、 もしそれがなければ、 失敗してそのデータポイントをスキップしてしまうからだ。 |
|
|
|
05:50.010 --> 05:53.220 |
|
だから、 価格がゼロのものも無視する。 |
|
|
|
05:53.220 --> 05:57.120 |
|
だから私たちは、 価格が数字になっているものだけを見ることにしている。 |
|
|
|
05:57.120 --> 06:01.140 |
|
そして、 その価格がゼロでないことはゼロ以上である。 |
|
|
|
06:01.170 --> 06:05.490 |
|
マイナス価格があるとは思わないが、 もしあったとしてもカウントされないだろう。 |
|
|
|
06:06.360 --> 06:11.310 |
|
だから、 これはこれから調べて、 それを見つけ出そうとしているんだ。 |
|
|
|
06:11.310 --> 06:12.540 |
|
さあ、 行こう。 |
|
|
|
06:12.540 --> 06:19.560 |
|
つまり、 726人で、 ほぼ50%ということになる。 |
|
|
|
06:19.560 --> 06:20.580 |
|
だからひどくはない。 |
|
|
|
06:20.580 --> 06:22.290 |
|
それでいい、 それでいい。 |
|
|
|
06:22.290 --> 06:29.700 |
|
一瞬、 収穫が少ないのではと心配になるかもしれないが、 少なくとも電化製品に関してはそうではない。 |
|
|
|
06:29.970 --> 06:35.010 |
|
ええと、 ええと、 データセットで、 半分が価格を持っている。 |
|
|
|
06:35.400 --> 06:36.960 |
|
小さなサイドポイントだ。 |
|
|
|
06:36.960 --> 06:39.270 |
|
私がいつから数字を印刷しているのか、 お気づきになっただろうか。 |
|
|
|
06:39.270 --> 06:47.370 |
|
一般的に、 コンマで数千を区切っている。 |
|
|
|
06:47.370 --> 06:53.340 |
|
その方法は、 Pythonのf文字列を使う場合、 次のようにコロン・コンマと言う。 |
|
|
|
06:53.460 --> 06:59.850 |
|
そうすれば、 このスタイルで数字が表示されます。 |
|
|
|
07:00.000 --> 07:02.610 |
|
ちょっとホットな情報を。 |
|
|
|
07:02.700 --> 07:06.510 |
|
ええと、 すでにご存じかもしれないが、 そうでなければ、 知っておくと便利なことだ。 |
|
|
|
07:07.500 --> 07:08.490 |
|
オーケー。 |
|
|
|
07:08.970 --> 07:14.490 |
|
だから、 これからやることは、 値段がついているものをすべて取り上げるということだ。 |
|
|
|
07:14.850 --> 07:23.370 |
|
そして、 タイトル、 説明、 特徴、 詳細の文字数を調べます。 |
|
|
|
07:23.370 --> 07:29.130 |
|
文字数を合計して、 長さのリストにするんだ。 |
|
|
|
07:29.130 --> 07:36.150 |
|
だから、 私たちが今持っているのは価格と長さのリストであり、 私たちがどれだけの詳細な文字数を持っているかを把握し、 |
|
|
|
07:36.180 --> 07:42.390 |
|
それが均一なものなのか、 それとも何らかの形で偏っているものなのかを確認することができる。 |
|
|
|
07:42.450 --> 07:53.250 |
|
では、 これからよく使うmatplotlibを使って、 長さをヒストグラムの形でプロットしてみよう。 |
|
|
|
07:53.250 --> 08:06.930 |
|
ヒストグラムは基本的に、 すべてのものをバケツに入れて各ビンにいくつ入っているかを示すものだ。 |
|
|
|
08:06.960 --> 08:09.060 |
|
それがどんなものかをお見せするのは簡単だ。 |
|
|
|
08:09.060 --> 08:10.170 |
|
こんな感じだ。 |
|
|
|
08:10.170 --> 08:18.330 |
|
つまり、 X軸に沿って、 さまざまな家電製品、 さまざまな洗濯機などの長さを、 |
|
|
|
08:18.330 --> 08:22.830 |
|
その説明文の文字数で表している。 |
|
|
|
08:22.830 --> 08:29.240 |
|
そしてこれは、 それだけのキャラクターを持つ電化製品がいくつあるかという数である。 |
|
|
|
08:29.240 --> 08:38.960 |
|
そして、 このあたりにピークがあるのがわかるだろう。 |
|
|
|
08:38.960 --> 08:48.650 |
|
というのも、 最終的には自分たちのオープンソースモデルを使ってトレーニングしたいからだ。 |
|
|
|
08:48.650 --> 08:55.730 |
|
そして、 理解することが非常に重要な制約の1つは、 各ポイントでモデルに渡す可能性のある最大文字数、 |
|
|
|
08:55.730 --> 09:01.490 |
|
つまり最大トークン数です。 |
|
|
|
09:01.490 --> 09:06.770 |
|
そして、 各トレーニングポイントに渡す必要があるトークンの数が多ければ多いほど、 トレーニングに必要なメモリが増え、 |
|
|
|
09:06.770 --> 09:09.950 |
|
達成するのが難しくなる。 |
|
|
|
09:09.980 --> 09:14.990 |
|
もう一つのポイントは、 フロンティア・モデルを使う場合でも、 |
|
|
|
09:14.990 --> 09:24.710 |
|
そのような問題はないものの、 別の問題があるということです。 |
|
|
|
09:24.830 --> 09:31.490 |
|
しかし、 これを怒りにまかせて多数の製品で行おうとすれば、 数字がどんどん増えていくことになる。 |
|
|
|
09:31.520 --> 09:37.430 |
|
だから理想的なのは、 カットオフを決めて、 その時点でデータを制約することだ。 |
|
|
|
09:37.550 --> 09:40.820 |
|
それは後で考えることにしよう。 |
|
|
|
09:41.120 --> 09:45.200 |
|
もうひとつ注目すべきは、 価格の分布だ。 |
|
|
|
09:45.200 --> 09:47.270 |
|
では、 いくらかかるのか? |
|
|
|
09:47.300 --> 09:53.150 |
|
家電製品は冷蔵庫や洗濯機などでいっぱいになると思っていたのに、 私たちが見たものはむしろ小さかったということは、 |
|
|
|
09:53.150 --> 09:59.900 |
|
先の分析でお分かりいただけたかもしれない。 |
|
|
|
09:59.900 --> 10:05.810 |
|
エッグホルダーや製氷機などである。 考えてみれば、 データにはおそらく、 |
|
|
|
10:05.810 --> 10:12.860 |
|
高価格帯の商品を押しのけるような安価なものが非常に多く含まれるはずで、 |
|
|
|
10:13.010 --> 10:16.730 |
|
それほど驚くことではない。 |
|
|
|
10:16.730 --> 10:17.660 |
|
では、 それを見てみよう。 |
|
|
|
10:17.690 --> 10:19.100 |
|
どう見えるか見てみよう。 |
|
|
|
10:20.360 --> 10:22.850 |
|
まあ、 それは事実のようだ。 |
|
|
|
10:23.120 --> 10:29.280 |
|
つまり、 このデータセットの平均価格は6ドルということになる。 |
|
|
|
10:29.310 --> 10:33.360 |
|
最高額は21,000ドル。 |
|
|
|
10:33.390 --> 10:43.140 |
|
このリストの中には21,000ドルの家電製品もあるが、 それ以下の価格のものも非常に多いことがわかるだろう。 |
|
|
|
10:43.470 --> 10:48.150 |
|
そして、 平均値、 中央値、 最頻値の違いを覚えている人のために。 |
|
|
|
10:48.180 --> 10:54.930 |
|
学校の統計学で習ったことだが、 これは平均値が高価なものによって引き上げられ、 |
|
|
|
10:54.930 --> 11:01.710 |
|
最頻値や中央値よりも明らかに大きくなるといういい例だ。 |
|
|
|
11:02.730 --> 11:12.690 |
|
そうですね、 確かに、 安い商品が非常に多いという偏った分布になっていますね。 |
|
|
|
11:12.690 --> 11:22.140 |
|
トレーニングの間、 トレーニングデータが低価格のアイテムに埋もれてしまうからだ。 |
|
|
|
11:22.440 --> 11:26.880 |
|
この超高価なものが何なのか、 ちょっと見てみよう。 |
|
|
|
11:26.880 --> 11:30.630 |
|
この2万1,000ドルの品だ。 |
|
|
|
11:30.630 --> 11:35.300 |
|
データセットを調べて、 21,000ドル以上するものは何でも抜き出す。 |
|
|
|
11:35.300 --> 11:38.000 |
|
どうやらターボチェフ弾のようだ。 |
|
|
|
11:38.000 --> 11:41.300 |
|
ラピッド・クック電気電子レンジ・コンベクション・オーブン。 |
|
|
|
11:41.330 --> 11:46.940 |
|
今、 もし誰かが私にそのような説明をしたとしたら、 それが21,000ドルもするとは思わなかっただろう。 |
|
|
|
11:47.300 --> 11:53.870 |
|
同じものではないが、 おそらく今アマゾンで最新版だと思われるものを見つけた。 |
|
|
|
11:53.960 --> 12:00.590 |
|
これもターボシェフ製だ。 |
|
|
|
12:00.590 --> 12:05.420 |
|
21,000ドルどころか、 わずか18,000ドルのバーゲンプライスだ。 |
|
|
|
12:05.900 --> 12:07.640 |
|
でも、 私はあなたのことを知らない。 |
|
|
|
12:07.640 --> 12:12.440 |
|
電子レンジがこんなに高いとは知らなかったが、 明らかにプロ仕様の電子レンジで、 |
|
|
|
12:12.470 --> 12:17.090 |
|
非常に高級な電子レンジだ。 |
|
|
|
12:17.090 --> 12:27.110 |
|
その2万1,000ドルバージョンは、 私たちのデータでは、 こちらのどこかにある。 |
|
|
|
12:28.340 --> 12:35.120 |
|
次のビデオでは、 それをやってみよう。
|
|
|