Aprendizaje de funciones no supervisadas para NER

11

He implementado el sistema NER con el uso del algoritmo CRF con mis características artesanales que dieron resultados bastante buenos. El caso es que utilicé muchas características diferentes, incluidas etiquetas POS y lemas.

Ahora quiero hacer el mismo NER para un idioma diferente. El problema aquí es que no puedo usar etiquetas POS ni lemas. Comencé a leer artículos sobre aprendizaje profundo y aprendizaje de características no supervisado.

Mi pregunta es:

¿Es posible utilizar métodos para el aprendizaje de funciones sin supervisión con el algoritmo CRF? ¿Alguien intentó esto y obtuvo algún buen resultado? ¿Hay algún artículo o tutorial sobre este asunto?

Todavía no entiendo completamente esta forma de creación de características, así que no quiero pasar mucho tiempo para algo que no funciona. Por lo tanto, cualquier información sería realmente útil. Crear un sistema NER completo basado en el aprendizaje profundo es demasiado por ahora.

MaticDiba
fuente

Respuestas:

5

Sí, es completamente posible combinar el aprendizaje no supervisado con el modelo CRF. En particular, le recomendaría que explore la posibilidad de usar las funciones de word2vec como entradas para su CRF.

Word2vec entrena a distinguir entre palabras que son apropiadas para un contexto dado y palabras que se seleccionan al azar. Los pesos seleccionados del modelo se pueden interpretar como una representación vectorial densa de una palabra dada.

Estos vectores densos tienen la propiedad atractiva de que las palabras que son semántica o sintácticamente similares tienen representaciones vectoriales similares. La aritmética vectorial básica incluso revela algunas interesantes relaciones aprendidas entre palabras.
Por ejemplo, vector ("París") - vector ("Francia") + vector ("Italia") produce un vector que es bastante similar al vector ("Roma").

En un nivel alto, puede pensar que las representaciones de word2vec son similares a las representaciones LDA o LSA, en el sentido de que puede convertir un vector de entrada disperso en un vector de salida denso que contiene información de similitud de palabras.

Para el caso, LDA y LSA también son opciones válidas para el aprendizaje de características no supervisadas; ambos intentan representar palabras como combinaciones de "temas" y generan representaciones de palabras densas.

Para el texto en inglés, Google distribuye modelos word2vec entrenados en un enorme conjunto de datos de Google News de 100 mil millones de palabras, pero para otros idiomas tendrá que entrenar su propio modelo.

Madison May
fuente
Oye, puño. Quiero agradecerte por tu respuesta. Tengo una pregunta más. Los vectores de palabras que se devuelven del algoritmo word2vec tienen valores flotantes, por lo que palabras como grande y más grande tendrán vectores cercanos en el espacio vectorial, pero los valores de los vectores podrían ser completamente diferentes. Por ejemplo, grande = [0.1, 0.2, 0,3] y más grande = [0.11, 0.21, 0.31]. ¿No es eso un problema para el algoritmo CRF, porque este algoritmo los trataría como no similares? ¿Hay algún procesamiento adicional que deba hacerse antes de usar esta palabra vectores en CRF? Espero que mi pregunta sea lo suficientemente clara.
MaticDiba
4

En este artículo de 2014 ( GitHub ), los autores compararon múltiples estrategias para incorporar incrustaciones de palabras en un sistema NER basado en CRF, incluida la incrustación densa, la incrustación binerizada, la incrustación de conglomerados y un nuevo método prototipo . El uso de vectores densos directamente como lo sugiere vlad es la forma más sencilla pero también la menos efectiva en evaluaciones múltiples.

Implementé la idea del prototipo en mi proyecto NER específico de dominio y funciona bastante bien para mí.

usuario2404894
fuente
3

Llego solo 5 meses tarde, pero con CRFSuite puedes usar esas funciones flotantes como números, no como cadenas. Para esto, solo necesita inventar una etiqueta única para cada dimensión y luego agregar un ":" seguido del valor.

Por ejemplo, una palabra "selva" se representa en 5 dimensiones: 0.1 0.4 0.8 0.2 0.9

Entonces CRFSuite tomaría esa palabra + característica como:

ETIQUETA f1: 0.1 f2: 0.4 f3: 0.8 f4: 0.2 f5: 0.9

donde, por supuesto, reemplaza `` LABEL '' por una cadena real y separa todos los espacios con pestañas (ese es el formato para CRFSuite).

Aunque no estoy seguro para otros paquetes.

vlad
fuente