YutaroOgawa / pytorch_advanced

書籍「つくりながら学ぶ! PyTorchによる発展ディープラーニング」の実装コードを配置したリポジトリです
MIT License
844 stars 334 forks source link

[質問]P.357 fasttextを用いたプログラムに関して。 #173

Open TaTsuMi-OK3 opened 3 years ago

TaTsuMi-OK3 commented 3 years ago

お世話になっていおります。プログラムを実装していてふと疑問に思ったので質問させてください。 P.357のプログラム中のコメントで、 「52個の単語が300次元のベクトルで表現されている」 とありますが、ここはどうして52個なのでしょうか? よろしくおねがいします。

YutaroOgawa commented 3 years ago

@TaTsuMi-OK3 さま

重要なご質問をありがとうございます。

こちら、確かに書面を追っていると分かりづらい。ということに気付きました。

今回プログラムではtext_train.tsvの4つの文章を読み込み、その文章にある単語からボキャブラリーを構築しています。

・王と王子と女王と姫と男性と女性がいました。 ・機械学習が好きです。 ・本章から自然言語処理に取り組みます。 ・本章では商品レビューの短い文章に対して、その文章がネガティブな評価をしている文章なのか、ポジティブな評価をしている文章なのか、2値のクラス分類する分類モデルを構築します。

の4つの文章です。

https://github.com/YutaroOgawa/pytorch_advanced/blob/master/7_nlp_sentiment_transformer/data/text_train.tsv

これらを単語に分割すると、総単語数が52個となります。

https://github.com/YutaroOgawa/pytorch_advanced/blob/master/7_nlp_sentiment_transformer/7-2_torchtext.ipynb

どうぞよろしくお願い致します

TaTsuMi-OK3 commented 3 years ago

すいません、p.354では49個の単語となっており、p.357では52単語となっていることが疑問点だったので質問させてもらいました。この2つの間でなにか違いはあるのでしょうか? 見てみると、機械学習や自然言語処理といった単語が1単語なのか複数な単語の集まりなのかで結果が49個なのか52個なのかになってくるので、MeCabを利用するかjanomeを利用するかの違いなのでしょうか?

YutaroOgawa commented 3 years ago

@TaTsuMi-OK3 さま

p.354は、japanese_word2vec_vectors.vecを使用しており、word2vecです。 総単語数は1015474です。 形態素解析にはご指摘の通り、MeCab+Neologdです。

p.357は、/vector_neologd/model.vecを使用しており、fastTextを使用しています。 総単語数は351122です。 形態素解析にはご指摘の通り、janomeです。

私もおそらく、形態素解析が

MeCabを利用するかjanomeを利用するかの違い だと思います。

もう一つは、word2vecとfastTextで単語数が異なるので、(unknown)になってしまう単語が発生している可能性は否定できないのですが、今回は簡単な文章しか使っていないので、可能性は低いと思います。

そのため、ご指摘の通り、形態素解析に使用しているものが異なるため、分割された単語数が異なるのだと私も思います。

TaTsuMi-OK3 commented 3 years ago

わかりました!(unknown)になることもあるんですね!初心者ですのでわからないことだらけで、、、 非常に助かりました!ありがとうございます。

YutaroOgawa commented 3 years ago

@TaTsuMi-OK3 さま

ありがとうございます。 今後もぜひ、ご気軽にいろいろご質問いただければ幸いです。 多くの読者の方の参考になります。ありがとうございます。