LoginSignup
28
37

More than 5 years have passed since last update.

機械学習でニュースからカテゴリを推定するサイトを作った話

Last updated at Posted at 2017-09-11

サイト

テキストエリアにニュースの本文を入れて判定ボタンをクリックすると、「国内」「海外」「IT/経済」「スポーツ」「芸能」のうち、一番近いカテゴリを出力するサイトを作りました。

50000件のニュース記事を学習させて、テストを回したときは93.2%の正答率だったので、そこそこ精度はあるはず。

screenshot-news-predict.turai.work-2017-09-16-14-24-46-495.png

実装

Facebookが無料で公開している自然言語の機械学習ツールことFasttextを使いました。

facebookresearch/fastText: Library for fast text representation and classification.

これはpythonのツールではなくバイナリのコマンドなので、前処理さえしてしまえばPythonのコードを一切書かずに文章のカテゴリ推定ができます。

大まかな手順は以下

  1. 某ニュースサイトから記事をせっせとスクレイピング
  2. 文章をMecabで名詞だけ抽出し、分かち書きをしてfasttextが読める形に加工
  3. 記事50000件のうち、1カテゴリにつき9000件を学習用、1000件をテスト用に
  4. fasttextで学習
  5. 出来上がったモデルでテスト

学習自体は速く、10分程度で終わります。(もちろんスペックにもよりますが)

fasttextについて

インストールはcloneしてmakeするだけ

$ git clone https://github.com/facebookresearch/fastText.git
$ cd fastText
$ make

fasttext自体には色々機能があるのですが、ここでは文章分類に絞って述べます

まずfasttextが読み込める形に文章を加工します。形式は以下の通り

__label__ラベル名 , 単語をスペース区切りにした本文

ここでは学習用のテキストをnews_train.txt,テスト用をnews_test.txtとします。例えばnews_train.txtはこんな感じです。

news_train.txt
__label__sports , 陸上 日本 学生 対校 選手権 福井 県営 陸上 競技 場 日...
__label__dom , 国会 首相 ....

これをfasttextに読みませて学習します。

./fasttext supervised -input news_train.txt -output news -dim 100 -lr 0.1 -wordNgrams 2 -minCount 1 -bucket 10000000 -epoch 300 -thread 4

細かいパラメータは公式ドキュメントが一番詳しいので割愛(

学習が完了すると同一ディレクトリにnews.binnews.vecができているはずです。

今度はそれを使って精度を検証します。

./fasttext test news.bin news_test.txt

機械学習の細かい実装をしなくてもサクッと文章分類できるので、fasttextもっと広まってもいんじゃないかと思いました。(こなみ)

28
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
37