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.
 
 

262 lines
9.6 KiB

WEBVTT
00:00.800 --> 00:06.560
前回は、 素性工学を使った地味な線形回帰モデルを見てきたが、
00:06.560 --> 00:12.080
今回は素性に別れを告げて、 自然言語処理に取りかかる。
00:12.080 --> 00:21.110
そして、 前に少し触れた「言葉の袋」と呼ばれる、 かなり単純化されたタイプのNLPから始めます。
00:21.140 --> 00:24.950
だから、 まずはこの2つのとても便利なものを作ることから始めよう。
00:24.950 --> 00:33.920
1つはprice、 もう1つはdocumentsと呼ばれ、 priceはトレーニングデータセットに含まれるすべての価格のリスト、
00:33.920 --> 00:42.020
documentsはトレーニングデータセットに含まれるすべてのテストプロンプトである。
00:42.230 --> 00:47.480
私たちがこれからやろうとしているのは、 私たち自身で設計した特徴を使うのではなく、
00:47.480 --> 00:51.440
文書中のテキストを使ったモデルを構築することです。
00:51.440 --> 00:52.940
テキストを使うだけでいい。
00:53.330 --> 01:01.440
そうそう、 ここでひとつ、 ちょっとしたトリックにお気づきかもしれないが、 私はトレーニング用のプロンプトではなく、 テスト用のプロンプトを使っている。
01:01.590 --> 01:06.000
トレーニング・プロンプトを使えば、 トレーニング・プロンプトに価格が含まれることになる。
01:06.120 --> 01:13.470
というのも、 そうすれば当然、 モデルは価格そのものが実際にプロンプトの中にあることを見抜くことを学習してしまうからだ。
01:13.470 --> 01:16.470
そしてテストになると、 かなり惨めに失敗する。
01:16.470 --> 01:20.220
だから、 これは気をつけるべきちょっとしたトリックなんだ。
01:20.460 --> 01:22.980
うーん、 罠には気をつけたいね。
01:22.980 --> 01:25.710
だからそれを準備する。
01:25.710 --> 01:31.770
これからカウントベクタライザーと呼ばれるものを使う。
01:31.800 --> 01:36.330
今日、 ベクターライザーのカウントで仕事をしようと思うと、 高度に洗練されたものを作ろうとしているように聞こえるが、
01:36.330 --> 01:41.850
残念ながら洗練されていない。
01:41.940 --> 01:49.740
この機能は、 単純に単語の数を数え、 ベクトルを構築する。 ベクトル内の各位置が特定の単語を表し、
01:49.740 --> 01:59.420
その単語が文書内に何回現れるかを示す。
01:59.540 --> 02:06.110
つまり、 各文書はベクトルとなり、 そのベクトルの各行が語彙の単語を表す。
02:06.110 --> 02:09.170
そして、 カウンターはその回数をカウントする。
02:09.170 --> 02:15.050
このような物事の考え方は、 バッグ・オブ・ワード・モデルとして知られている。
02:15.050 --> 02:23.840
バッグの中に単語が入っていて、 それを数え上げるようなものだ。
02:24.170 --> 02:31.700
それで、 最も一般的な、 あるいは最も重要な単語を1000まで数えるんだ。
02:31.700 --> 02:41.150
そして、 このパラメータを使って、 一般的なストップワード(andやthe、 inやitのような、
02:41.150 --> 02:49.820
モデルにとって役に立たず、 邪魔にしかならないもの)のみを削除するようにします。
02:49.820 --> 02:54.320
そうして、 彼らは私たちにジューシーな言葉を残したまま、 引き抜かれてしまうのだ。
02:54.320 --> 03:00.000
そして、 これからやることは......ああ、 今見てもらえばわかると思うけど、 僕らはもっと早くやるんだ。
03:00.000 --> 03:05.340
これらの文書に基づいてデータセットを作成します。
03:05.340 --> 03:09.240
前回と同じように、 線形回帰モデルを作成します。
03:09.270 --> 03:14.610
そして、 私たちは言葉のバッグを、 うーん、 私たちの価格に合わせるつもりだ。
03:14.610 --> 03:21.090
言い換えれば、 今回は特徴量を使う代わりに、 この単語の袋、 つまり、 最も一般的な辞書の語彙に含まれる1000の単語について、
03:21.090 --> 03:32.850
それぞれの単語の数をカウントするベクトルで特徴量を置き換えるのだ。
03:32.880 --> 03:34.650
だから、 そうするつもりだ。
03:34.680 --> 03:36.480
線形回帰を実行する。
03:36.480 --> 03:37.980
今まさに起きていることだ。
03:37.980 --> 03:46.110
データセット全体の1000のベクトルポイントをカウントアップしている。
03:46.440 --> 03:54.180
そうしたら、 それを線形回帰、 プライサーという言葉の袋に入れるんだ。
03:54.180 --> 03:58.130
そして、 それをテストするつもりなので、 もう一度テストする。
03:58.160 --> 03:59.660
走り終えたばかりだ。
03:59.690 --> 04:08.570
ええと、 これが私たちの関数で、 単純な関数で、 tester dot testでテストしてみます。
04:09.320 --> 04:10.790
言葉の袋。
04:10.820 --> 04:13.520
線形回帰 プライサー
04:16.010 --> 04:17.630
どうなるか見てみよう。
04:19.550 --> 04:21.050
緑がたくさんあるね。
04:21.050 --> 04:22.730
だが、 赤も多い。
04:23.300 --> 04:23.960
分かるだろう。
04:23.990 --> 04:25.340
ひとつだけ抜こう。
04:25.370 --> 04:27.140
客は74ドル。
04:27.140 --> 04:29.030
そして、 実際には46ドルだった。
04:29.030 --> 04:31.640
だから、 正しいことをやっているのがわかる。
04:31.640 --> 04:33.530
また、 大きくずれていることもある。
04:33.560 --> 04:35.540
グラフはどうなると思う?
04:35.570 --> 04:36.830
見てみよう。
04:37.430 --> 04:39.350
オーケー、 オーケー。
04:39.350 --> 04:42.680
まあ、 何かいいことが起こりそうな雰囲気はある。
04:42.680 --> 04:46.130
ライン周辺に収束しつつあるのが見え始めている。
04:46.130 --> 04:48.080
緑の点が多くなってきた。
04:48.080 --> 04:51.140
平均は113ドル。
04:51.140 --> 04:59.310
つまり、 特徴量を使った線形回帰よりも、 推測よりも明らかに優れているのだ。
04:59.670 --> 05:01.980
それで、 進展があったんだ。
05:01.980 --> 05:05.760
ここにはまだ奇妙な異常値やいくつかの問題がある。
05:06.000 --> 05:10.860
うーん、 でも、 これが本当の価値で、 どこかに書いてあるはずなんだ。
05:11.160 --> 05:15.810
うーん、 でも前進しているのは見てわかるだろう。
05:16.200 --> 05:24.540
では次に、 より高度なモデルに入る前のこのセットの最後として、 素晴らしいGensimライブラリを使って、
05:24.540 --> 05:31.560
このvecモデルという言葉を紹介しよう。
05:31.560 --> 05:37.050
それは、 私がNLPで、 ベクトル化モデルを使って、 より洗練されたベクトル埋め込みモデルを使って、
05:37.410 --> 05:46.440
ニューラルネットワークに出会った最初の時だった。
05:46.500 --> 05:57.980
Gensimの2つのvec関数クラスを使い、 400次元のベクトルを作る。
05:58.250 --> 06:02.960
そして、 8人のワーカーを使うように設定している。
06:02.960 --> 06:08.840
これでも実行には数分かかったが、 事前に実行しておいたので、 このために待たされることはなかった。
06:08.870 --> 06:24.410
そして、 これを実行した。 うまくいけば、 これを実行するだけで、 すぐにテスター・ドット・テストの結果を見ることができるはずだ。
06:25.160 --> 06:36.140
2つのvec線形回帰プライサーという単語を渡して、 この空想的なベクトル化モデルが線形回帰でどのように機能するかを見ることができるはずだ。
06:37.070 --> 06:39.950
まあ、 最初の2行を見る限りは良さそうだが、 いやはや。
06:39.980 --> 06:49.290
赤、 緑、 赤、 緑、 赤がたくさんあって、 250のテストデータポイントを通り越してチャートにすとんと落ちる。
06:50.100 --> 06:52.080
だから、 ここにある。
06:52.110 --> 06:54.150
今回もかなりまともに見える。
06:54.180 --> 07:03.540
興味深いことに、 悪いニュースとしては、 単純な単語袋モデルに基づく線形回帰よりも、 実際は少し悪いということだ。
07:03.540 --> 07:11.850
だから、 2ヴェク・ベクターという素敵な言葉を披露しても、 まだ特に役には立っていない。
07:11.850 --> 07:25.140
それは、 線形回帰モデルが、 この2つのvecベクトルに含まれる余分な情報をすべて活用できるほど強力ではないからかもしれない。
07:25.410 --> 07:34.890
次回は、 もう少し洗練されたモデルを探求し、 伝統的な機械学習は終わりにしよう。
07:34.890 --> 07:38.820
だから、 もう少し我慢してくれ。 ここからもう少し汁を出したいんだ。
07:38.850 --> 07:44.730
私たちは、 ベースラインモデルをもう少し良くしたい。 LMSがこのようなことに簡単に走らないようにしたいからだ。
07:44.730 --> 07:46.350
我々は戦いを挑みたい。
07:46.350 --> 07:48.330
それではまた次回。