Entonces, estoy empezando a aprender cómo una red neuronal puede operar para reconocer patrones y categorizar entradas, y he visto cómo una red neuronal artificial puede analizar datos de imágenes y categorizar las imágenes ( demostración con convnetjs ), y la clave allí consiste en reducir la imagen y cada píxel estimula una neurona de entrada en la red.
Sin embargo, ¿estoy tratando de entender si esto se puede hacer con entradas de cadena? El caso de uso que tengo es un "motor de recomendaciones" para las películas que un usuario ha visto. Las películas tienen muchos datos de cadena (título, trama, etiquetas), y podría imaginarme "reducir el muestreo" del texto a unas pocas palabras clave que describan esa película, pero incluso si analizo las cinco palabras principales que describen esta película, yo ¿Crees que necesitaría neuronas de entrada para cada palabra en inglés para comparar un conjunto de películas? Podría limitar las neuronas de entrada solo a las palabras utilizadas en el set, pero ¿podría crecer / aprender agregando nuevas películas (el usuario ve una nueva película, con nuevas palabras)? ¿La mayoría de las bibliotecas que he visto no permiten agregar nuevas neuronas después de que el sistema ha sido entrenado?
¿Existe una forma estándar de asignar datos de cadena / palabra / carácter a entradas en una red neuronal? ¿O una red neuronal realmente no es la herramienta adecuada para el trabajo de analizar datos de cadena como este (qué es una mejor herramienta para la coincidencia de patrones en datos de cadena)?
fuente
Tanto las respuestas de @Emre como @Madison May hacen buenos puntos sobre el tema en cuestión. El problema es uno de representar su cadena como un vector de características para la entrada al NN.
Primero, el problema depende del tamaño de la cadena que desea procesar. Las cadenas largas que contienen tokens de mayo (generalmente palabras) a menudo se denominan documentos en esta configuración. Existen métodos separados para tratar con tokens / palabras individuales.
Hay varias formas de representar documentos. Muchos de ellos hacen la suposición de la bolsa de palabras . Los tipos más simples representan el documento como un vector de los recuentos de palabras, o frecuencia de término (tf). Para eliminar los efectos de la longitud del documento, por lo general, las personas prefieren normalizar por la cantidad de documentos en los que aparece un término, la frecuencia del documento ( tf-idf ).
Otro enfoque es el modelado de temas, que aprende una representación latente de menor dimensión de los datos. LDA y LSI / LSA son opciones típicas, pero es importante recordar que esto no está supervisado. La representación aprendida no será necesariamente ideal para cualquier aprendizaje supervisado que esté haciendo con su NN. Si desea modelar temas, también puede probar modelos de temas supervisados .
Para palabras individuales, puede usar word2vec , que aprovecha NN para incrustar palabras en un espacio de tamaño arbitrario. La similitud entre dos vectores de palabras en este espacio aprendido tiende a corresponder a la similitud semántica.
Un enfoque pionero más reciente es el de los vectores de párrafo , que primero aprende un modelo de palabra similar a word2vec, luego se basa en esa representación para aprender una representación distribuida de conjuntos de palabras (documentos de cualquier tamaño). Esto ha mostrado resultados de vanguardia en muchas aplicaciones.
Cuando se usan NN en PNL, las personas a menudo usan diferentes arquitecturas, como Redes Neuronales Recurrentes (como las redes de Memoria a Corto Plazo ). En algunos casos, las personas incluso han utilizado redes neuronales convolucionales en el texto.
fuente
Este no es un problema sobre las redes neuronales per se, sino sobre la representación de datos textuales en el aprendizaje automático. Puede representar las películas, el elenco y el tema como variables categóricas. La trama es más complicada; probablemente quieras un modelo de tema para eso, pero lo dejaría fuera hasta que te acostumbres a las cosas. Hace precisamente ese "muestreo descendente" textual que mencionaste.
Eche un vistazo a este tutorial para aprender a codificar variables categóricas para redes neuronales. ¡Y buena suerte!
fuente
He intentado las siguientes 2 formas para la implementación de prueba y prueba de redes neuronales con texto. El último funciona bastante bien, pero con limitaciones.
Cree vocabulario usando word2vect o NLTK / tokens de palabras personalizados y asigne un índice a cada palabra. Es este índice el que representa la palabra como número.
Desafíos:
Use la matriz de identidad, por ejemplo, para palabras "n", use la matriz "nx n" o (n-1 x n-1) donde cada fila y columna representa una palabra. Ponga "1" en la celda de intersección y "0" en los lugares de descanso. ( referencia )
Desafíos:
fuente