Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ニューラルネットワークでニュース記事を自動分類してみた

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for tsurubee tsurubee
January 15, 2017

 ニューラルネットワークでニュース記事を自動分類してみた

Avatar for tsurubee

tsurubee

January 15, 2017
Tweet

More Decks by tsurubee

Other Decks in Technology

Transcript

  1. ニューラルネットワーク : : 0.85 0.05 0.10 入力層 隠れ層 出力層 ITニュースっ

    ぽいぞ? 実数を受け取る テキストは離散値しかも可変長
  2. 文章の構造を無視して含まれる単語のみをみる Bag of Words (BoWモデル) 私は消防士からエンジニア に転職した 私 は 消防士

    から エンジニア に 転職 し た 1 0 1 ・・・ 0 1 0 ・・・ 1 0 消防士 の 筋肉 私 あなた 転職 から IT 辞書のサイズを次元数とするベクトルに変換
  3. ニューラルネットワーク 0.85 0.05 0.10 1 0 2 : : 0

    1 1 0 2 1 0 1 0 2 1 0 ・ ・ ・ ・
  4. 開発環境 言語 : Python 3.5.2 Anaconda 4.2.0 (x86_64) トレーニングデータ :

    IT・スポーツ・映画記事 800枚ずつ ライブラリ : Tensorflow 0.12.1 Keras 1.2.0
  5. 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'])
  6. トレーニング #データ読み込み 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