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

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
そこで会おう。