前回は、文章(テキストデータ)を、単語に分割し品詞情報を付与(形態素解析)する部分を書きました。arakan-pgm-ai.hatenablog.com今回は、それを数値化してDeepLearningで学習可能なデータにするあたりを、さっくりと整理してみます。数値化の最初の一歩は単語にインデックスをつけること前回、例にあげた「私は田舎で育ちました」って文章を、Janome(前回参照)で分解して、名詞と動詞だけを取り出す前処理結果を説明用に使います。t.tokenize("私は田舎で育ちました。')そうすると、以下の3つの単語になります。この単語のままでは、Deeplearningで処理できません。なんとかして、計算で扱える数字データにしてやる必要があります。そのための準備として、適当に(文章に現れた順番とかなんとか)番号をふって、インデックスにします。3:育ち」みたいな感じです。すると、文字のままよりデータとして扱いやすくなります。シンプルな数値化は「単語の数を数えること」ですさて、次です。DeepLearningを使って、やりたいことは「文章を識別できる特徴を学習する」です。文章の特徴を数字で表すとすると、一番シンプルなのは、「どの単語が文章の中に何回でてくるか」を数えることです。「希望」や「夢」や「素敵」みたいな単語がたくさんでてくる文章は、おそらくポジティブな特徴があるし、「絶望」や「病気」や「嫌い」みたいな単語がでてくる文章はネガティブな特徴がある・・みたいに。絶望が好きな人はいない。」という文章に何回でてくるかを数えてみます。1:希望2:好き3:絶望4:嫌い簡単にpythonで書くとこんな感じです。t.tokenize("希望はみんな好きだ。絶望が好きな人はいない。str(d[k]))動かした結果はこんな感じです。1(希望)=12(好き)=23(絶望)=24(嫌い)=1でも、単純に回数を数えるだけだとうまくいきません。1万語の中で「幸せ」が1回でてくるのと、10語の文章で「幸せ」が1回でてくるのを同じに扱っていいわけないです。シンプルなやり方として、単語の出現回数を、全単語数で割って、出現率みたいなものを計算したらいいんじゃないかというのは思いつきます。上記のソースに「total」という全体カウンターを追加して最後に除算してみます。t.tokenize("希望はみんな好きだ。絶望が好きな人はいない。str(d[k]/total))その結果、以下のようになります。1(希望)=0.166666666666666662(好き)=0.33333333333333333(絶望)=0.33333333333333334(嫌い)=0.16666666666666666まあ、例がよくないですけど、上記なら、ネガティブ寄りな文章じゃないか・・・とか判定したりするわけです。実際、上記みたいに数値化したデータに正解ラベルをつけて学習させれば、簡単な判定AIみたいなものができます。単語の重要度とかも考えると少し難しくなるけど、面白い単純な単語数カウントと出現率は簡単です。意外と良い結果がでるときもあります。