Slide 1

Slide 1 text

ニューラルネットワークでニュース記事 を自動分類してみた 第2回データサイエンスLT&勉強会 2017年1月15日

Slide 2

Slide 2 text

今回のゴール

Slide 3

Slide 3 text

これはITニュースだ!

Slide 4

Slide 4 text

これはスポーツニュースだ!

Slide 5

Slide 5 text

データセット livedoorニューコーパス (http://www.rondhuit.com/download.html#ldcc) IT スポーツ 映画

Slide 6

Slide 6 text

分類器 ディープラーニング(深 層学習)は、コンピュータ 業界の話題を集めてき た・・・ 文字列 カテゴリ 全体像

Slide 7

Slide 7 text

分類器 ディープラーニング(深 層学習)は、コンピュータ 業界の話題を集めてき た・・・ 文字列 カテゴリ サポートベクターマシン(SVM) ナイーブベイズ ランダムフォレスト ニューラルネットワーク(NN) などなど

Slide 8

Slide 8 text

ニューラルネットワーク : : 0.85 0.05 0.10 入力層 隠れ層 出力層 ITニュースっ ぽいぞ? 実数を受け取る テキストは離散値しかも可変長

Slide 9

Slide 9 text

どう入力する?

Slide 10

Slide 10 text

テキストをベクトル化

Slide 11

Slide 11 text

Step1. 形態素解析

Slide 12

Slide 12 text

オープンソース形態素解析エンジンMeCabを使うと・・ 形態素解析とは・・・文章を単語に分ける! す も も も も も も も も の う ち

Slide 13

Slide 13 text

Step2. ベクトル化

Slide 14

Slide 14 text

文章の構造を無視して含まれる単語のみをみる Bag of Words (BoWモデル) 私は消防士からエンジニア に転職した 私 は 消防士 から エンジニア に 転職 し た 1 0 1 ・・・ 0 1 0 ・・・ 1 0 消防士 の 筋肉 私 あなた 転職 から IT 辞書のサイズを次元数とするベクトルに変換

Slide 15

Slide 15 text

ニューラルネットワーク 0.85 0.05 0.10 1 0 2 : : 0 1 1 0 2 1 0 1 0 2 1 0 ・ ・ ・ ・

Slide 16

Slide 16 text

やってみる

Slide 17

Slide 17 text

開発環境 言語 : Python 3.5.2 Anaconda 4.2.0 (x86_64) トレーニングデータ : IT・スポーツ・映画記事 800枚ずつ ライブラリ : Tensorflow 0.12.1 Keras 1.2.0

Slide 18

Slide 18 text

Kerasによるモデルの構築 layer size function input 34674 dense1 1024 ReL dense2 512 ReL dense3 256 Rel output 3 softmax from keras.models import Sequentialfrom from keras.layers import Dense, Dropout, Activation from keras.optimizers import Adam model = Sequential() model.add(Dense(1024, input_shape=(max_words,))) model.add(Activation('relu')) model.add(Dense(512, input_shape=(1024,))) model.add(Activation('relu')) model.add(Dense(256, input_shape=(512,))) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(nb_classes)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=0.0001, beta_1=0.5), metrics=['accuracy'])

Slide 19

Slide 19 text

トレーニング #データ読み込み data = json.load(open("./training_data/data.json")) X = data["X"] # テキストデータ Y = data["Y"] # カテゴリデータ X_train, X_test, Y_train, Y_test = train_test_split(X, Y) Y_train = np_utils.to_categorical(Y_train, nb_classes) Y_test = np_utils.to_categorical(Y_test, nb_classes) #学習 model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch, verbose=1, validation_data=(X_test, Y_test)) #予測 score = model.evaluate(X_test, Y_test, verbose=1) print("accuracy:", score[1]) エポック数:50 バッチサイズ:100 出力クラス:3 トレーニング時間:約40分 accuracy: 0.964

Slide 20

Slide 20 text

デモ

Slide 21

Slide 21 text

今後やりたいこと 単語の分散表現(Word Embeddings) 教師なし学習でクラスタリング(k-meansとか) クローラー開発(データ収集)