He visto varias bibliotecas de identificación de idiomas que afirman utilizar el clasificador de Bayes ingenuo para la identificación de idiomas de texto, como CLD2 y detector de idiomas pero no cualquier biblioteca que utilice otros algoritmos.
Escribí un programa sencillo que utiliza 1-NN con la medida de distancia euclidiana para identificar el idioma de los textos. Las características que he elegido son la ocurrencia de cada palabra, o n-gramas, donde n puede ser cualquier cosa de 1 a 4. Lo entrené con algunos párrafos de texto en inglés y francés de algunas novelas, y luego puse algunas secciones aleatorias (cortas) de texto de Wikipedia en inglés y francés respectivamente. Resulta que cuando se utilizan palabras enteras o n-gramas con n por encima de 2 como características, detecta correctamente.
Actualización: Cuando se utiliza la medida de similitud del coseno, incluso las características de 1 y 2 gramos se detectan correctamente. Además, añadí como muestra de entrenamiento un pasaje completo sin división en saltos de línea y párrafos (cadenas divididas en saltos de línea).
Además, cuando utilicé cada párrafo de las novelas como puntos de datos de muestra de entrenamiento, el algoritmo detectó correctamente las lenguas del texto no visto en las condiciones indicadas anteriormente (palabras enteras o n-gramas con n mayor que 2). Sin embargo, cuando utilicé la sección completa de varios párrafos como muestra de entrenamiento, el texto más corto de la novela francesa (aproximadamente la mitad de la longitud del texto en inglés) parece haber provocado que tanto el texto corto en inglés como el de la Wikipedia de Frech sean identificados como franceses.
Actualización: Así pues, parece que la longitud del documento afecta más a los resultados que la aparición de palabras cuando se utiliza la distancia euclidiana. Mientras que en el caso de la similitud del coseno, el uso de un pasaje más largo que contenga un vocabulario/letras/gramas más completos como muestra de entrenamiento mejoró la precisión.
Actualización: Cuando añadí secciones de Mein Kampf como texto de entrenamiento, tanto la métrica de la distancia euclidiana como la de la similitud del coseno detectaron dos textos breves en francés e inglés como alemán cuando se utilizaron 4 gramos O.O. Además, los valores de similitud no parecen diferir mucho.
Así que,
- ¿Por qué la mayoría de las bibliotecas utilizan el clasificador naive Bayes? ¿Es más adecuado para este propósito?
- ¿Es factible utilizar k-NN para la identificación de idiomas? Si la respuesta es afirmativa, ¿hay alguna ventaja en su uso con respecto al clasificador ingenuo de Bayes? En caso negativo, ¿por qué?
- ¿Qué otro tipo de características podría haber utilizado, además de la frecuencia de los términos?
- ¿Bastarían las características del modelo binario (registro de si un término existe o no) para este propósito?
- ¿Cuál es la mejor métrica de similitud/disimilitud que se puede utilizar para este fin concreto?
- ¿Ayudará el árbol k-d o el árbol k-d con el mejor enfoque del bin primero a acelerar la detección cuando hay una gran base de muestras de entrenamiento? (Es probable que haya cientos de miles de dimensiones/características :P)
- Si se utiliza la métrica de la distancia de similitud del coseno, ¿qué estructura de datos/algoritmo podría utilizarse para reducir la complejidad temporal de la detección de idiomas? ¿Se pueden precalcular los ángulos, utilizar el LSH o el árbol k-d?
Por favor, responda a continuación siempre que conozca alguna de las subpreguntas, o pueda aportar un análisis al fenómeno mencionado :)
No estoy seguro de si debo poner todas las preguntas anteriores en una sola. Si no es así, por favor dímelo y moveré las que no estén relacionadas en una pregunta separada.