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.
457 lines
16 KiB
457 lines
16 KiB
WEBVTT |
|
|
|
00:00.560 --> 00:09.650 |
|
データサイエンティストの実験パラダイス、 Jupyter Labへようこそ。 |
|
|
|
00:09.830 --> 00:18.020 |
|
第8週の3日目のノートに入ると、 今回は貴重なコメントが少ないことがわかるだろう。 |
|
|
|
00:18.020 --> 00:23.540 |
|
私はノートブックにプロダクション・クオリティーのコードをコメントしている。 |
|
|
|
00:23.630 --> 00:24.260 |
|
この時点ではね。 |
|
|
|
00:24.260 --> 00:25.310 |
|
君たちはプロだ。 |
|
|
|
00:25.310 --> 00:30.260 |
|
私があれこれ説明するまでもないだろうから、 さっそく本題に入ろう。 |
|
|
|
00:30.470 --> 00:32.930 |
|
ええと、 では輸入品から始めようと思う。 |
|
|
|
00:32.930 --> 00:41.750 |
|
今日のパズルに入るにあたって、 いくつか環境を整えようと思う。 |
|
|
|
00:42.080 --> 00:48.350 |
|
ええと、 スクレイプド・ディールというものをこっそりインポートしたんだけど、 そのことを言わずに、 このスクレイプド・ディールを持って、 |
|
|
|
00:48.380 --> 00:51.770 |
|
フェッチを呼ぼうと思うんだ。 |
|
|
|
00:51.980 --> 01:00.020 |
|
進行状況を表示するをtrueに設定して、 何をするかは言わないで実行します。 |
|
|
|
01:00.020 --> 01:01.460 |
|
そして、 それについてもっと話す。 |
|
|
|
01:01.460 --> 01:02.930 |
|
だから、 キックオフだ。 |
|
|
|
01:03.020 --> 01:04.850 |
|
さあ、 出発だ。 |
|
|
|
01:04.850 --> 01:06.860 |
|
では、 何が削られたのか? |
|
|
|
01:06.860 --> 01:07.220 |
|
取引する。 |
|
|
|
01:07.220 --> 01:10.310 |
|
パッケージの中のエージェント・フォルダに入っている。 |
|
|
|
01:10.310 --> 01:14.210 |
|
そして、 これがドットパイの一部である。 |
|
|
|
01:14.240 --> 01:16.760 |
|
では、 お得なドットパイをお見せしよう。 |
|
|
|
01:16.790 --> 01:23.900 |
|
これは、 一連のフィードを定義することから始まるPythonモジュールだ。 |
|
|
|
01:23.900 --> 01:33.350 |
|
そしてこれらはRSSフィードのURLで、 たまたま様々なカテゴリーでお得な情報が発表されている便利なものだ。 |
|
|
|
01:33.350 --> 01:38.210 |
|
これらのカテゴリーは、 私たちが知っているカテゴリーと偶然にも一致した。 私たちのモデルは、 |
|
|
|
01:38.210 --> 01:45.350 |
|
エレクトロニクス、 コンピューター、 自動車、 そして主にスマートホームと家庭菜園を対象としてトレーニングされたからだ。 |
|
|
|
01:45.350 --> 01:46.370 |
|
そこで、 いくつかのフィードを紹介しよう。 |
|
|
|
01:46.370 --> 01:51.740 |
|
他にもたくさんあるし、 もう少し待つ気概があれば、 もっとたくさんのフィードをここに入れて、 |
|
|
|
01:51.740 --> 01:55.610 |
|
より大きなデータセットを扱うことができる。 |
|
|
|
01:55.610 --> 02:01.030 |
|
だから、 ここにユーティリティがいくつかあるので、 自分の好きな時間に目を通すことができる。 |
|
|
|
02:01.060 --> 02:06.910 |
|
extractと呼ばれるメソッド、 extractと呼ばれる関数は、 HTMLの一部をクリーンアップし、 有用なテキストを返す。 |
|
|
|
02:06.910 --> 02:09.880 |
|
そして、 擦ったクラスの契約もある。 |
|
|
|
02:09.880 --> 02:14.380 |
|
そして、 これはRSSフィードから取得した取引を表している。 |
|
|
|
02:14.410 --> 02:16.840 |
|
つまり、 正確にはスクレイピングではなく、 RSSから取得しているのだ。 |
|
|
|
02:16.840 --> 02:19.720 |
|
しかし、 ルックアップも少しやってみよう。 |
|
|
|
02:19.720 --> 02:21.790 |
|
だから、 それは真実なんだ。 |
|
|
|
02:22.060 --> 02:28.630 |
|
ええと、 initでやることは、 エントリーと呼ばれる、 単なる値の辞書を取ることです。 |
|
|
|
02:28.630 --> 02:30.160 |
|
そして、 私たちは中に入る。 |
|
|
|
02:30.160 --> 02:32.650 |
|
そして、 これはRSSフィードから直接得られるものだ。 |
|
|
|
02:32.680 --> 02:37.840 |
|
そして、 タイトルと要約を選び、 リンクを取る。 |
|
|
|
02:37.840 --> 02:45.400 |
|
そして、 ここを見てほしい。 ここでやっているのは、 URLを取得して、 それを実際にフェッチしに行くということだ。 |
|
|
|
02:45.400 --> 02:47.500 |
|
だから、 ここでスクレイピングをしているんだ。 |
|
|
|
02:48.520 --> 02:49.330 |
|
申し訳ない。 |
|
|
|
02:49.510 --> 02:57.780 |
|
そのURLをいくつかフェッチして、 その結果をいろいろなものに入れ、 美しいスープでいろいろなものをパースする。 |
|
|
|
02:57.780 --> 03:06.600 |
|
これは1週目、 初日にRequestsから取得したURLを解析するときにやったことと似ている。 |
|
|
|
03:06.600 --> 03:06.600 |
|
を得る。 |
|
|
|
03:07.380 --> 03:08.220 |
|
オーケー。 |
|
|
|
03:08.280 --> 03:13.860 |
|
そして、 ここにさらに中身を取り込んで、 こすり洗いするものがある。 |
|
|
|
03:14.190 --> 03:18.930 |
|
そして、 機能があれば、 いくつかの機能を構築する可能性もある。 |
|
|
|
03:18.930 --> 03:30.390 |
|
これは、 RSSフィードから送られてきたものをクリーンアップしてレコードにするための、 ちょっとしたスクレイピング・コードだ。 |
|
|
|
03:30.570 --> 03:33.090 |
|
そして、 それが何であるかを印刷するものがある。 |
|
|
|
03:33.690 --> 03:40.110 |
|
そして、 このクラス・メソッドfetchは、 まさに先ほどキックオフしたもので、 実行が終了したのがわかるだろう。 |
|
|
|
03:40.260 --> 03:48.090 |
|
そして、 すべてのフィードを繰り返し、 フィード・パーサーと呼ばれるものを呼び出します。 |
|
|
|
03:48.090 --> 03:48.090 |
|
パースする。 |
|
|
|
03:48.090 --> 03:58.380 |
|
feedparserは私がインポートしたパッケージで、 RSSフィードを引っ張ってきて辞書として渡してくれる便利なパッケージだ。 |
|
|
|
03:58.380 --> 04:08.940 |
|
FeedparserをPythonのパッケージとして使い、 それぞれのフィードから戻ってきたトップ10を取り出します。 |
|
|
|
04:08.940 --> 04:11.850 |
|
私たちは、 それぞれの会社から得た取引のトップ10を取り上げる。 |
|
|
|
04:12.000 --> 04:15.990 |
|
そしてもちろん、 希望すればより多くのデータを持ち帰ることもできる。 |
|
|
|
04:16.020 --> 04:19.200 |
|
今のところ、 この数字に限定している。 |
|
|
|
04:19.200 --> 04:23.790 |
|
そして、 彼ら一人ひとりのために、 これが自分自身であることを創造する。 |
|
|
|
04:23.790 --> 04:28.800 |
|
そのエントリーのために、 僕らのインスタンスを作るんだ。 |
|
|
|
04:28.800 --> 04:32.070 |
|
その項目はもちろん、 先ほど見た辞書である。 |
|
|
|
04:32.340 --> 04:36.000 |
|
ええと、 少し時間があるんだ。 気になるなら、 ここで寝てくれ。 |
|
|
|
04:36.030 --> 04:46.590 |
|
それは、 このディールのウェブサイトからそのウェブページを取得するためにアクセスするのは反社会的だと思ったからなんだ。 |
|
|
|
04:46.590 --> 04:52.950 |
|
もし私たちが、 そのウェブサイトに大量のリクエストを、 一瞬の隙を突いて次から次へと殺到させたら......。 |
|
|
|
04:52.950 --> 05:04.250 |
|
だから、 ウェブサーバーに過度な負担をかけたり、 過度な要求をしたりしないように、 スリープを入れるのが良いスクレイピングのやり方とされている。 |
|
|
|
05:04.250 --> 05:12.740 |
|
つまり、 これは、 ウェブサイトからお得な情報を取得し、 その情報を返すことで、 私たちがより良い市民になるための方法なのだ。 |
|
|
|
05:12.740 --> 05:13.760 |
|
だから、 今やったんだ。 |
|
|
|
05:13.790 --> 05:16.430 |
|
そして、 それらの取引はこのノートの中で私たちを待っているはずだ。 |
|
|
|
05:16.430 --> 05:21.080 |
|
しかし、 その前に、 この有用なモジュールにある他のいくつかの事柄に触れておこう。 |
|
|
|
05:21.260 --> 05:26.090 |
|
この3つのクラスは、 構造化されたアウトプットを定義する方法なので、 |
|
|
|
05:26.090 --> 05:28.820 |
|
すぐに重要になる。 |
|
|
|
05:28.940 --> 05:39.350 |
|
GPTの4人に回答を求めると、 ええと、 私たちはここで、 クラス取引、 クラス取引の選択、 そしてクラス機会を定義しています。 |
|
|
|
05:39.350 --> 05:43.010 |
|
これらはベースモデルのサブクラスであることがわかるだろう。 |
|
|
|
05:43.040 --> 05:49.100 |
|
ベースモデルは......パイダンティック・パッケージで、 いろいろなことができる。 |
|
|
|
05:49.100 --> 06:04.310 |
|
この機能でできることのひとつは、 JSONバージョンのクラスとその構造、 そしてクラスそのものを非常に簡単に切り替えることができることだ。 |
|
|
|
06:04.460 --> 06:08.000 |
|
だから、 おそらく多くの人がよく知っていることがたくさんある。 |
|
|
|
06:08.000 --> 06:08.810 |
|
ペダンティックだ。 |
|
|
|
06:08.900 --> 06:15.560 |
|
でも、 でも、 それを使うために必要なのは、 単にベースモデルのサブクラスである新しいクラスを作ることだけです。 |
|
|
|
06:15.770 --> 06:20.360 |
|
つまり、 最初に定義するクラスはディールと呼ばれるものだ。 |
|
|
|
06:20.360 --> 06:25.010 |
|
しかも、 商品説明と価格とURLだけのものだ。 |
|
|
|
06:25.040 --> 06:28.010 |
|
以上、 説明価格URLでした。 |
|
|
|
06:28.100 --> 06:31.280 |
|
そしてもうひとつ、 ディールの選択というものがある。 |
|
|
|
06:31.280 --> 06:35.060 |
|
そして、 GPT4にはこう答えてもらうつもりだ。 |
|
|
|
06:35.060 --> 06:37.880 |
|
私たちは、 取引を選択したいと伝えるつもりだ。 |
|
|
|
06:37.880 --> 06:39.650 |
|
だからこれが重要なんだ。 |
|
|
|
06:39.650 --> 06:41.180 |
|
そして、 それはとてもシンプルだ。 |
|
|
|
06:41.180 --> 06:48.500 |
|
これは、 ディールと呼ばれる単一の属性に、 これらのディールのリストを持つだけのものだ。 |
|
|
|
06:48.950 --> 06:50.690 |
|
それがすべてだ。 |
|
|
|
06:50.690 --> 06:55.000 |
|
つまり、 ディールの選択とは、 ディール・オブジェクトのリストが欲しいということだ。 |
|
|
|
06:55.000 --> 06:58.810 |
|
では、 これをJSONの言葉で考えてみると? |
|
|
|
06:58.840 --> 07:04.630 |
|
JSONの用語で言うと、 この取引選択は1つのオブジェクトで、 |
|
|
|
07:04.630 --> 07:07.750 |
|
1つの属性しか持っていません。 |
|
|
|
07:07.750 --> 07:09.850 |
|
それがリストだ。 |
|
|
|
07:09.940 --> 07:13.720 |
|
そして、 それはそれぞれのオブジェクトである物事のリストである。 |
|
|
|
07:13.720 --> 07:15.850 |
|
つまり、 これがJSONになると次のようになる。 |
|
|
|
07:15.880 --> 07:18.520 |
|
商品説明がある。 |
|
|
|
07:22.960 --> 07:28.720 |
|
そして、 フロート(浮動株)である価格を持っている。 |
|
|
|
07:29.410 --> 07:35.620 |
|
そして、 ある種のURLを持っている。 |
|
|
|
07:37.660 --> 07:41.590 |
|
そうすれば、 契約は成立する。 |
|
|
|
07:41.590 --> 07:44.920 |
|
そして、 案件のリストには潜在的にそれらの一群がある。 |
|
|
|
07:44.920 --> 07:47.170 |
|
そして、 それがディールセレクションを構成する。 |
|
|
|
07:47.170 --> 07:57.640 |
|
だから、 今私が入力したJSONを見て、 これらのクラス定義と比較してみてほしい。 |
|
|
|
07:58.090 --> 08:02.740 |
|
これは、 この構造をJSONで表現したものだ。 |
|
|
|
08:02.770 --> 08:10.450 |
|
そして実際、 GPT4に対して、 構造化された出力をこのフォーマットにしてほしいと言うとき、 私たちがやっていることは、 |
|
|
|
08:10.450 --> 08:16.600 |
|
このようなJSONで応答してほしいと言っているようなものだ。 |
|
|
|
08:16.630 --> 08:18.250 |
|
それだけだ。 |
|
|
|
08:18.760 --> 08:23.560 |
|
それで、 これがどのように機能するかということがお分かりいただけたと思う。 |
|
|
|
08:23.740 --> 08:25.030 |
|
そして、 それを削除する。 |
|
|
|
08:25.030 --> 08:26.320 |
|
今はその必要はない。 |
|
|
|
08:26.350 --> 08:33.220 |
|
最後に言っておきたいのは、 ここで定義したopportunityというクラスもある。 |
|
|
|
08:33.220 --> 08:40.570 |
|
そのうちの一人、 そして見積もり。 これは後でこれらの取引の価値を見積もるときに使うものだ。 |
|
|
|
08:40.570 --> 08:46.780 |
|
そして、 値引きは単純に、 契約価格と見積もり価格との差額となる。 |
|
|
|
08:46.810 --> 08:50.230 |
|
どの程度のディスカウントが提示されているのだろうか? |
|
|
|
08:50.620 --> 08:54.070 |
|
これがセットアップだ。 |
|
|
|
08:54.370 --> 08:58.210 |
|
あー、 それじゃ、 こっちに戻ろうか。 |
|
|
|
08:58.510 --> 09:04.690 |
|
うーん、 じゃあ、 そこを直そうか。 |
|
|
|
09:04.960 --> 09:09.430 |
|
ええと、 それで、 その......僕たちは今、 走って、 擦って、 契約したんだ。 |
|
|
|
09:09.430 --> 09:10.510 |
|
ドット、 フェッチ。 |
|
|
|
09:10.660 --> 09:13.120 |
|
何人いるんだ? |
|
|
|
09:13.150 --> 09:16.870 |
|
ディールには50件の案件が眠っている。 |
|
|
|
09:16.900 --> 09:24.310 |
|
なぜ50件かというと、 5つのフィードがあり、 それぞれのフィードから10件ずつお願いしたからです。 |
|
|
|
09:24.310 --> 09:26.230 |
|
それで50になる。 |
|
|
|
09:26.380 --> 09:28.870 |
|
ええと、 だから君が期待しているのはそういうことなんだ。 |
|
|
|
09:28.900 --> 09:42.940 |
|
44番を見ると、 きれいにプリントアウトされている。 |
|
|
|
09:43.150 --> 09:46.660 |
|
それが44番目の契約だ。 |
|
|
|
09:46.750 --> 09:49.770 |
|
そして、 もしフルディスクリプションをするならば |
|
|
|
09:49.770 --> 09:52.710 |
|
これが、 我々が持っている情報の全容だ。 |
|
|
|
09:52.740 --> 09:58.050 |
|
日替わりのガレージ・ストレージがあるんだ。 |
|
|
|
09:58.080 --> 10:00.750 |
|
送料をかわすためにインストールを選択する。 |
|
|
|
10:01.380 --> 10:01.860 |
|
ええと。 |
|
|
|
10:01.860 --> 10:04.230 |
|
つまり、 こういうことだ。 |
|
|
|
10:04.230 --> 10:07.260 |
|
これを見ると、 いくつかのことに気づくだろう。 |
|
|
|
10:07.290 --> 10:12.690 |
|
そのひとつは、 RSSフィードに価格が表示されないことだ。 |
|
|
|
10:12.690 --> 10:16.380 |
|
価格帯はわからない。 |
|
|
|
10:16.380 --> 10:20.760 |
|
そしてもうひとつ、 これには価格すらない。 |
|
|
|
10:20.760 --> 10:22.590 |
|
どれくらいずれているかを教えてくれるんだ。 |
|
|
|
10:22.590 --> 10:29.520 |
|
送料が無料になるとか、 そういうことは表示されるのですが、 実際にこの商品に関連する価格が表示されるわけではありません。 |
|
|
|
10:29.520 --> 10:30.900 |
|
そして、 それは退屈だ。 |
|
|
|
10:31.050 --> 10:36.450 |
|
つまり、 常に適切な使い方ができるわけではない。 |
|
|
|
10:36.450 --> 10:42.870 |
|
そして、 これらの各項目に対して提示されている実際の価格を把握するために、 いくつかの解析を行う必要がある。 |
|
|
|
10:42.870 --> 10:51.950 |
|
これらの項目を見ていただければわかると思うが、 1つの項目の中に複数の、 えー、 ものを組み合わせているものもある。 |
|
|
|
10:51.950 --> 10:56.390 |
|
アップルウォッチには、 20%オフで提供されるさまざまなモデルがある。 |
|
|
|
10:56.480 --> 11:02.930 |
|
そして、 それを消化し、 私たちが望むものを引き出そうとするのは、 |
|
|
|
11:02.930 --> 11:05.600 |
|
非常に困難なことである。 |
|
|
|
11:05.600 --> 11:08.270 |
|
だからフロンティアモデルを使う必要があるんだ。 |
|
|
|
11:08.270 --> 11:16.250 |
|
私たちはGPT four zeroを使って、 RSSフィード、 スクレイピングされたディール、 そしてそのスクレイピングされたディールを、 |
|
|
|
11:16.250 --> 11:20.090 |
|
私たちにとって有益なディールに変えていく。 |
|
|
|
11:20.090 --> 11:26.240 |
|
この大きなセットから、 最もわかりやすく説明されているベスト5を見つけて、 |
|
|
|
11:26.240 --> 11:32.420 |
|
それを抜き出して要約して私たちに返してほしい。 |
|
|
|
11:32.420 --> 11:34.730 |
|
そして、 構造化されたアウトプットにそれを求める。 |
|
|
|
11:34.730 --> 11:40.400 |
|
私たちがどのようなフォーマットが欲しいかを伝え、 そのフォーマットで回答してもらう。 |
|
|
|
11:40.430 --> 11:44.000 |
|
それで今、 君は、 あー、 ティーアップされたんだ。 |
|
|
|
11:44.000 --> 11:45.680 |
|
私たちが成し遂げようとしていることを理解してくれている。 |
|
|
|
11:45.680 --> 11:48.110 |
|
次のビデオでそれをやるつもりだ。
|
|
|