[PYTHON] Catégoriser les articles de presse grâce au Deep Learning

introduction

De l'article de presse Bag-of-Words (BoW), j'ai essayé quelque chose comme la prédiction de catégories avec des autoencodeurs de réduction du bruit empilés.

base de données

L'ensemble de données utilise le corpus de nouvelles de livingoor.

Ce corpus est une collection d'articles de presse auxquels la licence Creative Commons suivante est appliquée à partir de "livesoor news" exploité par NHN Japan Co., Ltd., et est créé en supprimant autant que possible les balises HTML.

Il semble.

Puisqu'il y a un total de 9 catégories, il s'agit d'un problème de classification en 9 classes.

Prétraitement des données

Vous devez d'abord créer l'article BoW, qui est yasunori Random-Forest-Example -Forest-Example) corpus.py a été utilisé.

python corpus.py

Créera un dictionnaire (livingoordic.txt) lors de l'exécution. Ne courez que pour la première fois. Ensuite, créez les données à fournir en entrée. J'ai réécrit corpus.py uniquement pour la méthode get_class_id comme ↓, mais je l'ai fait il y a longtemps, donc je ne me souviens pas pourquoi cela s'est produit. .. ..

corpus.py


def get_class_id(file_name):
    '''
Déterminez l'ID de classe à partir du nom de fichier.
Je l'utilise lors de la création de données d'entraînement.
    '''
    dir_list = get_dir_list()
    dir_name = filter(lambda x: x in file_name, dir_list)
    return dir_list.index(dir_name[0])
import corpus
import numpy as np

dictionary = corpus.get_dictionary(create_flg=False)
contents = corpus.get_contents()

data = []
target = []
for file_name, content in contents.items():
	data.append(corpus.get_vector(dictionary, content))
	target.append(corpus.get_class_id(file_name))
data = np.array(data, np.float32) #Données données en entrée
target = np.array(target, np.int32) #Corriger les données de réponse

Stacked Denoising Autoencoders Cette fois, nous formerons les autoencodeurs à débruitage avec des autoencodeurs à réduction de bruit empilés (SDA) approfondis. L'implémentation utilise Chainer. Pour une explication d'Autoencoder, essayez Autoencoder avec [[Deep Learning] Chainer] de kenmatsu4 et visualisez les résultats. ](Http://qiita.com/kenmatsu4/items/99d4a54d5a57405ecaf8) est très facile à comprendre personnellement. SDA utilise trois autoencodeurs, le bruit de suppression et de masquage pour éviter le surapprentissage et ReLU pour la fonction d'activation. Le ratio des données de formation et d'évaluation est de 9: 1. Le code SDA est nommé SDA.py dans mon référentiel GitHub deep-learning-chainer. Le code exécuté ressemble à celui ci-dessous.

import numpy as np
from SDA import SDA
from chainer import cuda

cuda.init(0)

rng = np.random.RandomState(1)
sda = SDA(rng=rng,
		  data=data,
		  target=target,
		  n_inputs=6974,
		  n_hidden=[500,500,500],
		  n_outputs=9,
		  gpu=0)
sda.pre_train(n_epoch=10)
sda.fine_tune(n_epoch=30)

Résultat d'exécution

SDA

C:\Python27\lib\site-packages\skcuda\cublas.py:273: UserWarning: creating CUBLAS
 context to get version number
  warnings.warn('creating CUBLAS context to get version number')
--------First DA training has started!--------
epoch 1
train mean loss=0.106402929114
test mean loss=0.088471424426
epoch 2
train mean loss=0.0816160233447
test mean loss=0.0739360584434
--
Omission
--
epoch 9
train mean loss=0.0519113916775
test mean loss=0.0670968969548
epoch 10
train mean loss=0.0511762971061
test mean loss=0.0661109716832
--------Second DA training has started!--------
epoch 1
train mean loss=1.28116437635
test mean loss=0.924632857176
epoch 2
train mean loss=0.908878781048
test mean loss=0.763214301707
--
Omission
--
epoch 9
train mean loss=0.500251602623
test mean loss=0.55466137691
epoch 10
train mean loss=0.485327716237
test mean loss=0.517578341663
--------Third DA training has started!--------
epoch 1
train mean loss=1.0635086948
test mean loss=0.778134044507
epoch 2
train mean loss=0.656580147385
test mean loss=0.612065581324
--
Omission
--
epoch 9
train mean loss=0.433458953354
test mean loss=0.486904190264
epoch 10
train mean loss=0.400864538789
test mean loss=0.46137621372
fine tuning epoch  1
fine tuning train mean loss=1.33540507985, accuracy=0.614027133827
fine tuning test mean loss=0.363009182577, accuracy=0.902306635635
fine tuning epoch  2
fine tuning train mean loss=0.451324046692, accuracy=0.869683239884
fine tuning test mean loss=0.235001576683, accuracy=0.945725910052
fine tuning epoch  3
fine tuning train mean loss=0.233203321021, accuracy=0.937104056863
fine tuning test mean loss=0.172718693961, accuracy=0.952510164098
fine tuning epoch  4
fine tuning train mean loss=0.156541177815, accuracy=0.957164381244
fine tuning test mean loss=0.167446922435, accuracy=0.962008120247
--
Omission
--
fine tuning epoch  27
fine tuning train mean loss=0.0105007310127, accuracy=0.997586716714
fine tuning test mean loss=0.217954038866, accuracy=0.960651269438
fine tuning epoch  28
fine tuning train mean loss=0.00783754364192, accuracy=0.998340867404
fine tuning test mean loss=0.206009919964, accuracy=0.957937559732
fine tuning epoch  29
fine tuning train mean loss=0.00473990425367, accuracy=0.998491696822
fine tuning test mean loss=0.245603679721, accuracy=0.95793756782
fine tuning epoch  30
fine tuning train mean loss=0.00755465408512, accuracy=0.998190036187
fine tuning test mean loss=0.228568312999, accuracy=0.962008120247

Le graphique de transition de la précision de la classification est le suivant.

Perceptron multicouche

Je voulais savoir ce qui se passerait si je n'effectuais pas de pré-apprentissage, j'ai donc également expérimenté un perceptron multicouche avec la même structure. Comme SDA, Dropout est utilisé pour éviter le surapprentissage et ReLU est utilisé comme fonction d'activation.

en conclusion

Quant à la précision de classification finale, la SDA était d'environ 95%, ce qui était un très bon résultat. Le perceptron multicouche est d'environ 92%, ce qui montre que les performances de généralisation sont pires que celles du SDA, mais la crédibilité du résultat est suspecte car l'expérience n'a été réalisée qu'une seule fois.

Je vous serais reconnaissant si vous pouviez souligner des points étranges.

Recommended Posts

Catégoriser les articles de presse grâce au Deep Learning
Apprentissage profond du noyau avec Pyro
Essayez le Deep Learning avec FPGA
Générez des Pokémon avec Deep Learning
Identification de la race de chat avec Deep Learning
Faites de l'art ASCII avec l'apprentissage en profondeur
Essayez l'apprentissage en profondeur avec TensorFlow Partie 2
Vérifiez la forme de squat avec l'apprentissage en profondeur
Prévisions des ventes de collations avec apprentissage en profondeur
L'apprentissage en profondeur
Faites sourire les gens avec le Deep Learning
[Apprentissage automatique] Regroupez les articles Yahoo News avec le modèle de sujet MLlib (LDA).
Classez les visages d'anime avec l'apprentissage en profondeur avec Chainer
Essayez les prévisions de prix Bitcoin avec Deep Learning
Essayez avec Chainer Deep Q Learning - Lancement
Essayez l'apprentissage profond de la génomique avec Kipoi
Analyse émotionnelle des tweets avec apprentissage en profondeur
Mémorandum d'apprentissage profond
Commencer l'apprentissage en profondeur
Apprentissage profond × Python
L'histoire de l'apprentissage profond avec TPU
99,78% de précision avec apprentissage en profondeur en reconnaissant les hiragana manuscrits
Premier apprentissage profond ~ Lutte ~
Apprendre Python avec ChemTHEATER 03
"Orienté objet" appris avec python
Une histoire de prédiction du taux de change avec Deep Learning
Apprendre Python avec ChemTHEATER 05-1
Python: pratique du Deep Learning
Fonctions d'apprentissage en profondeur / d'activation
Apprentissage profond à partir de zéro
Analyse d'images par apprentissage profond à partir de Kaggle et Keras
Deep learning 1 Pratique du deep learning
Première solution d'apprentissage en profondeur ~
[AI] Apprentissage métrique profond
Apprendre Python avec ChemTHEATER 02
J'ai essayé le deep learning
Classer les articles avec des balises spécifiées par Qiita par apprentissage non supervisé
Apprendre Python avec ChemTHEATER 01
Classer les visages d'anime par suite / apprentissage profond avec Keras
Python: réglage du Deep Learning
Technologie d'apprentissage en profondeur à grande échelle
Fonction d'apprentissage profond / softmax
Essayez de créer un réseau de neurones / d'apprentissage en profondeur avec scratch
[Evangelion] Essayez de générer automatiquement des lignes de type Asuka avec Deep Learning
Créez un environnement pour "Deep Learning from scratch" avec Docker
Reconnaissez votre patron avec Deep Learning et masquez l'écran
J'ai capturé le projet Toho avec Deep Learning ... je le voulais.
Apprentissage en profondeur avec Shogi AI sur Mac et Google Colab
J'ai essayé d'écrire dans un modèle de langage profondément appris
HIKAKIN et Max Murai avec vidéo de jeu en direct et apprentissage en profondeur
Estimation de la courbe des signes avec module d'apprentissage en profondeur (python) + LSTM
L'apprentissage automatique appris avec Pokemon
Apprentissage profond à partir de zéro 1 à 3 chapitres
Deep Learning Gaiden ~ Programmation GPU ~
<Cours> Apprentissage en profondeur: Day2 CNN
Deep running 2 Réglage de l'apprentissage profond
À propos de l'apprentissage avec Google Colab