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.
--Introduction
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".
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)
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.
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!
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.
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