いう、未経験者が3か月で機械学習、ディープラーニング、データ分析、AIアプリ開発まで最先端技術を幅広く学べるオンライン学習サービスで勉強しています。受講した自然言語処理コースにおいて、『ニュース記事の分類を機械学習で予測する』ということを学習したのですが、あまり理解できませんでした。そこで、自然言語処理と機械学習の理解のために、自分の中で整理してみることにしました。今回は、『ニュース記事の分類を機械学習で予測する』際の手順について紹介していきます。〜げAidemyのカリキュラムの中で学んだ内容の復習的な内容の記事になってます。ニュースコーパス)今回は、livedoorニュースコーパスを使用しました。ニュースのニュース記事を収集し、可能な限りHTMLタグを取り除いて作成したものです。ロンウィットという会社のWebサイトからダウンロードできます。ldcc-20140209.tar.gz:txtファイル形式(私はこちらをダウンロードしました!)livedoor-news-data.tar.gz:xmlファイル形式と〜げ自然言語処理の学習用として代表的なものみたいです。ファイルの解凍は以下で出来ました。tarfile.open("ldcc-20140209.tar.gz")tar.extractall()tar.close()解凍したフォルダの中身はこんな感じです。ldcc-20140209フォルダの中にtextフォルダがあり、その中に9つのニュースカテゴリのフォルダがあり、それぞれに記事のtxtファイルがあります。textdokujo-tsushindokujo-tsushin-4778030.txtdokujo-tsushin-4778031.txt・・・it-life-hackit-life-hack-6292880.txtit-life-hack-6292881.txt・・・kaden-channellivedoor-hommemovie-enterpeachysmaxsports-watchtopic-news記事がこれらのどのカテゴリーに属するかを予測します(ニュース記事分類)。9)をlabelsというリストに格納します。len(labels))は7367になります。load_livedoor_news_corpus()トレイニングデータとテストデータに分割scikit-learnのmodel_selectionモジュールのtrain_test_split()を使用して、docsとlabelsを20%のテストデータと80%のトレーニングデータにランダムに分割しています。]という日本語の文章のリストなので、このままではモデルの学習をすることが出来ません。そこで、train_dataやtest_dataをベクトル(数字のリスト)化する必要があります。Words(BOW)というベクトル表現手法を使います。BOWにはカウント表現という文書中にある単語の出現回数を要素として使用したベクトルに変換する方法があります。カウント表現の問題点としては、「です」や「ます」のような、カテゴリ分類において重要ではない単語の値が大きくなってしまうことがあります。そこで、一般的には、tf-idf表現というtf-idfという手法で計算された、文章中の各単語の重み情報を扱う方法を使います。今回もこれを使います。tf-idfを使うと、多くの文書に出現する語(一般的な語)の重要度を下げ、特定の文書にしか出現しない単語の重要度を上げる役割を果たします。これにより、「です」や「ます」などの値が小さくなり、正しく重要度を設定することができます。vectorizer.transform(test_data)train_matrixやtest_matrixは、scipy.sparse.csr.csr_matrix型というSciPy特有の型です。参考サイトが詳しいです。今回は、ランダムフォレストという手法を使います。test_labels))トレインデータの精度:0.998、テストデータの精度:0.862となりました。上記では、文書のすべての単語を使用しました。取り出して、学習させて精度を求めてみます。設定すると、その関数でテキストを分割できます。vectorizer.transform(test_data)そして、ランダムフォレストで学習して精度を求めると、結局あまり変わりませんでした。〜げ他の特徴量ベクトルを使うなどして、精度はもう少し改善できそうです。今回は、文書分類を機械学習でする流れを知るのが目的だったので、精度の改善はこんなところにしておきます。:自然言語処理この記事を書いた人と〜げ無職ブロガーと〜げです。最近は北海道で釣りをしていたりします。コメントをキャンセルメールアドレスが公開されることはありません。