WEBVTT 00:00.050 --> 00:03.890 この時点で最初のLM実験の時間だ。 00:03.980 --> 00:08.330 だから、 この中のいくつかはよくご存じかもしれないし、 すでによくご存じかもしれない。 00:08.360 --> 00:11.180 初耳の人もいるかもしれないが、 説明しよう。 00:11.240 --> 00:13.550 これから使うモデルだ。 00:13.550 --> 00:17.090 これらのフロンティアモデルは、 特定の方法で訓練されている。 00:17.090 --> 00:23.090 つまり、 私たちユーザーから2つの異なるタイプの指示を期待されているのだ。 00:23.120 --> 00:27.590 そのうちの1つはシステムプロンプトとして知られ、 もう1つはユーザープロンプトとして知られている。 00:27.620 --> 00:33.980 システム・プロンプトは、 この会話の背景を説明するものだ。 00:33.980 --> 00:39.440 このコースでは、 システムプロンプトを変更することの意味や、 00:39.440 --> 00:47.480 システムプロンプトにどのような情報を含めることができるかを試していきます。 00:47.570 --> 00:51.230 ユーザー・プロンプトは実際の会話そのものである。 00:51.230 --> 00:55.040 そして、 今の私たちの場合は、 会話のきっかけになるだけだ。 00:55.040 --> 01:05.730 そして、 大規模な言語モデルのLMの役割は、 このユーザーからのプロンプトが与えられたときに、 最も可能性の高い応答方法は何かを見つけ出すことである。 01:05.730 --> 01:13.410 このユーザー・プロンプトが与えられたとしたら、 そしてこのシステム・プロンプトの文脈の中で、 その次に来る可能性の高いテキストは何だろうか? 01:13.410 --> 01:17.460 それは、 このユーザーに対応するアシスタントのものだろう。 01:18.000 --> 01:24.660 これが、 文脈を設定するシステム・プロンプトと、 会話のきっかけとなるユーザー・プロンプトの違いだ。 01:24.810 --> 01:26.790 そこで、 システム・プロンプトを設定する。 01:26.790 --> 01:27.960 そして、 こう書いてある。 01:27.960 --> 01:37.590 あなたがウェブサイトのコンテンツを分析し、 ナビゲーションに関連しそうなテキストを無視して短い要約を提供するアシスタントであると言うことになる。 01:37.590 --> 01:39.630 マークダウンで対応する。 01:39.660 --> 01:42.660 それが何を意味するかは、 すぐにわかるだろう。 01:42.660 --> 01:46.800 これがユーザー・プロンプトのシステム・プロンプトだ。 01:46.800 --> 01:51.180 ユーザー・プロンプトの関数を書きます。 01:51.180 --> 01:54.990 そして、 関数の引数としてウェブサイトを受け取る。 01:54.990 --> 02:00.460 そして、 「ウェブサイト」というタイトルのウェブサイトを見ていると表示される。 02:01.000 --> 02:03.760 本ウェブサイトの内容は以下の通りです。 02:03.760 --> 02:10.240 ニュースやお知らせが含まれる場合は、 ウェブサイトの簡単な概要をマークダウンでご記入ください。 02:10.240 --> 02:17.020 この2つを要約し、 Beautifulsoupが取り出してくれたウェブサイトオブジェクトからテキストを取り出し、 02:17.020 --> 02:22.990 それをユーザープロンプトに追加して、 ユーザープロンプトを返す。 02:23.290 --> 02:28.870 では、 さっそくこのセルを動かして見てみましょう。 02:28.870 --> 02:33.520 そうして、 プロンプトのシステム構成を見てみよう。 02:35.560 --> 02:38.470 もちろん、 今言ったような文章もある。 02:38.650 --> 02:46.060 さて、 先ほど新しいウェブサイト・オブジェクトを作成し、 この変数エディタに格納したのを覚えているだろうか。 02:46.060 --> 02:55.540 だから、 ここに来れば、 ユーザー・プロンプトと言い、 オブジェクト・エドを渡すことができるはずだ。 02:56.260 --> 02:58.690 そして、 プロンプトが表示される。 02:58.720 --> 03:03.340 空行を出力するように印刷すれば簡単かもしれない。 03:05.440 --> 03:09.070 そしてこれが、 作成したユーザー・プロンプト文字列である。 03:09.070 --> 03:11.440 あなたが見ているのは、 "blah blah blah "というタイトルのウェブサイトです。 03:11.470 --> 03:13.510 本ウェブサイトの内容は以下の通りです。 03:13.510 --> 03:15.220 簡単な要約をお願いします。 03:15.250 --> 03:18.760 ほら、 ここにスペースがあったほうがよさそうだ。 そうしないと混乱するかもしれない。 03:18.760 --> 03:19.810 もう一度やってみよう。 03:21.670 --> 03:26.770 そのような小さな矛盾を見つけることができるからだ。 03:28.000 --> 03:30.580 実際、 今見ると、 もっと素敵になると思うよ。 03:30.580 --> 03:34.540 このようにキャリッジ・リターンがあるとする。 03:38.080 --> 03:39.250 このプロンプトを見てみよう。 03:39.280 --> 03:45.280 今、 あなたはウェブサイトを見ている。 03:45.310 --> 03:49.780 では、 メッセージ・オブジェクトについて話そう。 03:49.780 --> 03:55.800 だからOpenAIは、 特定のフォーマットで会話を受け取ることを期待している。 03:55.800 --> 04:01.920 これはOpenAIが考え出したフォーマットで、 04:01.920 --> 04:07.200 彼らのAPIに使われている。 04:07.200 --> 04:16.050 つまり、 これはもともとOpenAIのAPIの使用方法だったのが、 このアプローチを使用する多くの異なるモデルにおける標準のようなものになったということだ。 04:16.050 --> 04:17.520 その仕組みはこうだ。 04:17.520 --> 04:25.590 会話を記述しようとするとき、 Pythonの辞書のリストを使って記述する。 04:25.590 --> 04:29.640 つまり、 リストの各要素が辞書であるリストだ。 04:29.640 --> 04:32.310 その辞書はこうなっている。 04:32.340 --> 04:35.130 これは2つの要素を持つ辞書である。 04:35.340 --> 04:43.170 そのうちの1つはroleのキーを持ち、 ここではroleのキーであるsystemかuserのどちらかの値である。 04:43.170 --> 04:46.500 そして、 その価値はコンテンツのキーとなるシステムである。 04:46.500 --> 04:49.770 そして、 その値はもちろんシステム・メッセージである。 04:49.800 --> 04:53.760 もうひとつ、 役割のカギを握る辞書がある。 04:53.760 --> 04:56.700 ユーザーメッセージなので、 値はuserである。 04:56.700 --> 05:01.680 ユーザープロンプトコンテンツは、 ユーザメッセージが入る場所である。 05:02.130 --> 05:05.460 ユーザーメッセージとユーザープロンプトは同じものです。 05:06.120 --> 05:11.190 だから、 うまく説明できなかったかもしれないが、 こうして視覚的に見れば理解できるだろう。 05:11.220 --> 05:18.120 これは、 ロールとコンテンツ、 システムとシステム、 メッセージ・ユーザーとユーザー・メッセージを持つ辞書に過ぎない。 05:18.120 --> 05:21.630 他にもいくつか役割があるが、 それは追って説明する。 05:21.630 --> 05:23.010 今はこれで十分だ。 05:23.010 --> 05:26.130 これがメッセージの作り方だ。 05:26.130 --> 05:34.050 そして、 この次の関数のdefメッセージを見てもらえば、 これが作成されていることが一目瞭然だろう。 05:34.050 --> 05:38.400 これは、 まさにこの構造をコードを使って作っている。 05:38.400 --> 05:42.000 私たちが考えた一般的なシステムプロンプトを入れるんだ。 05:42.000 --> 05:46.560 そして、 ウェブサイトのユーザー・プロンプトを作成する。 05:46.980 --> 05:48.570 では、 それを実行してみよう。 05:49.200 --> 06:02.300 そして今、 私のウェブサイトのオブジェクトであるEdへのメッセージと言えば、 空行などが見えるように印刷することは明らかだろう。 06:04.430 --> 06:07.370 実は、 申し訳ないが、 この場合は印刷しない方がいいかもしれない。 06:07.640 --> 06:09.830 こうすれば、 少しはスッキリするかもしれない。 06:09.860 --> 06:10.370 これでよし。 06:10.400 --> 06:16.220 そして今、 それが2つの役割システムのリストであることがわかるだろう。 06:16.220 --> 06:18.170 そして、 システムメッセージの役割ユーザーがいる。 06:18.170 --> 06:20.270 そして、 そこにユーザーメッセージがある。 06:20.870 --> 06:21.710 オーケー。 06:21.710 --> 06:23.120 これをまとめる時が来た。 06:23.120 --> 06:24.710 今こそ実際にやるときだ。 06:24.710 --> 06:34.610 OpenAIのAPIはとてもシンプルで、 フロンティアモデルを呼び出してこれをやってくれる。 06:34.610 --> 06:37.700 だから、 今は覚えておくべきことがいくつかあるように見えるかもしれない。 06:37.700 --> 06:42.620 すぐに慣れるだろうが、 これからsummarizeという関数を作る。 06:42.620 --> 06:48.860 そしてそれは、 私たちの問題を解決し、 渡されたURLを要約するビジネスを行うことだ。 06:48.860 --> 06:53.720 エディターの時と同じように、 まずそのURLのウェブサイトを作成する。 06:53.720 --> 06:56.300 そこでOpenAIと呼んでいる。 06:56.840 --> 06:59.840 OpenAIとは、 OpenAIのオブジェクトのことだ。 06:59.870 --> 07:05.480 我々はOpenAIのドットチャット、 ドットコンプリート、 ドットクリエイトを作った。 07:05.930 --> 07:08.390 そして、 今はただ暗記すればいいということだ。 07:08.390 --> 07:10.520 そのことについては、 後でいろいろと理解できるだろう。 07:10.820 --> 07:16.070 しかし、 OpenAIに関する限り、 これは補完APIとして知られている。 なぜなら、 この会話を完成させ、 07:16.100 --> 07:20.750 次に何が来る可能性が最も高いかを予測するよう求めているからだ。 07:20.900 --> 07:23.780 使用するモデルの名前を渡す。 07:23.780 --> 07:27.920 GPT4ミニと呼ばれるモデルを使う。 07:27.920 --> 07:39.350 地球上で最高級モデルのひとつであるGPT 4の軽量・廉価版であり、 これを使うには1セントもかからない。 07:39.350 --> 07:45.620 モデルを渡して、 それからメッセージを渡す。 メッセージは、 07:45.620 --> 07:49.910 今作ったこの構造体を使う。 07:50.660 --> 07:54.380 戻ってきたものをこのオブジェクト・レスポンスに入れる。 07:54.500 --> 08:01.910 そしてレスポンスが返ってきたら、 レスポンス・ドット・チョイス・ゼロ・ドット・メッセージ・ドット・コンテンツと呼ぶ。 08:02.090 --> 08:05.270 さて、 これが何なのか、 私たちが知る必要のない別の日に説明しよう。 08:05.270 --> 08:05.810 今のところはね。 08:05.810 --> 08:10.820 あとは、 レスポンス・ドット・チョイス・ゼロ・ドット・メッセージ・ドット・コンテンツを実行することだけだ。 08:10.820 --> 08:11.930 それでいいんだ。 08:11.930 --> 08:14.330 これが要約機能だ。 08:14.330 --> 08:19.400 ということで、 私たちが運営しているウェブサイトを要約してみよう。 08:19.400 --> 08:22.070 現在はクラウド上のOpenAIに接続している。 08:22.070 --> 08:24.080 往復するんだ。 08:24.080 --> 08:26.870 以下は私のウェブサイトの要約である。 08:26.870 --> 08:34.130 ほんのわずかなお金を使い、 私のウェブサイトを要約した。 08:34.460 --> 08:39.110 私たちは、 これを素敵なスタイルで印刷することができるので、 少し良いことができます。 08:39.110 --> 08:44.300 ええと、 GPT4はマークダウンで回答するようお願いしました。 つまり、 見出しや太字のものなど、 08:44.300 --> 08:48.910 さまざまな文字を使って回答しているということです。 08:49.270 --> 08:57.880 Jupyter Labsの機能を使って、 マークダウン形式で表示させることもできる。 08:57.910 --> 08:58.990 だから、 そうしよう。 08:58.990 --> 09:02.440 この要約表示機能を使って、 もう一度やってみよう。 09:02.470 --> 09:05.770 今回もクラウド上のミニをGPTにする。 09:05.770 --> 09:08.800 そして、 これが私のウェブサイトの要約である。 09:08.980 --> 09:11.800 ええと、 僕について何か書いてある。 09:12.070 --> 09:17.350 とてもきれいなフォーマットで、 とてもきれいに構成されている。 09:17.350 --> 09:18.760 かなり印象的だ。 09:19.360 --> 09:24.970 そしてどうやら、 私が独自に開発したLMSでの仕事にハイライトを当て、 AIとLMSに関連するリソースを提供し、 09:25.150 --> 09:28.840 この分野での知識の発展に尽力していることをアピールしているようだ。 09:28.870 --> 09:30.550 よかったね、 ミニのGPT。 09:30.580 --> 09:32.620 とてもいいまとめだ。 09:33.070 --> 09:33.910 オーケー。 09:33.910 --> 09:36.490 そして今、 さらにいくつかのウェブサイトを試すことができる。 09:36.520 --> 09:39.490 CNNを要約してみよう。 comに移籍した。 09:39.760 --> 09:42.490 まあ、 どうなるか見てみよう。 09:42.520 --> 09:47.470 CNNの方がはるかに大きな結果を出しているのは明らかだ。 09:47.650 --> 09:53.350 それで、 何が起こっているのか、 いくつかの情報を得ることができた。 09:53.440 --> 10:02.800 実は今、 11月5日の夕方にこれを録音しているんですが、 これは今行われている2024年の選挙の日なんです。 10:02.800 --> 10:05.920 もちろん、 それはCNNのウェブページで紹介されている。 10:05.920 --> 10:11.050 クロードのウェブサイトである "アントロピック "を要約することもできる。 10:11.050 --> 10:12.940 素敵なページもある。 10:12.940 --> 10:13.990 さあ、 どうぞ 10:13.990 --> 10:18.100 その詳細については、 彼らのウェブページのこの素敵な要約をご覧いただきたい。 10:19.030 --> 10:20.020 分かった。 10:20.020 --> 10:24.010 これで、 最初のインスタント・グラティフィケーションは終了だ。 10:24.010 --> 10:25.750 ジューシーだ。 10:25.750 --> 10:27.700 実際に役に立つことをしたんだ。 10:27.700 --> 10:28.780 我々はウェブをスクラップした。 10:28.780 --> 10:33.640 要約は最も一般的なAIの使用例の一つである。 10:33.640 --> 10:36.430 一般的なものなので、 あらゆる用途に使える。 10:36.430 --> 10:41.850 このコースの間、 いくつかの異なる方法でそれを行う予定だが、 8週目の粘着ソリューションでも、 10:41.850 --> 10:44.160 要約を行うものを使う予定だ。 10:44.160 --> 10:48.030 だから、 すでに実験していることは素晴らしいことなんだ。 10:48.360 --> 10:53.640 だから、 要約のビジネスへの応用は他にもたくさんある。 10:53.640 --> 10:56.340 これは有効活用できるはずだ。 10:56.340 --> 11:05.190 すぐにでも自分の仕事に応用できる方法を思いついたり、 GitHubで要約の実例となるプロジェクトをいくつか作ったりできるはずだ。 11:05.190 --> 11:12.300 ニュースの要約、 財務報告書からの業績の要約、 履歴書、 カバーレターなどに応用できるだろう。 11:12.300 --> 11:14.820 履歴書からカバーレターを作成することもできる。 11:14.970 --> 11:19.470 ドキュメントの要約でできることはたくさんある。 11:19.470 --> 11:23.220 それに加えて、 ウェブのスクレイピングという側面もある。 11:23.220 --> 11:31.440 だから、 あなたのビジネスに要約をどのように適用するか考え、 これを拡張して要約をしてみてほしい。 11:32.280 --> 11:37.320 また、 技術志向の人向けには、 この方法を使うとすぐにわかることがある。 それは、 11:37.350 --> 11:42.480 この方法では要約できないウェブサイトがたくさんあるということで、 それはウェブページのレンダリングにJavaScriptを使っていて、 11:42.480 --> 11:49.560 かなり単純化しているからだ。 11:49.560 --> 11:55.710 アプローチは、 ただサーバーにリクエストして、 返ってきたものを受け取っただけだ。 11:55.710 --> 11:56.970 しかし、 解決策はある。 11:56.970 --> 12:03.450 解決策としては、 セレニウムなどのプラットフォームや、 playwrightを使えば、 ページをレンダリングして、 12:03.450 --> 12:07.230 そのように実行することができる。 12:07.230 --> 12:12.720 だから、 もしあなたが技術的な傾向があり、 そのようなことについてのバックグラウンドがあるのなら、 12:12.720 --> 12:19.200 本当に興味深い挑戦は、 これをもう少しビーフなものに変えて、 セレンをミックスに加えることだ。 12:19.380 --> 12:22.470 うーん、 偶然にも、 誰かがすでにそれをやっている。 12:22.470 --> 12:24.600 ええと、 生徒の一人です、 ありがとうございました。 12:24.690 --> 12:29.490 そして、 このフォルダーのコミュニティへの貢献を見てみると、 いくつかの異なる解決策がある。 12:29.490 --> 12:32.520 そのひとつがセレンベースのソリューションだ。 12:32.520 --> 12:34.860 だから、 いつでも中に入って自分で見ることができる。 12:34.860 --> 12:36.840 あるいは、 あなたにもチャンスがある。 12:36.840 --> 12:39.380 そこに解決策があるはずだ。 12:40.370 --> 12:47.420 そして、 もしあなたがその解決策や何かを思いついたなら、 他の人がその恩恵を受けられるようにコードを共有してくれると嬉しい。 12:47.420 --> 12:53.240 理想的なのは、 それをコミュニティへの貢献フォルダに入れ、 出力をクリアすることだ。 12:53.240 --> 12:58.190 そこでカーネルを再起動し、 すべてのセルの出力をクリアする。 12:58.310 --> 13:04.730 そうしないと、 出力されたものすべてがコードにチェックされることになる。 13:04.730 --> 13:06.200 だから、 そうしてくれ。 13:06.470 --> 13:12.440 そして、 PR(プル・リクエスト)を提出してもらえれば、 それをコードにマージすることができる。 13:12.440 --> 13:16.550 そして、 それがあなたにとって初めてのことであるなら、 それはちょっとしたプロセスなのだ。 13:16.580 --> 13:21.620 そのために必要なことは、 ここに書いてある。 13:21.830 --> 13:25.700 とにかく、 これが最初のプロジェクトで、 多くのプロジェクトの最初のものだった。 13:25.730 --> 13:27.920 シンプルなプロジェクトだが、 重要なものだ。 13:27.950 --> 13:29.960 非常に重要なビジネスユースケースだ。 13:29.960 --> 13:31.610 有意義なものであったことを願っている。 13:31.610 --> 13:34.700 また次のビデオでお会いしましょう。 13:34.700 --> 13:35.570 週目。 13:35.570 --> 13:36.200 初日。