machine-learning - significa - que es categorizar
Quiero una máquina para aprender a categorizar textos cortos. (8)
A menos que haya una posibilidad de que quiera hacer otras 500 clasificaciones en el futuro, no estoy seguro de que optaría por un enfoque de aprendizaje automático.
A menos que las categorías sean muy similares ("comida" y "comida italiana" para tomar un ejemplo), creo que una heurística bastante ingenua podría funcionar muy bien.
Para cada categoría, construya una tabla de palabras comunes (para alimentos: "papa", "alimentos", "cocinero", "tomate", "restaurante", ...) y para cada recuento de texto qué categoría obtuvo la mayor cantidad de coincidencias de palabras. En lugar de construir el diccionario a mano, puede tomar una muestra (digamos 100) de los textos, categorizarlos a mano y luego dejar que un algoritmo seleccione las palabras y luego asegurarse de eliminar las palabras que son comunes entre todos los conjuntos (ya que no proporcionar información). Esto es, en esencia, un sistema de "aprendizaje" muy simple.
Si realmente desea un sistema de aprendizaje automático, existen varios métodos para la clasificación. La desventaja es que, aunque la mayoría de los métodos son fáciles de implementar, la parte difícil es elegir un buen método, las características correctas y los buenos parámetros.
Tengo un montón de historias cortas de aproximadamente 500 palabras y quiero clasificarlas en una de, digamos, 20 categorías:
- Entretenimiento
- Comida
- Música
- etc
Puedo clasificarlos a mano, pero quiero implementar el aprendizaje automático para adivinar las categorías eventualmente. ¿Cuál es la mejor manera de abordar esto? ¿Hay un enfoque estándar para el aprendizaje automático que debería estar usando? No creo que un árbol de decisiones funcione bien ya que son datos de texto ... Soy completamente nuevo en este campo.
¡Cualquier ayuda será apreciada, gracias!
Creo que vale la pena leer el documento "Aprendizaje automático en la categorización automatizada de texto" (puede buscar en Google y descargar el archivo PDF). El documento trató dos partes cruciales: una para la selección de características (traducir texto a espacio de características), la otra para construir un clasificador en el espacio de características. hay muchos métodos de selección de características y varios métodos de clasificación (árbol de decisión, Bayes ingenuo, kNN, SVM, etc.). puede probar alguna combinación para ver si estaba funcionando en su conjunto de datos.
Antes hice algo similar, uso Python para la manipulación del texto, la selección de funciones y la ponderación de funciones. y Orange para clasificador. Orange y Weka ya incluían a Bayes ingenuo, kNN ..., pero hoy en día podría escribir el clasificador directamente con el script Python, no debería ser muy difícil también.
Espero que esto ayude.
He clasificado decenas de miles de textos cortos. Lo que hice inicialmente fue usar un modelo de espacio vectorial tf-idf y luego hice k-means clustering en esos vectores. Este es un muy buen paso inicial de análisis de datos exploratorios para obtener un buen control de su conjunto de datos. El paquete que solía agrupar era cluto: http://glaros.dtc.umn.edu/gkhome/views/cluto/
Para hacer tf-idf, acabo de escribir un script rápido en perl para tokenize en no alfanuméricos. Entonces, cada documento consiste en una bolsa de palabras. Cada documento se representa como un vector de las palabras que contiene. El valor de cada índice del vector es el término frecuencia (tf) * frecuencia de documento inversa (idf). Es solo el producto del conteo de esa palabra / término en el documento multiplicado por el recíproco de la fracción de los documentos que contienen esa palabra. (porque una palabra como "el" es muy poco informativa).
Este método le proporcionará rápidamente una precisión del 80% -90%. A continuación, puede etiquetar manualmente los que son correctos (o, lo que es más importante, incorrectos) y luego realizar un aprendizaje supervisado si así lo desea.
La mayoría de la gente dirá que el análisis estadístico de textos (como un enfoque ingenuo de Bayes) es el enfoque estándar: "Fundamentos del procesamiento estadístico del lenguaje natural", Manning y Schuetze y "Procesamiento del habla y el lenguaje", Jurafsky y Martin son las referencias estándar. El análisis estadístico de texto se convirtió en el enfoque estándar a finales de los 90 porque superaban fácilmente a los sistemas simbólicos. Sin embargo, algunos sistemas simbólicos incorporan elementos estadísticos y también puede utilizar un enfoque conexionista (hay algunos artículos que demuestran esto). También puedes usar la similitud de coseno (una forma de k-Vecino más cercano) aunque el ingenuo Bayes suele ser el que tiene el mejor rendimiento.
Aquí hay una buena descripción general: http://www.cs.utexas.edu/users/hyukcho/classificationAlgorithm.html Utilicé el arco iris mencionado en esa página para la clasificación de texto en un prototipo de motor de búsqueda que escribí en un proyecto punto com.
Podemos usar la PNL aquí. A continuación se detallan los pasos que implementé para clasificar los correos electrónicos en diferentes categorías aquí: 1. Lematización: Esto eliminaría detalles innecesarios y convertiría todas las palabras en sus formas básicas o raíces. Como, se convertirá el trabajo en trabajo, correr en carrera, los caballos en caballo, etc. Podemos Stanford Lemmatizer para este propósito. http://stanfordnlp.github.io/CoreNLP/
Filtrado de Wordnet: solo podemos usar las palabras que están presentes en Wordnet. Usé la interfaz Java Wordnet para este propósito. Simplemente filtre las palabras que no se encuentran en wordnet y tome el resto de las palabras. http://projects.csail.mit.edu/jwi/
Encuentre sinónimos y otros sinónimos: para cada una de las 5 o 6 categorías mencionadas anteriormente, forme conjuntos separados que contengan sinónimos de estas categorías. Por ejemplo, forme un conjunto que contenga sinónimos de Entretenimiento y luego otros sinónimos de los sinónimos de entretenimiento encontrados. Podemos aumentar este conjunto mediante el rastreo web también.
- Alimente los datos: tome todas las palabras después de Lemmatization y Wordnet filtrando una historia en particular y verifique cuántas palabras coinciden en cada grupo de categorías. Por ejemplo, si una historia contiene 100 palabras y coincide con 35 palabras en la categoría de entretenimiento, 40 palabras con comida, 30 palabras con viaje, entonces es muy probable que caiga dentro de la categoría de comida y, por lo tanto, sería una historia de comida. . Obtuve buenos resultados para mi clasificación de correo electrónico utilizando el enfoque anterior.
Pruebe Weka ... es una herramienta gratuita de minería de datos que implementa muchos algoritmos de aprendizaje automático. Tiene una GUI y una API, por lo que puede usarla directamente en su conjunto de datos o puede programar contra ella.
Si le gustan los resultados de los diversos algoritmos de aprendizaje automático y aún está interesado en implementar sus propios algoritmos, puede implementar el que más le guste. Esto también lo ayudará a eliminar algunos de los sentimientos de "realmente funcionará" que normalmente obtiene antes de construir un algoritmo ML / AI.
Si está buscando algo fuera de la plataforma, es posible que desee probar los algoritmos de minería de datos de Microsoft en SQL Server:
http://msdn.microsoft.com/en-us/library/ms175595%28v=SQL.100%29.aspx
Un Bayes ingenuo probablemente trabajará para ti. El método es así:
- Corrija un número de categorías y obtenga un conjunto de datos de entrenamiento de pares (documento, categoría).
- Un vector de datos de su documento será algo como una bolsa de palabras. por ejemplo, tome las 100 palabras más comunes, excepto palabras como "el", "y" y tal. Cada palabra recibe un componente fijo de su vector de datos (por ejemplo, "alimento" es la posición 5). Un vector de características es entonces una matriz de valores booleanos, cada uno de los cuales indica si esa palabra apareció en el documento correspondiente.
Formación:
- Para su conjunto de entrenamiento, calcule la probabilidad de cada característica y cada clase: p (C) = número de documentos de clase C / número total de documentos.
- Calcule la probabilidad de una característica en una clase: p (F | C) = número de documentos de la clase con la característica dada (= la palabra "comida" está en el texto) / número de documentos en la clase dada.
Decisión:
- Dado un documento no clasificado, la probabilidad de que pertenezca a la clase C es proporcional a P (C | F1, ..., F500) = P (C) * P (F1 | C) * P (F2 | C) * .. . * P (F500 | C). Elige la C que maximice este término.
- Dado que la multiplicación es numéricamente difícil, puede utilizar la suma de los registros en su lugar, que se maximiza al mismo C: log P (C | F1, ..., F500) = log P (C) + log P (F1 | C ) + log P (F2 | C) + ... + log P (F500 | C).