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

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

tsurubee
January 15, 2017

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

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