[PYTHON] Remplissage facile des données pouvant être utilisées dans le traitement du langage naturel

introduction

L'apprentissage en profondeur nécessite une grande quantité de données d'apprentissage, mais la réalité est qu'il n'est pas possible de collecter autant de données dans le monde réel. Dans ce contexte, la technique d'apprentissage avec une petite quantité de données s'est généralisée ces dernières années. Il existe trois façons d'apprendre avec moins de données:

--Utilisez des données de bonne qualité --Gonflé

Dans cet article, nous nous concentrerons sur le «gonflement» des données qui utilisent la traduction dans d'autres langues, qui est utilisé dans le traitement du langage naturel. Quel type de technique est «gonflant» en premier lieu, et comment effectuer «gonfler»? Je voudrais effectivement mettre en œuvre "gonflé" tout en organisant ce à quoi faire attention.

table des matières

--Introduction

Gonflage des données dans le traitement du langage naturel

Le "gonflage" est une technique qui ** convertit les données d'apprentissage d'origine pour augmenter la quantité de données **, et est souvent utilisée non seulement dans le traitement du langage naturel, mais également dans le traitement d'image. En passant, le mot original pour "gonflé" est "Augmentation des données", qui signifie littéralement "expansion des données".

Environnement analytique et préparation préalable

L'implémentation de cet article utilise le noyau de Kaggle. Les spécifications et paramètres de l'environnement Kaggle utilisé cette fois sont répertoriés ci-dessous.

N'oubliez pas d'activer Internet lorsque vous utilisez Kaggle's Kernel. De plus, lors de l'utilisation de l'environnement local, tapez la commande suivante dans l'invite de commande pour installer chaque module.

pip install -U joblib textblob
python -m textblob.download_corpora

Configurez le module comme suit.

augmentation.py


# This Python 3 environment comes with many helpful analytics libraries installed
# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python
# For example, here's several helpful packages to load in 

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)

# augmentation
from joblib import Parallel, delayed
from textblob import TextBlob
from textblob.translate import NotTranslated

# sleep
from time import sleep 

# Input data files are available in the "../input/" directory.
# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory

import os
print(os.listdir("../input"))

# Any results you write to the current directory are saved as output.

Les données utilisées cette fois sont l'ensemble de données du concours de Kaggle appelé Jigsaw Unintended Bias in Toxicity Classification. .. Dans ce processus de traduction, aucun prétraitement n'est effectué et seuls les 100 premiers enregistrements sont extraits pour une utilisation d'essai.

augmentation.py


# importing the dataset
train=pd.read_csv("../input/train.csv")
train=train.head(100)

Processus de traduction

Une fois que chaque module et chaque donnée sont prêts, je souhaite effectuer le processus de traduction. À titre de test, je voudrais exécuter le code suivant pour traduire la phrase d'exemple définie sur * x * de l'anglais au japonais.

augmentation.py


# a random example
x = "Great question! It's one we're asked a lot. We've designed the system assuming that people *will* try to abuse it. So, in addition to the peer reviews, there are algorithms on the backend doing a lot of meta-analysis. I'm sure the system isn't 100% perfect yet, but we know from months of beta testing that it's a really solid start, and we'll keep working to improve it!"

# translate
analysis = TextBlob(x)
print(analysis)
print(analysis.translate(to='ja'))

Ensuite, je pense que le résultat suivant sera retourné.

Great question! It's one we're asked a lot. We've designed the system assuming that people *will* try to abuse it. So, in addition to the peer reviews, there are algorithms on the backend doing a lot of meta-analysis. I'm sure the system isn't 100% perfect yet, but we know from months of beta testing that it's a really solid start, and we'll keep working to improve it!
Excellente question. C'est ce que nous recherchons beaucoup. Nous avons conçu le système en partant du principe que les gens essaieraient d'en abuser. Ainsi, en plus des évaluations par les pairs, il existe des algorithmes sur le backend qui effectuent beaucoup de méta-analyses. Je suis sûr que le système n'est pas encore parfait à 100%, mais nous savons que c'est un début vraiment solide après des mois de test bêta, et nous nous efforçons de l'améliorer. continuer!

Il semble que vous ayez bien réussi à le traduire. Ensuite, afin d'augmenter la polyvalence du processus de traduction exécuté, nous allons faire de la partie du processus de traduction une fonction. Dans ce processus de traduction, j'aimerais le faire en trois langues: espagnol, allemand et français. Tout d'abord, définissez la langue utilisée pour la traduction, le nombre de cœurs utilisés dans le traitement parallèle et la fréquence de progression en sortie comme paramètres.

augmentation.py


languages = ["es", "de", "fr"]
parallel = Parallel(n_jobs=-1, backend="threading", verbose=5)

Ensuite, définissez la fonction de traitement de la traduction. Le code ci-dessous est la fonction réelle du processus de traduction.

augmentation.py


def translate_text(comment, language):
    if hasattr(comment, "decode"):
        comment = comment.decode("utf-8")
    text = TextBlob(comment)
    try:
        text = text.translate(to=language)
        sleep(0.4)
        text = text.translate(to="en")
        sleep(0.4)
    except NotTranslated:
        pass
    return str(text)

En tant que point du traitement ci-dessus, la fonction de veille du module de temps est utilisée pour arrêter temporairement le traitement de traduction. La raison pour laquelle la pause est insérée ici est que l'erreur suivante se produira si elle n'est pas insérée.

HTTPError: HTTP Error 429: Too Many Requests

Nous effectuerons effectivement le processus de traduction en utilisant les paramètres et fonctions définis ci-dessus. Le processus de traduction peut être effectué avec le code suivant.

augmentation.py


comments_list = train["comment_text"].fillna("unknown").values

for language in languages:
    print('Translate comments using "{0}" language'.format(language))
    translated_data = parallel(delayed(translate_text)(comment, language) for comment in comments_list)
    train['comment_text'] = translated_data
    result_path = os.path.join("train_" + language + ".csv")
    train.to_csv(result_path, index=False)

Après avoir exécuté le processus ci-dessus, le journal doit être généré comme suit.

Translate comments using "es" language

[Parallel(n_jobs=-1)]: Using backend ThreadingBackend with 4 concurrent workers.
[Parallel(n_jobs=-1)]: Done  10 tasks      | elapsed:    2.5s
[Parallel(n_jobs=-1)]: Done  64 tasks      | elapsed:   13.4s
[Parallel(n_jobs=-1)]: Done 100 out of 100 | elapsed:   20.8s finished

Translate comments using "de" language

[Parallel(n_jobs=-1)]: Using backend ThreadingBackend with 4 concurrent workers.
[Parallel(n_jobs=-1)]: Done  10 tasks      | elapsed:    2.5s
[Parallel(n_jobs=-1)]: Done  64 tasks      | elapsed:   13.2s
[Parallel(n_jobs=-1)]: Done 100 out of 100 | elapsed:   20.7s finished
[Parallel(n_jobs=-1)]: Using backend ThreadingBackend with 4 concurrent workers.

Translate comments using "fr" language
[Parallel(n_jobs=-1)]: Done  10 tasks      | elapsed:    2.5s
[Parallel(n_jobs=-1)]: Done  64 tasks      | elapsed:   13.6s
[Parallel(n_jobs=-1)]: Done 100 out of 100 | elapsed:   21.4s finished

Si vous allez à tout fini, le résultat du processus de traduction devrait être sorti sous forme de fichier CSV.

Le résultat du rembourrage

Jetons un coup d'œil au résultat de la traduction de sortie en utilisant le texte original suivant comme exemple.

** Original **

Great question! It's one we're asked a lot. We've designed the system assuming that people will try to abuse it. So, in addition to the peer reviews, there are algorithms on the backend doing a lot of meta-analysis. I'm sure the system isn't 100% perfect yet, but we know from months of beta testing that it's a really solid start, and we'll keep working to improve it!

En comparant avec le texte d'origine, vous pouvez voir que le texte a légèrement changé dans les résultats de traduction suivants.

** Anglais-> Espagnol-> Anglais **

Great question It is one that they ask us a lot. We have designed the system assuming that people will try to abuse it. So, in addition to peer reviews, there are algorithms in the backend that perform many meta-analyzes. I'm sure the system is not 100% perfect yet, but we know for months of beta testing that it's a really solid start, and we'll keep working to improve it!

** Anglais-> Allemand-> Anglais **

Good question! We are often asked about it. We designed the system on the assumption that people will try to abuse it. In addition to the peer reviews, there are backend algorithms that do a lot of meta-analysis. I'm sure the system is not 100% perfect yet, but we know from months of beta testing that it's a really solid start, and we'll continue to work on improving it!

** Anglais-> Français-> Anglais **

Good question! We are asked a lot. We designed the system on the assumption that people will * try * to abuse it. Thus, in addition to peer reviews, there are algorithms on the backend that do a lot of meta-analysis. I'm sure the system is not 100% perfect yet, but months of beta testing have taught us that it was a good start, and we will continue to improve it!

Informations de référence

Présentation des sites qui ont servi de référence pour cet article et des sites traitant de sujets connexes.

TextBlob: Simplified Text Processing: Si vous voulez en savoir plus sur "Text Blob" utilisé pour le traitement de la traduction, veuillez cliquer ici.

[Explication de tous les arguments de Parallel of Joblib](https://own-search-and-study.xyz/2018/01/17/Explication de tous les arguments de parallel of joblib /): A propos de la bibliothèque "Joblib" pour le traitement parallèle, les arguments autres que les arguments utilisés dans cet article sont également expliqués.

Apprentissage de gonflage et de transfert (Vol.7): Il couvre la technique du "gonflement" dans le traitement de l'image.

finalement

Lorsque je construis enfin un modèle à l'aide de données gonflées, j'aimerais discuter la prochaine fois de la façon dont la similitude entre la langue d'origine et la langue utilisée dans la traduction affecte la précision du modèle.

Recommended Posts

Remplissage facile des données pouvant être utilisées dans le traitement du langage naturel
Vérification des performances du prétraitement des données dans le traitement du langage naturel
Programme d'installation facile et programme de mise à jour automatique pouvant être utilisé dans n'importe quelle langue
Résumé des méthodes d'analyse de données statistiques utilisant Python qui peuvent être utilisées en entreprise
Fonctions pouvant être utilisées dans l'instruction for
Nombre maximum de paramètres de fonction pouvant être définis dans chaque langue
Insoutenable manque d'attention dans le traitement du langage naturel
Notes personnelles des opérations liées aux pandas qui peuvent être utilisées dans la pratique
Résumé des sources de données scikit-learn pouvant être utilisées lors de la rédaction d'articles d'analyse
Algorithmes de base utilisables par les pros de la compétition
Enregistrement d'image ANT qui peut être utilisé en 5 minutes
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
traitement python3 qui semble utilisable dans paiza
Goroutine (contrôle parallèle) utilisable sur le terrain
Goroutine utilisable sur le terrain (édition errgroup.Group)
Scripts pouvant être utilisés lors de l'utilisation de Bottle en Python
Index d'évaluation pouvant être spécifié pour GridSearchCV de sklearn
Un minuteur (ticker) qui peut être utilisé sur le terrain (peut être utilisé n'importe où)
Résumé de l'entrée standard de Python pouvant être utilisée dans Competition Pro
Je l'ai fait parce que je veux des données JSON qui peuvent être utilisées librement dans les démos et les prototypes
100 traitement du langage knock-91: Préparation des données d'analogie
Traiter le nom de la carte Yugioh en langage naturel --Yugiou Data Science 2. PNL
[WIP] Pré-traitement des notes dans le traitement du langage naturel
Module de traitement du signal acoustique qui peut être utilisé avec Python-Sounddevice ASIO [Application]
Python-Sound device Module de traitement du signal acoustique ASIO [Basic]
J'ai écrit un tri-arbre qui peut être utilisé pour l'implémentation de dictionnaire à grande vitesse en langage D et Python
Types de fichiers pouvant être utilisés avec Go
Construire un Sphinx qui peut être écrit avec Markdown
Python: apprentissage profond du traitement du langage naturel: principes de base
Python: Apprentissage en profondeur dans le traitement du langage naturel: Implémentation d'un système de sélection de phrases de réponses
Liste des outils qui peuvent être utilisés pour essayer facilement l'analyse des émotions des phrases japonaises avec Python (essayez avec google colab)
[Python] J'ai examiné une pratique qui peut être exécutée en parallèle avec le thread principal par traitement asynchrone (multiprocessing, asyncio)
Présentation et fonctionnalités utiles de scikit-learn qui peuvent également être utilisées pour l'apprentissage en profondeur
Introduction du package de collecte automatique d'images "icrawler" (0.6.3) qui peut être utilisé pendant l'apprentissage automatique
Visualisation des informations géographiques de R et Python qui peuvent être exprimées par Power BI
[Python] Introduction au scraping WEB | Résumé des méthodes pouvant être utilisées avec webdriver
Traitement pleine largeur et demi-largeur des données CSV en Python
Pour pouvoir utiliser le japonais avec Python dans l'environnement Docker
Quantité d'entités pouvant être extraite des données de séries chronologiques
Le Japon peut être des galapagos en termes de langage de programmation
Modèle utilisant un réseau neuronal convolutif dans le traitement du langage naturel
Notes sur les connaissances Python utilisables avec AtCoder
Liste du code Python utilisé dans l'analyse de Big Data
Peut être utilisé chez les pros de la compétition! Bibliothèque standard Python
[Django] À propos des utilisateurs pouvant être utilisés sur un modèle
Apprenez facilement 100 traitements linguistiques Knock 2020 avec "Google Colaboratory"
Python: traitement du langage naturel
Statistiques simples qui peuvent être utilisées pour analyser l'effet des mesures sur les sites EC et les codes qui peuvent être utilisés dans le notebook jupyter
RNN_LSTM2 Traitement du langage naturel
Peut être utilisé avec AtCoder! Une collection de techniques pour dessiner du code court en Python!
[Django] Noms de champs pouvant être utilisés pour le modèle utilisateur, l'enregistrement des utilisateurs et les méthodes de connexion
[Python3] Code qui peut être utilisé lorsque vous souhaitez redimensionner des images dossier par dossier
[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
Récapitulatif du format des formats qui peuvent être sérialisés avec gensim
Connaissance de base du DNS qui ne peut pas être entendue maintenant
Analyse de texte pouvant être effectuée en 5 minutes [Word Cloud]