[PYTHON] Analyser émotionnellement les données de bouche-à-oreille d'entreprise des réunions de changement de carrière à l'aide de l'apprentissage en profondeur

Puisqu'il s'agit d'un article du Calendrier de l'Avent empruntant le nom de l'entreprise, nous traiterons du matériel lié à l'entreprise.

(Introduction) À propos de Job Change Conference

Livesense organise une conférence sur le changement d'emploi, un site qui traite des évaluations de la réputation des entreprises par les changeurs d'emploi, et des critiques quotidiennes sur les entreprises sont publiées.

Jusqu'à présent, lors de la réunion de changement de poste, les données textuelles du bouche-à-oreille et les données de score constituées de 5 étapes étaient acquises en tant que données distinctes, mais avec le récent renouvellement, les données de score et de texte peuvent être publiées en même temps, ce qui facilite la lecture du bouche-à-oreille. Il est désormais possible de fournir.

Avis postés avant le renouvellement Avis postés après le renouvellement
<img src="https://qiita-image-store.s3.amazonaws.com/0/7307/680fd65f-5b4f-6919-0ab7-b53163d3d0eb.png "before.png " width="400">

Un sentiment de défi ressenti ici

Bien que les avis récemment publiés soient devenus plus faciles à lire en raison de leurs scores, le grand nombre de publications accumulées dans le passé ne contient naturellement pas de données de classement à cinq niveaux et il n'est pas possible d'afficher une icône de visage telle quelle.

Cependant, si ce problème est résolu et que les critiques passées ** deviennent également plus faciles à lire, cela devrait être un meilleur site! ** **

J'ai décidé d'essayer de résoudre le problème.

Vous cherchez un début. Examiner la méthode

À l'examen, il semble que ce problème s'appelle l'analyse des émotions (autre que l'analyse de réputation, l'analyse des sentiments ou la classification des sentiments).

En outre, la méthode peut être divisée en gros comme suit.

Méthode 1: Méthode utilisant un dictionnaire d'émotions

La méthode utilisant le dictionnaire des émotions est une logique simple, par exemple, si "" heures supplémentaires "" est négatif et "" pas d'heures supplémentaires "" est annulé, il est jugé positif. Cependant, cela devint vite difficile.

Il n'y avait pas beaucoup d'heures supplémentaires

Par exemple, dans le cas ci-dessus, il semble qu'il n'était pas possible de résoudre le problème simplement en s'engageant avec Chochoi, et il était nécessaire de considérer divers modèles. De plus, il semble qu'une telle expression soit souvent utilisée, probablement en raison de la nature du bouche-à-oreille pour changer d'emploi. .. ..

Je suis venu au point et j'ai abandonné cette méthode tôt

Méthode 2: méthode d'apprentissage automatique

Des domaines inconnus tels que l'apprentissage automatique et l'apprentissage en profondeur. Personnellement, j'étais complètement ignorant et cela me semblait difficile, mais cela m'intéressait aussi, j'ai donc décidé d'explorer cette méthode.

Découvrez l'analyse des émotions par apprentissage automatique

A partir du moment où je n'avais que des connaissances vagues, lorsque j'ai procédé à une enquête plus approfondie en m'appuyant sur le mot «analyse des sentiments», j'ai trouvé les choses suivantes.

――Retroactive Neural Network (RNN) semble être bon pour la gestion des phrases. Parmi eux, le LSTM a tendance à améliorer la précision.

(Sujet principal à partir d'ici) Effectuer une analyse des émotions avec LSTM

Cette fois, nous utiliserons Sample using Theano pour procéder à la vérification.

(Pour utilisation, Notes de lecture de code est un article séparé, donc si vous êtes intéressé, veuillez vous y référer)

Caractéristiques des données d'entraînement et définition des problèmes

Caractéristiques des données d'entraînement

Les données de bouche-à-oreille de la réunion de changement de carrière à utiliser comme données d'apprentissage cette fois-ci présentent les caractéristiques suivantes pour un seul bouche-à-oreille.

--Données textuelles --100 caractères ou plus --Revue d'une entreprise (pas très pertinente cette fois) --Revue d'une question (pas très pertinente cette fois)

Problème de réglage

Sur la base des résultats obtenus jusqu'à présent, définissez à nouveau le problème comme suit.

Créer un modèle qui peut juger si le texte de bouche à oreille écrit est positif ou négatif

À l'origine, je voudrais viser une évaluation en 5 notes selon les données, mais il semble que le niveau de difficulté soit encore élevé, donc je ne le ferai pas cette fois.

De plus, cette fois, j'essaierai en me basant sur un sentiment approximatif, donc les hypothèses et les hypothèses selon lesquelles les phrases avec des scores faibles sont «négatif» et les phrases avec des scores élevés sont «positive» Et continuez.

Préparation des données

En tant que préparation des données, nous procéderons à des préparations comme celle-ci

--Pour la saisie, utilisez la version numérisée du dictionnaire caractère par caractère. --Exemple :) Bonne compagnie-> [1,1,2,3] --Préparez 1300 avis avec 1 (négatif) et 5 (positif) scores dans chaque échantillon.

Pour le moment, essayez de le déplacer comme échantillon.

Déplacez-vous lorsque les données sont prêtes. Cela prend beaucoup de temps par défaut, il semblait donc préférable d'ajuster le nombre de couches cachées de manière appropriée.

Essayez avec un script simple

Après avoir attendu un moment et le modèle est construit, jetez un mot simple pour le moment et essayez de le faire fonctionner.

En regardant pred_probs () autour de la ligne 400 de Learning Script, "Si vous voulez vérifier avec un modèle entraîné, vous pouvez vous y référer. Puisque quelque chose comme "Yo" est écrit, vérifiez-le avec un petit script faisant référence à cela.

negaposi.py


model = numpy.load("lstm_model.npz")
tparams = lstm.init_tparams(model)

(use_noise, x, mask, y, f_pred_prob, f_pred, cost) = lstm.build_model(tparams, 
    #Si vous ne lancez pas cette option, vous obtiendrez une KeyError.
    'encoder': 'lstm',
    'dim_proj': 128,
    'use_dropout': True,
})

#Simplification minimale
def pred_probs(f_pred_prob, sentence):
    probs = numpy.zeros((1, 2)).astype(config.floatX)
    x, mask, _y = imdb.prepare_data([sentence],
                              1, #mannequin. Approprié car non utilisé.
                              maxlen=None)
    return f_pred_prob(x, mask)[0]

#Entrée qui numérise chaque chaîne de caractères
sentences = [
    {
        "data": [27, 72, 104, 150, 19, 8, 106, 23],
        "text": "C'est une très bonne entreprise"
    },
    {
        "data": [27, 72, 104, 402, 121, 73, 8, 106, 23],
        "text": "C'est une très mauvaise entreprise."
    }
]

for sentence in sentences:
    result = pred_probs(f_pred_prob, sentence["data"])
    print "==="
    print result
    print sentence["text"], ("is positive" if (result[0] < result[1]) else "is negative")

Courir

% python sample.py
===
input:C'est une très bonne entreprise=> [27, 72, 104, 150, 19, 8, 106, 23]
output: [ 0.06803907  0.93196093]
Une très bonne compagnie est positive
===
input:C'est une très mauvaise entreprise.=> [27, 72, 104, 402, 121, 73, 8, 106, 23]
output: [ 0.73581125  0.26418875]
La pire entreprise est négative

D'une manière ou d'une autre, c'est sorti comme ça. C'est incroyable. La sortie est le résultat du passage par LSTM, et il semble que la probabilité de chaque classe soit renvoyée.

Je sentais que je pouvais y aller, alors je vais procéder à une vérification plus approfondie.

Résultats de test

Regardons de plus près le résultat de l'exécution en jouant avec divers paramètres. Pour le moment, les résultats de dim_proj = 8 (couche cachée) et validFreq = 30 (fréquence de vérification), qui semblaient être bons en tant que tels cette fois.

Transition du taux d'erreur

Le script exécuté cette fois enregistre la transition d'erreur entre les données de vérification et les données de test. Il semble que ce soit la transition.

Puisqu'une époque est terminée vers 2600 mises à jour, ce qui termine les données de vérification, on peut voir que l'erreur diminue après cela.

De plus, dans le script d'entraînement, il effectue un arrêt anticipé, vous pouvez donc voir qu'il s'arrête modérément avant qu'une suradaptation ne se produise.

Analyse des résultats des données de test

Lors de la vérification, le taux d'erreur des données de test est d'environ 0,2 à 0,3 à la fin, nous pouvons donc nous attendre à un taux de réponse correcte d'environ 70 à 80%.

Jetons un coup d'œil aux données utilisées comme test pour voir si elles le sont vraiment.

Voir la distribution des scores et la classification des émotions

Si vous étendez le negaposi.py utilisé précédemment, classez les échantillons de test par négatif / positif, et obtenez la distribution de chacun, cela ressemble à ceci

But negative(%) positive(%)
★ 1 avis 84.34 15.66
★ 2 avis 66.53 33.47
★ 3 avis 45.07 54.93
★ 4 avis 25.77 74.23
★ 5 avis 27.59 72.41

Vous pouvez voir quelque chose comme ça

--Impression: semble bon

Recevez le résultat de la vérification

――Résultat: c'est comme un succès

――Si vous pensez à améliorer un peu plus la précision, cela semble possible. ―― La précision sera-t-elle améliorée si vous affinez les informations telles que l'âge et l'industrie?

Impressions

«Pendant que j'enquêtais, c'était" je ne comprends pas du tout ... ", mais quand je l'ai essayé en le déplaçant, je l'ai souvent découvert. ――Il est important de l'essayer pour le moment ――Lorsque j'ai lu Deep Learning au moment où toutes les choses que je ne comprenais pas étaient épuisées, j'ai senti que mon cerveau était rempli et c'était d'une grande aide. C'était. «J'ai lutté pendant quelques jours, mais à bien des égards, j'ai pu ressentir le ridicule du monde de l'apprentissage automatique. ――Potentiel que même si cela devient un sujet incontournable pour les ingénieurs dans quelques années, ce ne sera pas étrange

Recommended Posts

Analyser émotionnellement les données de bouche-à-oreille d'entreprise des réunions de changement de carrière à l'aide de l'apprentissage en profondeur
Analyse émotionnelle des tweets avec apprentissage en profondeur
Recommandation d'analyse des données à l'aide de MessagePack
Analyse émotionnelle des données de tweet à grande échelle par NLTK
Prévision du cours de l'action à l'aide du Deep Learning [acquisition de données]
[Python] [Word] [python-docx] Analyse simple des données de diff en utilisant python
Collecte et automatisation d'images érotiques à l'aide du deep learning
Analyse des données à l'aide de xarray
Deep learning 1 Pratique du deep learning
Examen de la méthode de prévision des échanges utilisant le Deep Learning et la conversion en ondelettes - Partie 2
Classifier les ensembles de données d'image CIFAR-10 à l'aide de divers modèles d'apprentissage en profondeur
Deep running 2 Réglage de l'apprentissage profond
Notes d'apprentissage sur l'analyse des données Python
Analyse de données à l'aide de pandas python
Apprentissage par renforcement profond 2 Mise en œuvre de l'apprentissage par renforcement
[Détection d'anomalies] Essayez d'utiliser la dernière méthode d'apprentissage à distance