[PYTHON] Vérification des performances du prétraitement des données dans le traitement du langage naturel

introduction

Lors de la systématisation de l'apprentissage automatique, un savoir-faire est nécessaire pour prendre en compte le temps et les ressources nécessaires au prétraitement des données et les utiliser dans la conception. Dans cet article, nous présenterons un aperçu du prétraitement des données pour les langages naturels et des résultats de vérification des performances basés sur le prétraitement des données dans chABSA-dataset, qui est un exemple de mise en œuvre de l'analyse de la polarité des émotions.

Liste des messages

  1. Présentation du traitement du langage naturel et de son prétraitement
  2. Vérification des performances du prétraitement des données dans le traitement du langage naturel ... This post

La table des matières de cet article est la suivante.

3. Exemple de ressources et de temps de traitement nécessaires pour le prétraitement du traitement du langage naturel

Ici, le prétraitement des données (tableau 2 de la première partie) dans le jeu de données chABSA est exécuté, et la quantité de ressources et le temps de traitement requis sont vérifiés. En particulier, modifiez la bibliothèque utilisée pour le processus de division de Janome à MeCab et comparez la quantité de ressources et le temps de traitement dans les deux modèles.

3.1 Environnement de vérification

Le tableau 4 montre les performances de la machine virtuelle (VM) utilisée dans cette expérience.

Tableau 4 Spécifications de VM utilisées pour la vérification

article nom de l'article
OS Red Hat Enterprise Linux Server 7.7 (Maipo)
CPU Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.5GHz
Nombre de cœurs de processeur 8
Hyper-Threading de
Capacité mémoire 16GB
Capacité du disque dur 160GB
Lecture séquentielle du disque dur 166MB/s
Écriture séquentielle sur disque dur 487 MB/s
Lecture aléatoire du disque dur(4k,QD32) 68MB/s
Écriture aléatoire sur le disque dur(4k, QD32) 71MB/s

Bien que les ressources GPU soient souvent utilisées dans le traitement d'images, elles ne sont pas nécessaires dans le traitement des données textuelles. Par conséquent, nous n'utiliserons pas de ressources GPU dans cette expérience.

Le tableau 5 montre les versions de logiciel utilisées dans la vérification.

Tableau 5 Version du logiciel utilisé pour la vérification

Nom du logiciel version Utilisation
Python 3.7.4 Utilisé comme environnement d'exécution
beautifulsoup4 4.9.0 Utilisé pour l'analyse XML
lxml 4.5.0 Utilisé pour l'analyse XML
Janome 0.3.10 Utilisé pour le partage
MeCab 0.996.3 Utilisé pour le partage

3.2 Contenu de l'expérience

3.2.1 Flux expérimental

[Dernier message](https://qiita.com/mkakida/items/eba36f519b08dbda1d82#22-%E5%8F%96%E3%82%8A%E6%89%B1%E3%81%86%E5%89 % 8D% E5% 87% A6% E7% 90% 86% E3% 81% AE% E6% A6% 82% E8% A6% 81) Normaliser le prétraitement des données dans l'ensemble de données chABSA indiqué dans le tableau 2) La quantité de ressources informatiques utilisées dans chaque processus et le temps de traitement sont mesurés. En ce qui concerne le traitement de vectorisation, la vectorisation n'est pas la cible de la mesure dans cette expérience car le contenu du traitement dépend largement de la mise en œuvre du modèle et il est peu probable que les résultats de mesure soient utiles pour d'autres projets.

Le tableau 6 redéfinit le traitement de la cible de mesure dans cette expérience. Chacun de ces processus est exécuté indépendamment et séquentiellement. De plus, bien que 2 260 types de données d'entreprises indépendantes soient traitées dans chaque processus, les données de chaque entreprise sont traitées séquentiellement et non en parallèle en raison de la mise en œuvre de l'ensemble de données chABSA.

Tableau 6 Processus à tester

# Nom du processus La description
1 Processus d'extraction des informations de performance Traitement de l'analyse XBRL. Données de performance en analysant les données au format XBRL(Format HTML)Traitement pour extraire
2 Processus d'extraction de phrases Traitement pour supprimer les balises des données au format html et extraire uniquement les phrases japonaises
3 Processus d'extraction des données de la cible d'analyse Traitement qui combine le traitement de division et le traitement de normalisation. CHABSA-Dans le code de l'ensemble de données, il est appelé collectivement à l'intérieur du traitement en boucle qui est exécuté pour chaque phrase à analyser, et il était difficile de diviser et de mesurer les ressources utilisées pour le traitement. La cible de la mesure est le traitement combiné des deux.

3.2.2 Comparaison de bibliothèques d'écriture séparées

Dans le jeu de données chABSA, la partie traitement de division du traitement d'extraction des données d'analyse est implémentée à l'aide de Janome. Dans cette expérience, le traitement de division implémenté dans Janome est réécrit sur le traitement dans MeCab, et le temps de traitement requis est comparé.

Les trois points suivants seront modifiés lors de la réécriture du processus d'écriture de la division.

(1) Bibliothèque dépendante

Janome est fourni sous forme de package Python encapsulé dans un dictionnaire et ne peut être utilisé qu'en installant le package avec pip. En plus d'installer le package Python à l'aide de pip, MeCab nécessite l'installation du middleware MeCab (par exemple, le package rpm) pour chaque système d'exploitation.

(2) Comment appeler le traitement (fonction) dans le code

Bien que la cible d'importation et le nom de la fonction de division soient différents, la méthode d'appel elle-même est presque la même entre les bibliothèques.

(3) Format des données d'E / S dans le code

Pour Janome et MeCab, l'entrée est des données de type chaîne de caractères qui stockent des phrases, mais le type de données de sortie est différent. La sortie de la fonction de division de Janome est des données de type tableau qui ont chaque mot comme élément, tandis que la sortie de la fonction de division de MeCab est des données de type chaîne de caractères dans lesquelles chaque mot est séparé par un espace demi-largeur.

Par exemple, lorsque vous entrez la phrase de données de chaîne de texte et réécrivez le code qui renvoie le résultat de la division en jetons, réécrivez-le en tant que code 1 en code 2.

Code 1 Exemple de code fractionné utilisant Janome
##Exemple d'utilisation de Janome
from janome.tokenizer import Tokenizer
...(réduction)...

#Création d'instance
tokenizer = Tokenizer(wakati=True)

#Phrase de données de chaîne de caractères Saisissez la phrase et affichez le résultat de la division en jetons
tokens = tokenizer.tokenize(sentence)

#Les jetons définis sont un tableau avec chaque mot comme élément
...(réduction)...
Code 2 Exemple de code utilisant MeCab
##Exemple d'utilisation de Mecab
import MeCab
...(réduction)...

#Instance MeCab pour la sortie de fractions
mecab = MeCab.Tagger("-Owakati")

#Phrase de données de chaîne de caractères Saisissez la phrase et affichez le résultat de la division en jetons
tokens = mecab.parse(sentence)

#Les jetons définis sont une chaîne de caractères unique dans laquelle les mots sont séparés par un espace d'un octet.
# tokens.split(" ")Ensuite, la même sortie que dans le cas de Janome
...(réduction)...

3.3 Résultats expérimentaux

Les figures 1 à 3 montrent les résultats de l'exécution du prétraitement des données de l'ensemble de données chABSA présenté dans le tableau 2 de la première partie. La figure 1 montre le temps nécessaire pour exécuter chaque processus, et vous pouvez voir le temps total d'exécution et la répartition des processus # 1 à # 3. La figure 2 montre le taux d'utilisation moyen du processeur pendant chaque exécution de processus, et la figure 3 montre l'utilisation moyenne de la mémoire pendant chaque exécution de processus séparément pour chaque processus. Dans chaque figure, le traitement n ° 3 est présenté séparément pour l'implémentation Janome et l'implémentation MeCab.

Figure 1 Temps d'exécution du traitement fig1.png

D'après la figure 1, indépendamment du fait que le traitement n ° 3 soit mis en œuvre dans Janome ou MeCab, le traitement n ° 1 prend environ 26 minutes, tandis que les autres traitements n ° 2 et n ° 3 sont combinés pendant environ 2 minutes au plus. On constate qu'il existe une grande différence de temps d'exécution pour chaque processus. Dans le processus chronophage n ° 1, un fichier de données au format xbrl de quelques Mo est lu et analysé pour chaque entreprise, et le HTML et les métadonnées des données de performance sont extraits. Étant donné que les données extraites par le traitement n ° 1 ont une quantité de données d'au plus plusieurs dizaines de Ko pour chaque entreprise, on considère qu'il existe une différence de sorte que l'ordre du temps de traitement change entre le traitement n ° 1 et les autres.

En outre, à partir de la figure 1, on peut voir que le processus n ° 3 pour effectuer la division et la normalisation est environ huit fois plus rapide lors de la mise en œuvre de la division avec Janome que lors de sa mise en œuvre avec MeCab. Cela est dû au fait que la bibliothèque Janome elle-même est un script Python, tandis que MeCab est implémenté en C ++.

Figure 2 Utilisation moyenne du processeur fig2.png

Sur la figure 2, on peut voir que le taux d'utilisation du processeur pour les traitements n ° 1, n ° 2 et n ° 3-Janome est d'environ 90%, tandis que celui du n ° 3-MeCab est d'environ 70%. Cette différence est affectée par le rapport entre le temps nécessaire pour lire les données dans chaque processus.

Par exemple, la comparaison de # 3-Janome et # 3-MeCab, comme le montre la figure 1, # 3-MeCab prend environ 5 secondes pour l'ensemble du processus, tandis que # 3-Janome prend environ 40 secondes. .. Dans chaque processus, en plus de lire les mêmes données d'entrée à partir du fichier, le fichier corpus japonais pour l'écriture de division est lu en interne. Étant donné que le processeur attend pendant la lecture de ce fichier, il est possible que l'utilisation du processeur diminue. De même, l'utilisation du processeur du processus n ° 2 est inférieure à celle du processus n ° 1 en raison du rapport entre le temps de lecture des données et le temps de traitement.

Figure 3 Utilisation moyenne de la mémoire fig3.png

À partir de la figure 3, nous pouvons d'abord voir qu'il existe une grande variation dans l'utilisation de la mémoire entre les processus. On pense que cela est dû au type et à la quantité de données traitées, ainsi qu'au type et à la quantité de bibliothèques chargées au moment de l'exécution du traitement. Le processus n ° 1 qui extrait les informations de performance des données brutes au format XBRL, qui est un type de XML, et le processus n ° 2 qui supprime les balises des données de données de performance (XML + HTML) utilisent des bibliothèques similaires. Cependant, la taille des données traitées est différente. Les données brutes qui représentent le rapport sur les titres de chaque société saisie dans le traitement n ° 1 ont une taille d'environ plusieurs Mo, tandis que les données d'entrée dans le traitement n ° 2 ne sont que la partie des informations sur les performances, elles ont donc plusieurs à plusieurs dizaines de Ko. Ce sera. En raison de cette différence dans la taille des données d'entrée devenant importante en raison du format d'expression de données à l'intérieur du programme, de la façon de conserver les données intermédiaires et de la différence dans le contenu détaillé du traitement, la différence dans l'utilisation de la mémoire entre le traitement n ° 1 et le traitement n ° 2 est de plusieurs dizaines. On pense qu'il est devenu MB. Concernant le traitement # 3-Janome et le traitement # 3-MeCab, l'implémentation de la librairie utilisée est très différente. En termes de langage, Janome est écrit uniquement en langage Python, tandis que MeCab est écrit en C ++. On pense que la différence dans le langage d'implémentation interne se reflète dans la différence d'utilisation de la mémoire.

3.4 Prise en compte des résultats expérimentaux

Dans cet article, à titre d'exemple de prétraitement de données dans le traitement du langage naturel, nous avons mené une expérience en utilisant le prétraitement des données de l'ensemble de données chABSA comme sujet. On ne peut pas dire que c'est une règle générale pour tout traitement du langage naturel, mais comme résultat expérimental d'un cas, on peut voir que la façon de penser suivante peut être faite.

--Prémisse

--En pensant

Résumé

Dans cet article, nous avons présenté les résultats de la vérification des performances et leur prise en compte au sujet du prétraitement des données dans chABSA-dataset, qui est un exemple d'implémentation de l'analyse de polarité des émotions.

Recommended Posts

Vérification des performances du prétraitement des données dans le traitement du langage naturel
Vue d'ensemble du traitement du langage naturel et de son prétraitement des données
Types de prétraitement dans le traitement du langage naturel et leur puissance
[WIP] Pré-traitement des notes dans le traitement du langage naturel
Insoutenable manque d'attention dans le traitement du langage naturel
Remplissage facile des données pouvant être utilisées dans le traitement du langage naturel
[Traitement du langage naturel] Prétraitement avec le japonais
■ [Google Colaboratory] Prétraitement du traitement du langage naturel et janome
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 1)
100 traitement du langage knock-91: Préparation des données d'analogie
Python: apprentissage profond du traitement du langage naturel: principes de base
Python: traitement du langage naturel
RNN_LSTM2 Traitement du langage naturel
Pré-traitement des données préfectorales
Python: Apprentissage en profondeur dans le traitement du langage naturel: Implémentation d'un système de sélection de phrases de réponses
Traitement pleine largeur et demi-largeur des données CSV en Python
Modèle utilisant un réseau neuronal convolutif dans le traitement du langage naturel
Traitement du langage naturel 1 Analyse morphologique
Traitement du langage naturel 3 Continuité des mots
Traitement du langage naturel 2 similitude de mots
[Traitement du langage naturel] J'ai essayé de visualiser les remarques de chaque membre de la communauté Slack
Traitement du langage naturel (données originales) avec Word2Vec développé par des chercheurs Google américains
Étudiez le traitement du langage naturel avec Kikagaku
100 Language Processing Knock Chapitre 1 en Python
Traitement du langage naturel pour les personnes occupées
Logivan du langage artificiel et traitement du langage naturel (traitement du langage artificiel)
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 2 Étape 02 Mémo "Prétraitement"
100 traitement du langage knock-59: analyse de la formule S
Dockerfile avec les bibliothèques nécessaires pour le traitement du langage naturel avec python
Pourquoi l'expression distribuée des mots est-elle importante pour le traitement du langage naturel?
Prétraitement dans l'apprentissage automatique 2 Acquisition de données
Analyse des séries chronologiques 3 Prétraitement des données des séries chronologiques
Se préparer à démarrer le traitement du langage naturel
Résumé de l'installation de l'analyseur de traitement du langage naturel
[Word2vec] Visualisons le résultat du traitement en langage naturel des avis des entreprises
Prétraitement dans l'apprentissage automatique 4 Conversion de données
Résumé du traitement multi-processus du langage de script
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 4 Étape 15 Mémo "Collecte de données"
Vous devenez ingénieur en 100 jours ――Jour 66 ――Programmation ――À propos du traitement du langage naturel
J'ai fait une sorte d'outil de traitement d'image simple en langage Go.
Python: prétraitement en machine learning: gestion des données manquantes / aberrantes / déséquilibrées
Réponses et impressions de 100 chocs de traitement linguistique - Partie 1
Traitement du langage 100 knocks-44: Visualisation des arbres dépendants
100 traitement de langue knock-22: Extraction du nom de la catégorie
Réponses et impressions de 100 chocs de traitement de la langue - Partie 2
100 Language Processing Knock-26: suppression du balisage accentué
3. Traitement du langage naturel par Python 2-1. Réseau de co-occurrence
Python: prétraitement en machine learning: acquisition de données
3. Traitement du langage naturel par Python 1-1. Word N-gram
Séparation de la conception et des données dans matplotlib
Conversion des données de temps en notation 25 heures
Python: prétraitement dans l'apprentissage automatique: conversion de données
J'ai essayé le traitement du langage naturel avec des transformateurs.
Prétraitement dans l'apprentissage automatique 1 Processus d'analyse des données
Exemple de traitement efficace des données avec PANDAS
Statut de chaque système de traitement Python en 2020
Mémo de produits pratique autour du traitement du langage naturel