5

PreguntasLa selección de características y el aprendizaje no supervisado para la selección del algoritmo de datos multilingüe + aprendizaje automático

Quiero clasificar/categorizar/cluster/agrupar un conjunto de varios miles de sitios web. Hay datos en los que podemos entrenar, para que podamos hacer un aprendizaje supervisado, pero no son datos que hemos reunido y no nos empeñamos en usarlos, por lo que también estamos considerando el aprendizaje sin supervisión.

  • ¿Qué características puedo usar en un algoritmo de aprendizaje automático para manejar datos multilingües? Tenga en cuenta que algunos de estos lenguajes podrían no haberse tratado en el campo Procesamiento del lenguaje natural.

  • Si tuviera que utilizar un algoritmo de aprendizaje no supervisado, ¿debería dividir los datos por idioma y tratar cada idioma de manera diferente? Los diferentes idiomas pueden tener diferentes categorías relevantes (o no, dependiendo de sus tendencias teóricas psicolingüísticas), lo que podría afectar la decisión de partición.

  • Estaba pensando en usar árboles de decisión, o tal vez máquinas de vectores de soporte (SVM) para permitir más funciones (desde mi comprensión de ellas). This post sugiere bosques aleatorios en lugar de SVM. ¿Alguna idea?

¡Los enfoques pragmáticos son bienvenidos! (Las teóricas, también, pero los que se salven para la diversión más adelante.)

algún contexto

Estamos tratando de clasificar un corpus de muchos miles de sitios web en 3 a 5 idiomas (tal vez hasta 10 , pero no estamos seguros).

Tenemos datos de entrenamiento en forma de cientos de sitios web ya clasificados. Sin embargo, podemos optar por usar ese conjunto de datos o no; si otras categorías tienen más sentido, estamos abiertos a no utilizar los datos de capacitación que tenemos, ya que no es algo que hayamos recopilado en primer lugar. Estamos en las etapas finales de raspado de datos/texto de sitios web.

Ahora debemos decidir sobre los problemas anteriores. He trabajado un poco con Brown Corpus y el etiquetador Brill, pero esto no funcionará debido al problema de varios idiomas.

Tenemos la intención de utilizar el paquete de aprendizaje automático Orange.

+1

Entonces, ¿esto es supervisado o no? – rmalouf

+0

Entiendo que quiere decir clasificación _semantic_/clustering, es decir, agrupación por sentido y no otra información como número de enlaces, sentimientos, mencionar nombres de compañías, etc. – ffriend

+0

@rmalouf: ¡La pregunta ha sido aclarada! @ffriend: No estoy seguro de que necesariamente lo describa como _semantic_ ya que eso podría llevarnos a territorios teóricos y técnicos tangentes ... ¡pero seguro! (De nuevo, en un sentido muy amplio de la palabra.) Definitivamente no estamos tratando de ver cosas como recuentos de enlaces brutos o recuentos de nombres específicos. – arturomp

Respuesta

3

De acuerdo con el contexto que ha proporcionado, este es un problema de aprendizaje supervisado. Por lo tanto, está haciendo una clasificación, no agrupando. Si no entendí bien, actualice su pregunta para decirlo.

Empezaría con las funciones más simples, concretamente, convertir el texto unicode de las páginas y usar un diccionario para traducir cada nuevo token a un número, y simplemente considerar la existencia de un token como característica.

A continuación, usaría el algoritmo más simple que pueda - tiendo a ir con Naive Bayes, pero si tienes una manera fácil de ejecutar SVM, esto también es bueno.

Compare sus resultados con algunos valores de referencia, por ejemplo, asignando la clase más frecuente a todas las páginas.

¿Es el enfoque más simple lo suficientemente bueno? Si no, comience a iterar sobre algoritmos y características.

+0

Gracias por su respuesta! He actualizado mi pregunta para aclarar que no estamos preparados para utilizar los datos de capacitación que tenemos, ya que no estamos 100% seguros de que sea la clasificación más adecuada (por razones de escepticismo saludable ya que no proviene directamente de nosotros). También gracias por la traducción de números y consejos básicos. ¡Tendremos eso en mente! – arturomp

3

Si va por la ruta supervisada, el hecho de que las páginas web estén en varios idiomas no debería marcar la diferencia. Si opta por, digamos características léxicas (estilo bag-o'-words), cada idioma terminará produciendo conjuntos disjuntos de características, pero está bien. Es probable que todos los algoritmos estándar den resultados comparables, así que solo elige uno e ir con él. Estoy de acuerdo con Yuval en que Naive Bayes es un buen lugar para comenzar, y solo si eso no satisface tus necesidades, prueba algo como SVM o bosques aleatorios.

Si va por la ruta no supervisada, sin embargo, el hecho de que los textos no están todos en el mismo idioma podría ser un gran problema. Cualquier algoritmo de agrupamiento razonable agrupará primero los textos por idioma, y ​​luego dentro de cada grupo de idiomas por algo como un tema (si está utilizando palabras de contenido como características). Si eso es un error o una característica dependerá completamente de por qué quieres clasificar estos textos. Si el punto es agrupar documentos por tema, independientemente del idioma, entonces no es bueno. Pero si estás de acuerdo en tener diferentes categorías para cada idioma, entonces sí, tienes tantos problemas de clasificación como idiomas.

Si desea un conjunto unificado de clases, necesitará una forma de vincular documentos similares en todos los idiomas. ¿Hay documentos en más de un idioma? De ser así, podría usarlos como un tipo de piedra estadística de Rosetta, para vincular palabras en diferentes idiomas. Luego, utilizando algo así como el Análisis Semántico Latente, podría extenderlo a las relaciones de segundo orden: palabras en diferentes idiomas que nunca aparecen en el mismo documento, pero que tienden a coincidir con palabras que sí lo hacen. O tal vez podría usar algo como el texto de anclaje o las propiedades de las URL para asignar una clasificación aproximada a los documentos de una manera independiente del idioma y usar eso como una forma de comenzar.

Pero, sinceramente, parece extraño entrar en un problema de clasificación sin una idea clara de cuáles son las clases (o al menos lo que sería una buena clasificación). Venir con las clases es la parte difícil, y es la parte que determinará si el proyecto es un éxito o un fracaso. La parte algorítmica real es bastante rutinaria.

1

La respuesta principal es: pruebe diferentes enfoques. Sin pruebas reales, es muy difícil predecir qué método dará los mejores resultados. Entonces, solo sugeriré algunos métodos que probaría primero y describiré sus pros y contras.

Antes que nada, recomendaría aprendizaje supervisado. Incluso si la clasificación de datos no es muy precisa, aún puede dar mejores resultados que la agrupación no supervisada. Uno de los motivos es la cantidad de factores aleatorios que se utilizan durante la agrupación. Por ejemplo, el algoritmo k-means se basa en puntos seleccionados al azar al comenzar el proceso, lo que puede conducir a resultados muy diferentes para diferentes ejecuciones del programa (aunque las modificaciones de x-means parecen normalizar este comportamiento). La agrupación dará buenos resultados solo si los elementos subyacentes producen áreas bien separadas en el espacio de características.

Uno de los enfoques para tratar datos multilingües es utilizar recursos multilingües como puntos de apoyo. Por ejemplo, puede indexar algunos artículos de Wikipedia y crear "puentes" entre los mismos temas en diferentes idiomas. Alternativamente, puede crear diccionario de asociación multilingüe como this paper describe.

En cuanto a los métodos, la primera cosa que viene a la mente es métodos semánticos basados ​​en instancia como LSI. Utiliza vector space model para calcular la distancia entre palabras y/o documentos. A diferencia de otros métodos, puede tratar eficazmente la sinonimia y la polisemia. La desventaja de este método es una ineficiencia computacional y una fuga de implementaciones.Una de las fases de LSI utiliza una matriz de coocurrencia muy grande, que para grandes corpus de documentos requerirá informática distribuida y otro tratamiento especial. Hay una modificación de LSA llamada Indización aleatoria que no construye una matriz de coocurrencia completa, pero difícilmente encontrará una implementación adecuada para ella. Hace un tiempo creé una biblioteca en Clojure para este método, pero ahora es pre-alfa, por lo que no puedo recomendar su uso. Sin embargo, si decides intentarlo, puedes encontrar el proyecto 'Clinch' de un usuario 'faithlessfriend' en github (no publicaré un enlace directo para evitar publicidad innecesaria).

Más allá de los métodos semánticos especiales, se debe utilizar la regla "simplicidad primero". Desde este punto, Naive Bayes es un punto correcto para comenzar. La única nota aquí es que la versión multinomial de Naive Bayes es preferible: mi experiencia dice que la cantidad de palabras realmente importa.

SVM es una técnica para clasificar los datos linealmente separables, y datos de texto es casi siempre no linealmente separables (por lo menos varias palabras comunes aparecen en cualquier par de documentos). Esto no significa que SVM no se pueda usar para la clasificación de texto; aún así debe intentarlo, pero los resultados pueden ser mucho menores que para otras tareas de aprendizaje automático.

No tengo suficiente experiencia con árboles de decisión, pero usarlo para una clasificación de texto eficiente me parece extraño. He visto algunos ejemplos en los que dieron excelentes resultados, pero cuando traté de usar el algoritmo C4.5 para esta tarea, los resultados fueron terribles. Creo que deberías obtener algún software donde los árboles de decisión estén implementados y probarlos tú mismo. Siempre es mejor saber sugerir.

Hay mucho más que decir sobre cada tema, así que no dude en hacer más preguntas sobre un tema específico.

Cuestiones relacionadas