Technologie

Automatiser le nettoyage des données avec un apprentissage non supervisé

Automatiser le nettoyage des données avec un apprentissage non supervisé


Nettoyer du texte pour vos projets PNL n'a jamais été aussi simple et amusant!

1*AmhWkgbff5os5Vlxb8HZCg - Automatiser le nettoyage des données avec un apprentissage non supervisé

J'aime travailler avec des données textuelles. En ce qui concerne Computer Vision, en PNL, il existe actuellement de nombreuses ressources accessibles et des projets opensource, que nous pouvons directement télécharger ou utiliser. Certaines d'entre elles sont vraiment cool et nous permettent d'accélérer et de porter nos projets à un autre niveau.

La chose la plus importante à ne pas oublier est que tous ces instruments ne sont pas magiques. Certains d’entre eux déclarent de hautes performances mais ne sont rien si nous ne leur permettons pas de tirer le meilleur parti. C'est une vérité difficile, en particulier dans le domaine de la PNL, où nous sommes souvent confrontés à un niveau élevé de bruit dans les données, qui est très difficile à supprimer (plus difficile que de travailler avec des images).

Dans cet article, je propose ma solution pour améliorer la qualité des données textuelles à ma disposition. Je développe un flux de travail qui vise à nettoyer les données automatiquement et de manière non supervisée. je dis «Automatiquement» car il est inutile de suivre une approche non supervisée si nous devons vérifier manuellement tout le temps les données pour comprendre ce que le modèle produit. Nous avons besoin de certitudes et nous ne voulons pas perdre notre temps.

Ici, mon objectif est de «nettoyer» les documents de recherche. Dans cette situation, nettoyer signifie conserver la partie pertinente du texte, en jetant des morceaux contenant des informations inutiles. Dans le sous-ensemble des documents d’apprentissage automatique, je considère comme partie pertinente les phrases textuelles et comme inutiles les pièces contenant, pour la plupart, algèbre et notations. Un accès direct à ces éléments peut faciliter la tâche, telle que la modélisation de sujets, la synthèse, la classification, etc.

J'ai trouvé le jeu de données ‘NIPS 2015 Papers’ sur Kaggle. Je télécharge directement le Paper.csv. Cet ensemble de données contient 403 articles de NIPS 2015 (Systèmes de traitement de l'information neuronale; l'une des principales conférences d'apprentissage automatique au monde, couvrant des sujets allant de l'apprentissage en profondeur à la vision par ordinateur en passant par les sciences cognitives et le renforcement).

Sujet Modélisation sur papiers NIPS par Kaggle
  • Sélectionnez un papier et divisez-le en phrases / paragraphes en appliquant un prétraitement de base
  • Créer des incorporations pondérées de phrases
  • Modélisation non supervisée de phrases dans l'espace d'intégration
  • Détection et représentation de morceaux de texte bruyants

Le pouvoir est fourni par l’utilisation d’un modèle de pré-entraînement pour les mots perdus et son vocabulaire relativement profond.

PREPROCESS

Je calcule un prétraitement standard en supprimant des nombres, et non des caractères alphanumériques et des mots vides, à partir d'un seul papier présentant un intérêt. Les points clés ici sont fournis par la création de phrases / paragraphes. Certains paquets fournissent cette fonctionnalité; Je les ai essayés mais ils ne m'ont pas convaincu autant. J'ai donc personnellement écrit mes propres fonctions simples qui répondent mieux à mes besoins lorsque je traite un corpus textuel provenant de documents entiers.

de nltk.corpus importer des mots vides
from gensim.parsing.preprocessing import *
stop_words = set (stopwords.words ('anglais'))def create_sentence (text):
sortie = []
pour s dans re.split ('. n | . r n | .', text):
output.extend (re.split (' n n | r n r n', s))
retour de sortie
def clean_sentence (phrase):
phrase = strip_numeric (strip_non_alphanum (phrase))
sentence = sentence.lower (). split ()
revenir [w for w in sentence if w not in stop_words]

CONDAMNATION

Une bonne représentation numérique des phrases est essentielle au succès de l’ensemble de la procédure. Nous voulons que les phrases significatives soient similaires et plus proches les unes des autres dans l'espace intégré, tout en souhaitant que les phrases bruyantes soient éloignées de celles qui ont du sens et similaires entre elles. Pour mener à bien cette étape cruciale, nous utilisons de puissants systèmes d’intégration de mots pré-indexés, j’ai choisi GloVe.

Nous créons des phrases incorporées en tant que poids moyen des mots singuliers. Le poids est donné en calculant le TfIdf sur le corpus de papier composé de phrases. Lors de l'ensemencement, pour chaque mot d'une phrase particulière, nous sélectionnons l'incorporation relative de GloVe (si présente) et nous le multiplions pour le poids du mot TfIdf. La somme des mots pondérés dans chaque phrase est normalisée en divisant par la somme des poids des mots TfIdf dans la phrase.

emb_dim = 300
model = KeyedVectors.load_word2vec_format ('GoogleNews-vectors-negative300.bin', binaire = True)
tfidf = TfidfVectorizer ()
tfidf.fit (list (map ('.join, cleaning_corpus)))

Afin de rendre ce processus facile et léger, j’ai choisi Gensim pour charger et utiliser GloVe. Gensim nécessite le .poubelle format de GloVe (disponible ici avec les autres formats de fichiers); n'hésitez pas à utiliser les méthodes de lecture que vous préférez.

def Calculate_emb (clean_text, original_text):

tfidf_feat = tfidf.get_feature_names ()
tfidf_emb = tfidf.transform (list (map ('.join, clean_text)))
final_sent_emb = []
final_sent = []

pour row, envoyé en énumérer (tqdm (clean_text)):
sent_vec = np.zeros (emb_dim)
weight_sum = 0
pour mot envoyé:
essayer:
vec = modèle[word]
tfidf_score = tfidf_emb[row, tfidf_feat.index(word)]
sent_vec + = (vec * tfidf_score)
weight_sum + = tfidf_score
sauf:
passer

si sum (sent_vec)! = 0:
sent_vec / = weight_sum
final_sent.append (original_text[row])
final_sent_emb.append (sent_vec)

final_sent_emb = np.asarray (final_sent_emb)
final_sent = np.asarray (final_sent)

retour final_sent_emb, final_sent

En calculant les phrases intégrées de cette manière, nous avons déjà atteint librement un premier résultat important. Les mots qui ne sont pas présents dans le vocabulaire GloVe (3000000 mots uniques) ne sont pas pris en compte (sinon dans GloVe, il n’existe pas), c’est-à-dire qu’ils ne sont pas des termes courants et que nous pouvons les considérer comme du bruit. Immagine maintenant une phrase de tous les jetons inhabituels, elle se termine par une incorporation de tous les zéros et nous pouvons immédiatement l'exclure.

MODELLISATION ET REPRÉSENTATION NON SUPERVISÉES

La création des phrases incorporées, comme ci-dessus, est calculée pour chaque phrase du corpus. Nous avons fini avec un tableau de dimension (N, 300) où N est le nombre de phrases et 300 la dimension d’incorporation GloVe. Afin de les gérer facilement, nous réduisons leurs dimensions avec PCA et appliquons, sur l'espace réduit, un algorithme de détection d'anomalie non supervisée. Nos anomalies sont clairement situées loin du centre de densité.

Représentation 2D des imbrications de phrases

La détection de ces points anormaux (phrases) est une tâche parfaite pour Isolation Forest. Ce modèle d'ensemble exploite des partitions de l'espace en sous-groupes: diminuez le nombre de fractionnements requis pour isoler un échantillon des autres et augmentez la probabilité que cette observation soit une anomalie.

pca = PCA (n_components = 2)
X = pca.fit_transform (final_sent_emb)
IF = IsolationForest (contamination = 0.3, comportement = 'nouveau')
IF.fit (X)
plt.figure (figsize = (8,6))
plt.scatter (X.T[0], X.T[1], c = IF.predict (X), cmap = 'viridis')
Forêt d'isolement au travail sur les plongements de phrases

Notre travail est terminé, il ne reste plus qu'à vérifier les résultats! En jaune, nous avons les phrases de valeur et en dehors des parties de texte bruyantes. Pour obtenir ce résultat, il suffit de définir le "paramètre de contamination" qui indique à quel point il est difficile de jeter des informations. Ci-dessous, vous trouverez un exemple tiré du document que je viens d’analyser. Le premier extrait contient des phrases utiles contenant des informations utiles.

Show More

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Related Articles

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Close
Close