Salida predictiva con su propio modelo construido

Oct 08 2020

Necesitaría comprender mejor cómo se puede crear un algoritmo de aprendizaje automático desde cero utilizando un modelo propio desarrollado en base a valores booleanos, por ejemplo, # de palabras en un texto, # de puntuación, # de letras mayúsculas, etc., para determinar si un texto es formal o informal. Por ejemplo: tengo

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

Creé algunas reglas para asignar una etiqueta en este (pequeño) conjunto de datos de tren, pero necesitaría entender cómo aplicar estas reglas a un nuevo conjunto de datos (prueba):

  • si hay una palabra en mayúscula, entonces yo;
  • si hay una expresión corta, como no, 'm,' s, ..., entonces yo;
  • si hay dos símbolos (puntuación) cerca uno del otro, entonces yo;
  • si una palabra está en la lista de palabras adicionales, entonces yo;
  • de lo contrario F.

Supongamos que tengo un marco de datos para probar y asignar estas etiquetas (I o F):

FREEDOM!!! I don't need to go to school anymore
What are u thinking?
Hey men!
I am glad to hear that. 

¿Cómo podría aplicar mi modelo a este nuevo conjunto de datos, agregando etiquetas?

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

Actualización después del comentario de mnm:

¿Se consideraría un problema de aprendizaje automático el siguiente?

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

Sin embargo, no está claro, la última parte, que se basa en la condición. ¿Cómo puedo predecir los nuevos valores para los otros textos?

Respuestas

2 Erwan Oct 09 2020 at 02:12

Lo que está proponiendo es un método heurístico , porque define las reglas manualmente de antemano. Desde el punto de vista del aprendizaje automático (ML), el "entrenamiento" es la parte en la que observa algunos datos y decide qué reglas aplicar, y la "prueba" es cuando ejecuta un programa que aplica estas reglas para obtener una etiqueta predicha. Como entendió correctamente, la parte de prueba debe aplicarse a un conjunto de prueba formado por instancias invisibles. Las instancias en el conjunto de prueba también deben etiquetarse manualmente (preferiblemente antes de realizar la prueba para evitar cualquier sesgo), de modo que pueda evaluar su método (es decir, calcular el rendimiento).

Técnicamente, no está utilizando ningún enfoque de ML aquí, ya que no hay ninguna parte en la que entrene automáticamente un modelo. Sin embargo, las heurísticas pueden ser útiles, en particular, a veces se usan como línea de base para comparar los modelos ML.


[adición siguiente comentario]

Creo que la mayor parte del enfoque de preprocesamiento común requiere convertir el texto en minúsculas, pero una palabra, tomada en un concurso diferente, puede tener un peso diferente.

Esto es cierto para muchas tareas en PNL (procesamiento del lenguaje natural), pero no para todas. Por ejemplo, para las tareas relacionadas con la captura del estilo de escritura de un autor (estilometría), normalmente no se procesa previamente el texto de esta manera. La elección de la representación del texto como características depende de la tarea, por lo que la elección es parte del diseño, no existe un método universal.

¿Cómo entrenar a un modelo que pueda "aprender" a considerar importantes palabras mayúsculas y puntuación?

En ML tradicional (es decir, ML estadístico, a diferencia de Deep Learning), esta pregunta está relacionada con la ingeniería de características, es decir, encontrar la mejor manera de representar una instancia (con características) en relación con la tarea: si cree que tiene sentido para su tarea para tener características específicas para representar estas cosas, simplemente agréguelas: por ejemplo, puede agregar una característica booleana que sea verdadera si la instancia contiene al menos una palabra en mayúscula, una característica numérica que representa el número de signos de puntuación en la instancia, etc.

Los paquetes ML recientes proponen formas estándar de representar instancias de texto como características y, a menudo, es muy conveniente, pero es importante tener en cuenta que no es la única forma. Además, hoy en día, los métodos de aprendizaje profundo ofrecen formas de eludir la ingeniería de funciones, por lo que hay una tendencia a olvidarse de ella, pero en mi humilde opinión, es una parte importante del diseño, aunque solo sea para comprender cómo funciona el modelo.