tags - spanish - pos tagging
Cómo etiquetar automáticamente el contenido, los algoritmos y las sugerencias necesarias (7)
Estoy trabajando con algunas bases de datos muy grandes de artículos periodísticos, las tengo en una base de datos MySQL y puedo consultarlas todas.
Ahora estoy buscando formas de ayudarme a etiquetar estos artículos con etiquetas algo descriptivas.
Todos estos artículos son accesibles desde una URL que se ve así:
http://web.site/CATEGORY/this-is-the-title-slug
Así que al menos puedo usar la categoría para determinar con qué tipo de contenido estamos trabajando. Sin embargo, también quiero etiquetar basado en el artículo-texto.
Mi enfoque inicial fue hacer esto:
- Obtener todos los articulos
- Obtenga todas las palabras, elimine toda puntuación, divida por espacio y cuéntelas por ocurrencia
- Analícelos y filtre las palabras comunes no descriptivas como "ellos", "yo", "este", "estos", "su" etc.
- Cuando se filtraron todas las palabras comunes, lo único que queda son las palabras que son dignas de la etiqueta.
Pero esto resultó ser una tarea bastante manual, y no un enfoque muy bonito o útil.
Esto también sufrió el problema de las palabras o los nombres que están divididos por espacios, por ejemplo, si 1.000 artículos contienen el nombre "John Doe", y 1.000 artículos contienen el nombre de "John Hanson", solo obtendría la palabra "John" Fuera de ella, no su nombre, y apellido.
Debe usar una métrica como tf-idf para eliminar las etiquetas:
- Cuenta la frecuencia de cada término por documento. Este es el término frecuencia , tf ( t , D ). Cuanto más a menudo aparece un término en el documento D , más importante es para D.
- Cuente, por término, la cantidad de documentos en que aparece el término. Esta es la frecuencia del documento , df ( t ). A mayor df, menos el término discrimina entre sus documentos y menos interesante es.
- Divida tf por el registro de df: tfidf ( t , D ) = tf ( t , D ) / log (df ( D ) + 1).
- Para cada documento, declare los mejores k términos por su puntuación tf-idf como las etiquetas para ese documento.
Varias implementaciones de tf-idf están disponibles; para Java y .NET, está Lucene, para Python hay scikits.learn.
Si quieres hacerlo mejor, usa modelos de lenguaje . Eso requiere un cierto conocimiento de la teoría de la probabilidad.
Echa un vistazo a Kea . Es una herramienta de código abierto para extraer frases clave de documentos de texto.
Su problema también se ha discutido muchas veces en http://metaoptimize.com/qa :
Etiquetar automáticamente los artículos es realmente un problema de investigación y puede pasar mucho tiempo reinventando la rueda cuando otros ya han hecho gran parte del trabajo. Aconsejaría utilizar uno de los kits de herramientas de procesamiento de lenguaje natural existentes como NLTK .
Para comenzar, sugeriría ver la implementación de un Tokeniser adecuado (mucho mejor que dividir por espacio en blanco), y luego echar un vistazo a los algoritmos de fragmentación y detonación.
También es posible que desee contar frecuencias para n-grams , es decir, una secuencia de palabras, en lugar de palabras individuales. Esto se ocuparía de "palabras divididas por un espacio". Los kits de herramientas como NLTK tienen funciones incorporadas para esto.
Finalmente, a medida que mejore iterativamente su algoritmo, es posible que desee entrenar en un subconjunto aleatorio de la base de datos y luego probar cómo el algoritmo etiqueta el conjunto restante de artículos para ver qué tan bien funciona.
Si el contenido es una imagen o un video, consulte el siguiente artículo del blog:
http://scottge.net/2015/06/30/automatic-image-and-video-tagging/
Hay básicamente dos enfoques para extraer automáticamente palabras clave de imágenes y videos.
- Aprendizaje de Instancias Múltiples (MIL)
- Redes neuronales profundas (DNN), redes neuronales recurrentes (RNN) y las variantes
En el artículo del blog anterior, enumero los últimos trabajos de investigación para ilustrar las soluciones. Algunos de ellos incluso incluyen sitio de demostración y código fuente.
Si el contenido es un documento de texto grande, consulte este artículo del blog:
Las mejores API de extracción de frase clave del mercado http://scottge.net/2015/06/13/best-key-phrase-extraction-apis-in-the-market/
Gracias scott
Si entiendo su pregunta correctamente, le gustaría agrupar los artículos en clases de similitud. Por ejemplo, puede asignar el artículo 1 a ''Deportes'', el artículo 2 a ''Política'', etc. O si sus clases son mucho más detalladas, los mismos artículos podrían asignarse a ''Dallas Mavericks'' y ''GOP Presidential Race''.
Esto cae bajo la categoría general de algoritmos de "agrupamiento". Hay muchas opciones posibles de tales algoritmos, pero esta es un área activa de investigación (lo que significa que no es un problema resuelto y, por lo tanto, es probable que ninguno de los algoritmos funcione tan bien como le gustaría).
Le recomiendo que consulte Asignación de Direchlet latente (http://en.wikipedia.org/wiki/Latent_Dirichlet_allocation) o ''LDA''. No tengo experiencia personal con ninguna de las implementaciones de LDA disponibles, por lo que no puedo recomendar un sistema específico (quizás otros con más conocimientos de los que podría recomendar una implementación fácil de usar).
También puede considerar las implementaciones de agrupamiento aglomerado disponibles en LingPipe (consulte http://alias-i.com/lingpipe/demos/tutorial/cluster/read-me.html ), aunque sospecho que una implementación de LDA podría resultar algo más confiable.
Un par de preguntas para considerar mientras observa sistemas de agrupamiento:
¿Desea permitir una membresía de clase fraccionaria? Por ejemplo, considere un artículo que discuta la perspectiva económica y su posible efecto en la carrera presidencial; ¿Puede ese documento pertenecer en parte al grupo de "economía" y en parte al grupo de "elección"? Algunos algoritmos de agrupamiento permiten la asignación parcial de clases y otros no
¿Desea crear un conjunto de clases manualmente (es decir, enumerar ''economía'', ''deportes'', ...), o prefiere aprender el conjunto de clases a partir de los datos? Las etiquetas de clase manuales pueden requerir más supervisión (intervención manual), pero si elige aprender de los datos, es probable que las "etiquetas" no sean significativas para un ser humano (por ejemplo, clase 1, clase 2, etc.) e incluso El contenido de las clases puede no ser terriblemente informativo. Es decir, el algoritmo de aprendizaje encontrará similitudes y los documentos de grupo que considera similares, pero los grupos resultantes pueden no coincidir con su idea de lo que debe contener una clase "buena".
Su enfoque parece sensato y hay dos formas de mejorar el etiquetado.
- Use una lista conocida de palabras clave / frases para su etiquetado y si el recuento de las instancias de esta palabra / frase es mayor que un umbral (probablemente en función de la longitud del artículo), incluya la etiqueta.
- Use una parte del algoritmo de etiquetado de voz para ayudar a reducir el artículo a un conjunto de frases sensatas y use un método sensato para extraer etiquetas de esto. Una vez que haya reducido los artículos utilizando un algoritmo de este tipo, podrá identificar algunas palabras o frases candidatas adecuadas para usar en su lista de palabras clave / frases para el método 1.
Suponiendo que tiene un conjunto de etiquetas predefinido, puede usar la API de Elasticsearch Percolator como sugiere esta respuesta:
Elasticsearch: use un índice de "etiquetas" para descubrir todas las etiquetas en una cadena dada