
Los modelos de etiquetado de secuencia son bastante populares en muchas tareas de PNL, como el reconocimiento de entidad nombrado (NER), el etiquetado de parte de voz (POS) y la segmentación de palabras. Los modelos de etiquetado de secuencia de última generación utilizan principalmente la estructura de CRF con características de palabras de entrada. LSTM (o LSTM bidireccional) es un popular extractor de características basado en el aprendizaje profundo en la tarea de etiquetado de secuencia. Y CNN también se puede usar debido a un cálculo más rápido. Además, las características dentro de Word también son útiles para representar Word, que puede ser capturada por caracteres LSTM o estructura CNN de caracteres o características neuronales definidas por humanos.
NCRF ++ es un marco basado en Pytorch con opciones flexibles de características de entrada y estructuras de salida. El diseño de modelos de etiquetado de secuencia neural con NCRF ++ es totalmente configurable a través de un archivo de configuración, que no requiere ningún código de código. NCRF ++ puede considerarse como una versión de red neuronal de CRF ++, que es un famoso marco estadístico de CRF.
Este marco ha sido aceptado por ACL 2018 como documento de demostración. Y el informe y el análisis del experimento detallado utilizando NCRF ++ se ha aceptado en Coling 2018 como el mejor artículo.
NCRF ++ admite diferentes combinaciones de estructura de en tres niveles: representación de secuencia de caracteres, representación de secuencia de palabras y capa de inferencia.
¡Bienvenido a Star este repositorio!
Python: 2 or 3
PyTorch: 1.0
La versión compatible de Pytorch 0.3 está aquí.
nbest (con sus probabilidades). NCRF ++ admite el diseño de la estructura de la red neuronal a través de un archivo de configuración. El programa puede ejecutarse en dos estatus; entrenamiento y decodificación . (La configuración de la muestra y los datos se han incluido en este repositorio)
En estado de entrenamiento : python main.py --config demo.train.config
En el estado de decodificación : python main.py --config demo.decode.config
El archivo de configuración controla la estructura de red, la E/S, la configuración de entrenamiento y los hiperparámetros.
Las configuraciones y explicaciones de detalles se enumeran aquí.
NCRF ++ está diseñado en tres capas (que se muestran a continuación): capa de secuencia de caracteres; Capa de secuencia de palabras y capa de inferencia. Al usar el archivo de configuración, la mayoría de los modelos de última generación se pueden replicar fácilmente sin codificar . Por otro lado, los usuarios pueden extender cada capa diseñando sus propios módulos (por ejemplo, es posible que deseen diseñar sus propias estructuras neuronales distintas de CNN/LSTM/Gru). Nuestro diseño de capas hace que la extensión del módulo sea conveniente, la instrucción de la extensión del módulo se puede encontrar aquí.

Los resultados en la tarea de Conll 2003 Inglés son mejores o comparables con los resultados de SOTA con las mismas estructuras.
CharlStm+WordLStm+CRF: 91.20 vs 90.94 de LAMPLE .ETC, NAACL16;
Charcnn+Wordlstm+CRF: 91.35 vs 91.21 de MA .etc, ACL16.
Por defecto, LSTM es bidireccional LSTM.
| IDENTIFICACIÓN | Modelo | Noca | Charlstm | Charcnn |
|---|---|---|---|---|
| 1 | Wordlstm | 88.57 | 90.84 | 90.73 |
| 2 | Wordlstm+CRF | 89.45 | 91.20 | 91.35 |
| 3 | Wordcnn | 88.56 | 90.46 | 90.30 |
| 4 | WordCnn+CRF | 88.90 | 90.70 | 90.43 |
Hemos comparado doce modelos de etiquetado de secuencia neural ( {charLSTM, charCNN, None} x {wordLSTM, wordCNN} x {softmax, CRF} ) en tres puntos de referencia (pos, Chunking, ner) bajo experimentos estadísticos, resultados detallados y comparaciones en nuestros desafíos de diseño de documentos de 2018 en 2018.
NCRF ++ ha integrado varios extractores de características de secuencia de caracteres neuronales SOTA: CNN (MA .ETC, ACL16), LSTM (LAMPLE .ETC, NAACL16) y GRU (Yang .ETC, ICLR17). Además, las características artesanales se han demostrado importantes en las tareas de etiquetado de secuencia. NCRF ++ permite a los usuarios que diseñan sus propias características, como capitalización, etiqueta POS o cualquier otra característica (círculos grises en la figura anterior). Los usuarios pueden configurar las funciones autodefinidas a través del archivo de configuración (tamaño de incrustación de características, incrustaciones de características previas al detenimiento .etc). El formato de datos de entrada de muestra se da en Train.CapPos.bmes, que incluye dos características definidas por humanos [POS] y [Cap] . ( [POS] y [Cap] son dos ejemplos, puede darle a su función cualquier nombre que desee, simplemente siga el formato [xx] y configure la función con el mismo nombre en el archivo de configuración). El usuario puede configurar cada característica en el archivo de configuración utilizando
feature = [ POS ] emb_size = 20 emb_dir = % your_pretrained_POS_embedding
feature = [ Cap ] emb_size = 20 emb_dir = % your_pretrained_Cap_embeddingLa característica sin incrustación previa a la aparición se inicializará aleatoriamente.
NCRF ++ se implementa utilizando un cálculo totalmente por lotes, por lo que es bastante efectivo tanto en el entrenamiento del modelo como en la decodificación. Con la ayuda de GPU (NVIDIA GTX 1080) y un gran tamaño por lotes, el modelo LSTMCRF construido con NCRF ++ puede alcanzar 1000 SENT/S y 2000ss/s en estado de entrenamiento y decodificación, respectivamente.

La estructura tradicional de CRF decodifica solo una secuencia de etiqueta con las mayores probabolidades (es decir, la mejor salida). Si bien NCRF ++ puede dar una gran opción, puede decodificar las secuencias de etiquetas n con las probabilidades n superiores (es decir, la salida de N-Best). La decodificación NBest ha sido respaldada por varios marco estadístico de CRF popular. Sin embargo, hasta donde sabemos, NCRF ++ es el único y el primer conjunto de herramientas que admite la decodificación NBest en los modelos Neural CRF.
En nuestra implementación, cuando el modelo NBEST = 10, Charcnn+Wordlstm+CRF construido en NCRF ++ puede dar 97.47% de valor F1 Oracle (F1 = 91.35% cuando NBEST = 1) en la tarea NER de Conll 2003.

Para reproducir los resultados en nuestro documento Coling 2018, solo necesita establecer la iteration=1 como iteration=100 en el archivo de configuración demo.train.config y configurar su directorio de archivos en este archivo de configuración. El archivo de configuración predeterminado describe el modelo Char CNN + Word LSTM + CRF , puede construir su propio modelo modificando la configuración en consecuencia. Los parámetros en este archivo de configuración de demostración son los mismos en nuestro documento. (Observe que la Word CNN necesita parámetros ligeramente diferentes, los detalles se pueden encontrar en nuestro documento coling).
Si desea utilizar este marco en nuevas tareas o conjuntos de datos, aquí hay algunos consejos de ajuste de @Victor0118.
Si desea informar un problema o preguntar un problema, adjunte los siguientes materiales si es necesario. Con esta información, puedo dar una discusión y sugerencia rápida y precisa.
log fileconfig filesample data Si usa NCRF ++ en su artículo, cite nuestro documento de demostración de ACL:
@inproceedings{yang2018ncrf,
title={NCRF++: An Open-source Neural Sequence Labeling Toolkit},
author={Yang, Jie and Zhang, Yue},
booktitle={Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics},
Url = {http://aclweb.org/anthology/P18-4013},
year={2018}
}
Si usa los resultados de los experimentos y el análisis de NCRF ++, cite nuestro documento de Coling:
@inproceedings{yang2018design,
title={Design Challenges and Misconceptions in Neural Sequence Labeling},
author={Yang, Jie and Liang, Shuailong and Zhang, Yue},
booktitle={Proceedings of the 27th International Conference on Computational Linguistics (COLING)},
Url = {http://aclweb.org/anthology/C18-1327},
year={2018}
}