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
La table des matières de cet article est la suivante.
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.
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 |
[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. |
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.
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.
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.
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.
##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)...
##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)...
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
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
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
À 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.
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
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.