前回は､ 素性工学を使った地味な線形回帰モデルを見てきたが､
今回は素性に別れを告げて､ 自然言語処理に取りかかる｡
そして､ 前に少し触れた「言葉の袋」と呼ばれる､ かなり単純化されたタイプのNLPから始めます｡
だから､ まずはこの2つのとても便利なものを作ることから始めよう｡
1つはprice､ もう1つはdocumentsと呼ばれ､ priceはトレーニングデータセットに含まれるすべての価格のリスト､
documentsはトレーニングデータセットに含まれるすべてのテストプロンプトである｡
私たちがこれからやろうとしているのは､ 私たち自身で設計した特徴を使うのではなく､
文書中のテキストを使ったモデルを構築することです｡
テキストを使うだけでいい｡
そうそう､ ここでひとつ､ ちょっとしたトリックにお気づきかもしれないが､ 私はトレーニング用のプロンプトではなく､ テスト用のプロンプトを使っている｡
トレーニング・プロンプトを使えば､ トレーニング・プロンプトに価格が含まれることになる｡
というのも､ そうすれば当然､ モデルは価格そのものが実際にプロンプトの中にあることを見抜くことを学習してしまうからだ｡
そしてテストになると､ かなり惨めに失敗する｡
だから､ これは気をつけるべきちょっとしたトリックなんだ｡
うーん､ 罠には気をつけたいね｡
だからそれを準備する｡
これからカウントベクタライザーと呼ばれるものを使う｡
今日､ ベクターライザーのカウントで仕事をしようと思うと､ 高度に洗練されたものを作ろうとしているように聞こえるが､
残念ながら洗練されていない｡
この機能は､ 単純に単語の数を数え､ ベクトルを構築する｡ ベクトル内の各位置が特定の単語を表し､
その単語が文書内に何回現れるかを示す｡
つまり､ 各文書はベクトルとなり､ そのベクトルの各行が語彙の単語を表す｡
そして､ カウンターはその回数をカウントする｡
このような物事の考え方は､ バッグ・オブ・ワード・モデルとして知られている｡
バッグの中に単語が入っていて､ それを数え上げるようなものだ｡
それで､ 最も一般的な､ あるいは最も重要な単語を1000まで数えるんだ｡
そして､ このパラメータを使って､ 一般的なストップワード（andやthe､ inやitのような､
モデルにとって役に立たず､ 邪魔にしかならないもの）のみを削除するようにします｡
そうして､ 彼らは私たちにジューシーな言葉を残したまま､ 引き抜かれてしまうのだ｡
そして､ これからやることは......ああ､ 今見てもらえばわかると思うけど､ 僕らはもっと早くやるんだ｡
これらの文書に基づいてデータセットを作成します｡
前回と同じように､ 線形回帰モデルを作成します｡
そして､ 私たちは言葉のバッグを､ うーん､ 私たちの価格に合わせるつもりだ｡
言い換えれば､ 今回は特徴量を使う代わりに､ この単語の袋､ つまり､ 最も一般的な辞書の語彙に含まれる1000の単語について､
それぞれの単語の数をカウントするベクトルで特徴量を置き換えるのだ｡
だから､ そうするつもりだ｡
線形回帰を実行する｡
今まさに起きていることだ｡
データセット全体の1000のベクトルポイントをカウントアップしている｡
そうしたら､ それを線形回帰､ プライサーという言葉の袋に入れるんだ｡
そして､ それをテストするつもりなので､ もう一度テストする｡
走り終えたばかりだ｡
ええと､ これが私たちの関数で､ 単純な関数で､ tester dot testでテストしてみます｡
言葉の袋｡
線形回帰 プライサー
どうなるか見てみよう｡
緑がたくさんあるね｡
だが､ 赤も多い｡
分かるだろう｡
ひとつだけ抜こう｡
客は74ドル｡
そして､ 実際には46ドルだった｡
だから､ 正しいことをやっているのがわかる｡
また､ 大きくずれていることもある｡
グラフはどうなると思う？
見てみよう｡
オーケー､ オーケー｡
まあ､ 何かいいことが起こりそうな雰囲気はある｡
ライン周辺に収束しつつあるのが見え始めている｡
緑の点が多くなってきた｡
平均は113ドル｡
つまり､ 特徴量を使った線形回帰よりも､ 推測よりも明らかに優れているのだ｡
それで､ 進展があったんだ｡
ここにはまだ奇妙な異常値やいくつかの問題がある｡
うーん､ でも､ これが本当の価値で､ どこかに書いてあるはずなんだ｡
うーん､ でも前進しているのは見てわかるだろう｡
では次に､ より高度なモデルに入る前のこのセットの最後として､ 素晴らしいGensimライブラリを使って､
このvecモデルという言葉を紹介しよう｡
それは､ 私がNLPで､ ベクトル化モデルを使って､ より洗練されたベクトル埋め込みモデルを使って､
ニューラルネットワークに出会った最初の時だった｡
Gensimの2つのvec関数クラスを使い､ 400次元のベクトルを作る｡
そして､ 8人のワーカーを使うように設定している｡
これでも実行には数分かかったが､ 事前に実行しておいたので､ このために待たされることはなかった｡
そして､ これを実行した｡ うまくいけば､ これを実行するだけで､ すぐにテスター・ドット・テストの結果を見ることができるはずだ｡
2つのvec線形回帰プライサーという単語を渡して､ この空想的なベクトル化モデルが線形回帰でどのように機能するかを見ることができるはずだ｡
まあ､ 最初の2行を見る限りは良さそうだが､ いやはや｡
赤､ 緑､ 赤､ 緑､ 赤がたくさんあって､ 250のテストデータポイントを通り越してチャートにすとんと落ちる｡
だから､ ここにある｡
今回もかなりまともに見える｡
興味深いことに､ 悪いニュースとしては､ 単純な単語袋モデルに基づく線形回帰よりも､ 実際は少し悪いということだ｡
だから､ 2ヴェク・ベクターという素敵な言葉を披露しても､ まだ特に役には立っていない｡
それは､ 線形回帰モデルが､ この2つのvecベクトルに含まれる余分な情報をすべて活用できるほど強力ではないからかもしれない｡
次回は､ もう少し洗練されたモデルを探求し､ 伝統的な機械学習は終わりにしよう｡
だから､ もう少し我慢してくれ｡ ここからもう少し汁を出したいんだ｡
私たちは､ ベースラインモデルをもう少し良くしたい｡ LMSがこのようなことに簡単に走らないようにしたいからだ｡
我々は戦いを挑みたい｡
それではまた次回｡