Sortie prédictive avec votre propre modèle construit
J'aurais besoin de mieux comprendre comment créer un algorithme d'apprentissage automatique à partir de zéro en utilisant un propre modèle développé à partir de valeurs booléennes, par exemple # de mots dans un texte, # de ponctuation, # de majuscules, etc., pour déterminer si un texte est formel ou informel. Par exemple: j'ai
Text
there is a new major in this town
WTF?!?
you're a great person. Really glad to have met you
I don't know what to say
BYE BYE BABY
J'ai créé des règles pour attribuer une étiquette à ce (petit) ensemble de données de train, mais j'aurais besoin de comprendre comment appliquer ces règles à un nouvel ensemble de données (test):
- s'il y a un mot en majuscule alors I;
- s'il y a une expression courte, comme don't, 'm,' s, ..., alors je;
- s'il y a deux symboles (ponctuation) proches l'un de l'autre, alors I;
- si un mot est dans une liste de mots supplémentaires, alors je;
- sinon F.
Supposons que j'ai un dataframe à tester et à attribuer ces étiquettes (I ou F):
FREEDOM!!! I don't need to go to school anymore
What are u thinking?
Hey men!
I am glad to hear that.
comment puis-je appliquer mon modèle à ce nouvel ensemble de données, en ajoutant des étiquettes?
Test Output
FREEDOM!!! I don't need to go to school anymore I
What are u thinking? I
Hey men! I
I am glad to hear that. F
Mise à jour après le commentaire de mnm:
Serait-il considéré comme un problème d'apprentissage automatique le suivant?
import pandas as pd
import numpy as np
data = { "ID":[1,2,3,4],
"Text":["FREEDOM!!! I don't need to go to school anymore",
"What are u thinking?",
"Hey men!","
I am glad to hear that."]}
# here there should be the part of modelling
df['upper'] = # if there is an upper case word then "I"
df['short_exp'] = # if there is a short exp then "I"
df['two_cons'] = # if there are two consecutive symbols then "I"
list_extra=['u','hey']
df['extra'] = # if row contains at least one of the word included in list_extra then 'I'
# append cols to original dataframe
df_new = df
df_new['upper'] = df1['upper']
df_new['short_exp'] = df1['short_exp']
# and similar for others
Il n'est pas clair, cependant, la dernière partie, celle basée sur la condition. Comment puis-je prévoir les nouvelles valeurs des autres textes?
Réponses
Ce que vous proposez est une méthode heuristique , car vous définissez les règles manuellement à l'avance. Du point de vue du Machine Learning (ML), la «formation» est la partie où vous observez certaines données et décidez quelles règles appliquer, et le «test» est lorsque vous exécutez un programme qui applique ces règles pour obtenir une étiquette prédite. Comme vous l'avez bien compris, la partie test doit être appliquée à un ensemble de test composé d'instances invisibles. Les instances de l'ensemble de test doivent également être étiquetées manuellement (de préférence avant d'effectuer les tests afin d'éviter tout biais), afin que vous puissiez évaluer votre méthode (c'est-à-dire calculer les performances).
Techniquement, vous n'utilisez aucune approche ML ici, car il n'y a aucune partie où vous entraînez automatiquement un modèle. Cependant, les heuristiques peuvent être utiles, en particulier elles sont parfois utilisées comme base de référence pour comparer les modèles ML.
[ajout suivant commentaire]
Je pense que la plupart des approches de prétraitement courantes nécessitent de convertir le texte en minuscules, mais un mot, pris dans un concours différent, peut avoir un poids différent.
Cela est vrai pour de nombreuses tâches en PNL (traitement du langage naturel) mais pas pour toutes. Par exemple, pour les tâches liées à la capture du style d'écriture (stylométrie) d'un auteur, on ne prétraiterait généralement pas le texte de cette façon. Le choix de la représentation du texte sous forme d'entités dépend de la tâche donc le choix fait partie de la conception, il n'y a pas de méthode universelle.
comment former un modèle qui peut «apprendre» à prendre en compte les mots majuscules et la ponctuation importants?
Dans le ML traditionnel (c'est-à-dire le ML statistique, par opposition au Deep Learning), cette question est liée à l'ingénierie des fonctionnalités, c'est-à-dire à la recherche du meilleur moyen de représenter une instance (avec des fonctionnalités) en relation avec la tâche: si vous pensez que cela a du sens pour votre tâche d'avoir des fonctionnalités spécifiques pour représenter ces choses, il suffit de les ajouter: par exemple, vous pouvez ajouter une fonctionnalité booléenne qui est vraie si l'instance contient au moins un mot en majuscule, une fonction numérique qui représente le nombre de signes de ponctuation dans l'instance, etc.
Les packages ML récents proposent des moyens standard de représenter les instances de texte en tant que fonctionnalités et c'est souvent très pratique, mais il est important de garder à l'esprit que ce n'est pas le seul moyen. De plus, de nos jours, les méthodes d'apprentissage en profondeur offrent des moyens de contourner l'ingénierie des fonctionnalités, donc il y a un peu tendance à l'oublier, mais à mon avis, c'est une partie importante de la conception, ne serait-ce que pour comprendre le fonctionnement du modèle.