¿Cómo utilizo tags de cadena no enteras con SVM de scikit-learn? Pitón

Scikit-learn tiene módulos Python bastante fáciles de usar para el aprendizaje automático.

Estoy tratando de entrenar a un etiquetador SVM para el procesamiento de lenguaje natural (NLP) donde mis tags y datos de entrada son palabras y anotaciones. Por ejemplo, el etiquetado de parte de la voz, en lugar de usar datos de doble / entero como tuplas de entrada [[1,2], [2,0]] , mis tuplas se verán así [['word','NOUN'], ['young', 'adjective']]

¿Alguien puede dar un ejemplo de cómo puedo usar el SVM con tuplas de cadena? El tutorial / documentación que se proporciona aquí es para entradas enteras / dobles. http://scikit-learn.org/stable/modules/svm.html

La mayoría de los algoritmos de aprendizaje automático procesan muestras de entrada que son vectores de flotadores, de modo que una pequeña distancia (a menudo euclidiana) entre un par de muestras significa que las 2 muestras son similares de una manera que es relevante para el problema en cuestión.

Es responsabilidad del practicante de aprendizaje automático encontrar un buen conjunto de características de flotación para codificar. Esta encoding es específica del dominio, por lo tanto, no hay una forma general de construir esa representación a partir de los datos sin procesar que funcionen en todos los dominios de la aplicación (varias tareas de PNL, visión de computadora, análisis de registro de transacciones …). Esta parte del trabajo de modelado de aprendizaje automático se denomina extracción de características . Cuando implica mucho trabajo manual, a menudo se lo denomina ingeniería de características .

Ahora, para su problema específico, las tags POS de una ventana de palabras alrededor de una palabra de interés en una oración (por ejemplo, para etiquetado de secuencias como la detección de entidades nombradas) pueden codificarse apropiadamente usando la clase auxiliar de extracción de características de DictVectorizer de scikit-learn.

Esto no es tanto una cuestión de scikit o python, sino más bien un problema general con los SVM.

Las instancias de datos en SVM deben representarse como vectores de escalas de clases, típicamente, números reales. Por lo tanto, los atributos categóricos deben asignarse primero a algunos valores numéricos antes de que puedan incluirse en las SVM.

Algunos atributos categóricos se prestan de forma más natural / lógica para ser mapeados en alguna escala (algunos “métricos” sueltos). Por ejemplo, un mapeo (1, 2, 3, 5) para un campo de Prioridad con valores de (‘sin apuro’, ‘entrega estándar’, ‘Urgente’ y ‘Más urgente’) puede tener sentido. Otro ejemplo puede ser con colores que se pueden asignar a 3 dimensiones cada uno para sus componentes Rojo, Verde, Azul, etc.
Otros atributos no tienen una semántica que permita cualquier mapeo lógico incluso aproximado en una escala; A los diversos valores de estos atributos se les debe asignar un valor numérico arbitrario en una (o posiblemente varias) dimensiones de la SVM. Comprensivamente, si una SVM tiene muchas de estas dimensiones arbitrarias “no métricas”, puede ser menos eficiente en la clasificación correcta de los elementos, porque los cálculos de distancia y la lógica de agrupamiento implícita para el funcionamiento de las SVM están menos relacionadas semánticamente.

Esta observación no significa que no se puedan usar SVM en absoluto cuando los elementos incluyen dimensiones no numéricas o no “métricas”, pero ciertamente es un recordatorio de que la selección de características y el mapeo de características son parámetros muy sensibles de los clasificadores en general y SVM en particular .

En el caso particular del etiquetado de POS … Me temo que estoy perplejo en este momento, sobre qué atributos del corpus etiquetado usar y sobre cómo asignar estos a valores numéricos. Sé que SVMTool puede producir etiquetadores POS muy eficientes, utilizando SVM, y también varios artículos académicos describen a los etiquetadores también basados ​​en SVM. Sin embargo, estoy más familiarizado con los otros enfoques de etiquetado (por ejemplo, con HMM o Maximum Entropy).