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.
289 lines
9.9 KiB
289 lines
9.9 KiB
WEBVTT |
|
|
|
00:00.350 --> 00:05.270 |
|
そして、 第8週2日目のパート4へようこそ。 |
|
|
|
00:05.330 --> 00:12.410 |
|
ええと、 今週はいろいろなことが起こっている。 |
|
|
|
00:12.530 --> 00:14.900 |
|
さっそく始めよう。 |
|
|
|
00:14.930 --> 00:19.970 |
|
覚えているだろうか、 今日我々がやろうとしていることは、 商品の価値を推定する能力の精度を向上させるために、 |
|
|
|
00:19.970 --> 00:26.690 |
|
他の種類の価格を構築し、 それらをまとめていくことだ。 |
|
|
|
00:26.810 --> 00:31.550 |
|
繰り返しになるけど、 これをやっているのは、 これまで学んできたさまざまなテクニックを復習し、 |
|
|
|
00:31.550 --> 00:36.830 |
|
学習の一部を定着させる機会であると同時に、 楽しい練習でもあるんだ。 |
|
|
|
00:37.070 --> 00:43.670 |
|
第6週で実験したランダムフォレスト型の機械学習を使う。 |
|
|
|
00:43.670 --> 00:46.310 |
|
それは伝統的なMLだが、 我々は違うやり方をするつもりだ。 |
|
|
|
00:46.310 --> 00:53.510 |
|
私たちは、 クロマにあるベクトル埋め込みを使うつもりです。 それは、 えー、 抱擁顔文トランスフォーマーVectorizerに基づいています。 |
|
|
|
00:53.540 --> 01:01.810 |
|
つまり、 トランスフォーマーと、 えー、 伝統的な機械学習を一緒に使うということです。 |
|
|
|
01:01.810 --> 01:06.370 |
|
まずはインポートを行い、 いくつかの定数を設定する。 |
|
|
|
01:06.370 --> 01:15.280 |
|
今回は、 製品ベクトルの設定、 定数の保存、 環境のロード、 テストデータのロードを忘れないようにした。 |
|
|
|
01:15.280 --> 01:20.710 |
|
トレーニングデータはCromerにあるので必要ない。 Cromer自体に接続し、 Cromerの商品コレクションを変数コレクションに入れ、 |
|
|
|
01:20.710 --> 01:26.200 |
|
Cromerからロードする。 |
|
|
|
01:26.230 --> 01:31.900 |
|
その結果、 ベクトル、 ドキュメント、 価格が得られる。 |
|
|
|
01:32.530 --> 01:38.170 |
|
ということで、 ランダムフォレストをもう一度見てみよう。 |
|
|
|
01:38.260 --> 01:42.640 |
|
そして、 前回どうやったか、 このセリフを覚えているかもしれない。 |
|
|
|
01:42.640 --> 01:45.070 |
|
ランダムフォレスト回帰器を訓練する。 |
|
|
|
01:45.280 --> 01:50.650 |
|
このnjobsというのは、 同時に実行できるプロセスの数だ。 |
|
|
|
01:50.650 --> 01:54.610 |
|
しかも、 マイナス1本だとマシン全体を使い切ることになる。 |
|
|
|
01:54.610 --> 01:56.290 |
|
各コアごとにプロセスを実行する。 |
|
|
|
01:56.290 --> 01:58.210 |
|
そして、 本当に僕の箱を叩くんだ。 |
|
|
|
01:58.210 --> 02:09.160 |
|
私のM1マックでは、 これを実行するのに1時間くらいかかる。 |
|
|
|
02:09.160 --> 02:13.450 |
|
もし余裕があれば、 少し離れてマシンの音に耳を傾けてみてほしい。 |
|
|
|
02:13.540 --> 02:21.700 |
|
それが終わったら、 Joblib dot dumpという便利なユーティリティを使って、 |
|
|
|
02:21.700 --> 02:25.660 |
|
モデルの重みをファイルに保存します。 |
|
|
|
02:25.660 --> 02:31.570 |
|
そしてモデルを提供し、 それを保存してモデルの重みを保存すればいい。 |
|
|
|
02:31.570 --> 02:36.550 |
|
そして、 何時間分ものトレーニングをする必要がないように、 再びロードし直すんだ。 |
|
|
|
02:36.910 --> 02:47.560 |
|
ここでは、 3つのエージェント・オブジェクト、 スペシャリスト・エージェント、 フロンティア・エージェント、 そしてランダムフォレスト・エージェントを読み込みます。 |
|
|
|
02:47.590 --> 02:51.370 |
|
エージェント・フォルダーを見てみよう。 |
|
|
|
02:51.400 --> 02:54.460 |
|
専門エージェントは、 以前にも紹介したことがある。 |
|
|
|
02:54.460 --> 02:55.450 |
|
これはすでに書いた。 |
|
|
|
02:55.450 --> 02:57.970 |
|
これはプロダクション化されたコードだ。 |
|
|
|
02:58.060 --> 03:05.820 |
|
つまり、 基本的には、 特化型エージェントのコンストラクタのinitで、 モーダルと呼ばれるものを使います。 |
|
|
|
03:05.850 --> 03:08.100 |
|
モーダル・クラス・ルックアップと言う。 |
|
|
|
03:08.100 --> 03:13.470 |
|
そして、 サービス名とクラス名を提供し、 そのクラスをインスタンス化する。 |
|
|
|
03:13.470 --> 03:19.320 |
|
そして、 実際にpriceを呼び出すときには、 単にself dot price |
|
|
|
03:19.320 --> 03:22.170 |
|
dot priceと言う。 |
|
|
|
03:22.170 --> 03:24.300 |
|
モーダルの伝え方を覚えておいてほしい。 |
|
|
|
03:24.300 --> 03:25.410 |
|
我々はこれをローカルで実行したくない。 |
|
|
|
03:25.410 --> 03:31.230 |
|
私たちはクラウドを呼び出し、 リモートでそれを実行し、 結果を返したい。 |
|
|
|
03:31.230 --> 03:34.350 |
|
というわけで、 これが以前見た専門エージェントだ。 |
|
|
|
03:34.380 --> 03:47.310 |
|
フロンティア・エージェントを見ると、 ここにあるのは前回説明したコードであることがわかる。 |
|
|
|
03:47.310 --> 03:48.570 |
|
docstringがある。 |
|
|
|
03:48.600 --> 03:50.130 |
|
ここにdocstringsがある。 |
|
|
|
03:50.130 --> 03:54.330 |
|
どのようなオブジェクトを扱っているかを示すタイプ・ヒンティングがある。 |
|
|
|
03:54.570 --> 04:02.400 |
|
そしてこれは、 Jupyter Notebookのコードから本番に使えるコードにするためのプロセスだ。 |
|
|
|
04:02.400 --> 04:10.970 |
|
そして通常、 JupyterLabでこれを書くことはなく、 VSCodeやPyCharmのようなIDEでこれを行うでしょう。 |
|
|
|
04:11.240 --> 04:16.520 |
|
そして、 タイプヒントを助けたり、 このゴミを埋めたりしてくれるから、 そこに作ることになる。 |
|
|
|
04:16.880 --> 04:19.730 |
|
しかし、 JupyterLabを使うこともできる。 |
|
|
|
04:20.030 --> 04:22.730 |
|
これがフロンティア・エージェントなんだ。 |
|
|
|
04:22.730 --> 04:27.410 |
|
ランダムフォレスト・エージェントを見ると、 これはとてもシンプルだ。 |
|
|
|
04:27.410 --> 04:35.180 |
|
コンストラクターでは、 まず、 ベクトルを作成するためのモデルである文型変換器を作成する。 |
|
|
|
04:35.180 --> 04:39.170 |
|
そして、 先ほど保存したモデルをロードする。 |
|
|
|
04:39.530 --> 04:46.100 |
|
そして、 実際に価格を推論するときには、 まず、 商品の説明文に記載された説明を受け取り、 |
|
|
|
04:46.100 --> 04:51.770 |
|
それをベクトルにエンコードします。 |
|
|
|
04:51.770 --> 04:55.430 |
|
そして、 セルフ・ドット・モデルと呼ぶ。 そのベクトルで予測する。 |
|
|
|
04:55.430 --> 04:59.840 |
|
これでランダムフォレストの結果が得られたので、 それを返す。 |
|
|
|
05:00.200 --> 05:01.280 |
|
簡単なことだ。 |
|
|
|
05:01.280 --> 05:03.200 |
|
ここではゼロを最大にしているのがわかるだろう。 |
|
|
|
05:03.200 --> 05:07.390 |
|
負の数を返せないように、 床をゼロにすることを提案する。 |
|
|
|
05:07.390 --> 05:08.950 |
|
そうなるかどうかは分からない。 |
|
|
|
05:08.980 --> 05:15.160 |
|
以前のバージョンで見たかもしれないので、 賢明な予防措置だと思った。 |
|
|
|
05:15.190 --> 05:17.470 |
|
マイナス価格を予測してほしくない。 |
|
|
|
05:18.010 --> 05:18.880 |
|
オーケー。 |
|
|
|
05:18.880 --> 05:23.530 |
|
とにかく、 これがエージェントたちだ。 |
|
|
|
05:23.590 --> 05:26.410 |
|
そして、 それらのエージェントをインスタンス化することができる。 |
|
|
|
05:26.440 --> 05:31.600 |
|
さて、 この関数の説明は、 前回とまったく同じである。 |
|
|
|
05:31.600 --> 05:39.880 |
|
私たちは単純に品物を手に取り、 その敏速さを測り、 最も近いドル数を引き出します。 |
|
|
|
05:39.910 --> 05:41.770 |
|
冒頭の文章はヘッダーである。 |
|
|
|
05:41.770 --> 05:44.110 |
|
そして価格も引き下げる。 |
|
|
|
05:44.110 --> 05:48.670 |
|
だから、 宣伝文句そのもの、 つまり商品のシンプルな説明に戻るだけだ。 |
|
|
|
05:49.030 --> 05:55.960 |
|
そして、 それを念頭に置いて、 アイテムを受け取り、 それを説明文に変換し、 ランダムフォレスト・エージェントの価格を価格に呼び出す関数、 |
|
|
|
05:55.960 --> 06:02.290 |
|
RF(randomforest)を持つことができます。 |
|
|
|
06:02.290 --> 06:03.010 |
|
それだ。 |
|
|
|
06:03.010 --> 06:08.800 |
|
もちろん、 我々の偉大なテストハーネス・テスターテストを覚えているだろう。 |
|
|
|
06:08.830 --> 06:15.130 |
|
250点のデータでテストし、 ランダムフォレストのパフォーマンスを見ることができる。 |
|
|
|
06:15.190 --> 06:16.420 |
|
さあ、 始めよう。 |
|
|
|
06:17.020 --> 06:19.090 |
|
赤がかなり多いね。 |
|
|
|
06:19.720 --> 06:20.710 |
|
前回を覚えているか? |
|
|
|
06:20.740 --> 06:22.870 |
|
97点くらいだったと思う。 |
|
|
|
06:23.260 --> 06:25.030 |
|
どうなるか見てみよう。 |
|
|
|
06:26.800 --> 06:30.400 |
|
ええと、 実際、 前回よりほんの少し悪くなっている。 |
|
|
|
06:30.400 --> 06:31.900 |
|
しかし、 これは明らかに超接戦だ。 |
|
|
|
06:31.900 --> 06:33.340 |
|
基本的には同じだ。 |
|
|
|
06:33.370 --> 06:42.550 |
|
つまり、 ランダムフォレストは、 改良されたベクトルと2つの単語のベクトルを比較した場合、 基本的に同じ数値を出す。 |
|
|
|
06:42.550 --> 06:44.590 |
|
そして、 視覚的にもうまくいっていることがわかる。 |
|
|
|
06:44.620 --> 06:46.960 |
|
ここにはある種の間違ったスロープがある。 |
|
|
|
06:46.960 --> 06:50.260 |
|
それで、 ちょっと問題が......あ、 あそこで |
|
|
|
06:50.260 --> 06:52.030 |
|
しかし、 一般的に言えば、 それは終わったことだ。 |
|
|
|
06:52.030 --> 06:52.690 |
|
称賛に値する。 |
|
|
|
06:52.690 --> 06:56.410 |
|
まあ、 最近のモデルとは違うけどね。 |
|
|
|
06:56.680 --> 06:59.170 |
|
これがランダムフォレストだ。 |
|
|
|
06:59.170 --> 07:05.260 |
|
そして次のビデオでは、 すべてをまとめるアンサンブル・モデルに移る。 |
|
|
|
07:05.290 --> 07:06.550 |
|
そこで会おう。
|
|
|