Técnica de aprendizaje automático para aprender patrones de cuerdas

11

Tengo una lista de palabras, que pertenecen a diferentes categorías autodefinidas. Cada categoría tiene su propio patrón (por ejemplo, uno tiene una longitud fija con caracteres especiales, otro existe de caracteres que aparecen solo en esta categoría de "palabra", ...).

Por ejemplo:

"ABC" -> type1
"ACC" -> type1
"a8 219" -> type2
"c 827" -> type2
"ASDF 123" -> type2
"123123" -> type3
...

Estoy buscando una técnica de aprendizaje automático para aprender estos patrones por sí sola, basada en datos de entrenamiento. Ya intenté definir algunas variables predictoras (por ejemplo, longitud de palabra, número de caracteres especiales, ...) por mi cuenta y luego usé una red neuronal para aprender y predecir la categoría. Pero eso no es lo que quiero. Quiero una técnica para aprender el patrón para cada categoría por sí mismo, incluso para aprender patrones en los que nunca pensé.

Entonces le doy al algoritmo datos de aprendizaje (que consisten en ejemplos de categorías de palabras) y quiero que aprenda patrones para cada categoría para predecir luego la categoría a partir de palabras similares o iguales.

¿Hay alguna forma de hacerlo?

Gracias por tu ayuda

chresse
fuente
Desde mi punto de vista, puede hacer algo como esto cistrome.org/cr/images/Figure4.png , pero en lugar de ACGT puede usar patrones como "número, mayúscula, minúscula, espacio", etc.
Alemán Demidov
@ GermanDemidov gracias por tu comentario. Ya pensé en algo como esto. Pero realmente quiero que el algoritmo de aprendizaje lo haga solo y detecte los patrones. (No sé si es posible para ML).
chresse
En realidad, estos patrones son de aprendizaje automático. Por supuesto, puede hacerlo con el aprendizaje automático, pero una persona necesita hacer una extracción de características primero antes de darlo como una entrada al algoritmo ML. ¿Qué características extraerías de estos ejemplos? Puedo pensar en funciones hash, pero funcionará bastante mal para cadenas de longitud desigual. Entonces, dado que encontrará una forma de extraer características, podrá utilizar los métodos de ML. También puede hacer algo como la distancia de Levenshtein entre símbolos de diferentes clases, agruparlos y usar la distancia mínima a los centroides para la clasificación.
Alemán Demidov
@chresse, es posible que desee agregar la etiqueta de aprendizaje no supervisado a su pregunta. Para hacer esto con redes neuronales, este documento de LeCun podría ser de interés. Como no tengo mucha experiencia con minería de texto o redes neuronales, no puedo decir qué tan bueno podría ser este enfoque.
GeoMatt22
1
Así que transforma tus vectores usando características que usas naturalmente (u - mayúsculas, l - minúsculas, n - número, s - espacio), de modo que tus vectores serán "ABC" - "uuu", "a8 219" - "lnsnnn" y así en. Luego debe introducir alguna medida de distancia, por ejemplo, usando este algoritmo: en.wikipedia.org/wiki/Smith –Waterman_algorithm. Después de esto, podrá realizar una clasificación / agrupación / visualización de sus datos.
Alemán Demidov

Respuestas:

6

¿Podría volver a plantearse su problema como querer descubrir las expresiones regulares que coincidirán con las cadenas en cada categoría? Este es un problema de "generación de expresiones regulares", un subconjunto del problema de inducción gramatical (véase también el sitio web de Alexander Clark ).

El problema de la expresión regular es más fácil. Te puedo apuntar al código frak y RegexGenerator . El RegexGenerator ++ en línea tiene referencias a sus documentos académicos sobre el problema.

blackeneth
fuente
5

Puede probar redes neuronales recurrentes, donde su entrada es una secuencia de las letras de la palabra y su salida es una categoría. Esto se ajusta a sus requisitos de tal manera que no codifica manualmente ninguna función.

Sin embargo, para que este método realmente funcione, necesitará un conjunto de datos de entrenamiento bastante grande.

Puede consultar el etiquetado de secuencia supervisada con redes neuronales recurrentes de Alex Graves, capítulo 2 para obtener más detalles.

Este es un enlace a la preimpresión

Arun Jose
fuente
1
¿Podría agregar una cita completa para su referencia final, en caso de que el enlace "preprint.pdf" se rompa en el futuro? (¿Creo que este es el capítulo relevante?)
GeoMatt22