Se recomienda instalar alguna herramienta para administrar versiones de python, como pyenv y alguna extensión para los ambientes virtuales, por ejemplo: virtualenvwrapper.
Instalación de dependencias
pip install -r requirements.txt
Inicializar la herramienta precommit
para el control de sintaxis.
pre-commit install
El proyecto no cuenta con datasets iniciales. Para construir nuestros dataset de entrenamiento y validación iniciales se utilizó la herramienta de etiquetado Dataturks.
La línea de comandos contiene herramientas para transformar el etiquetado Dataturks a datasets soportados por Spacy. Para más información consulte el comando de ayuda de la línea de comandos.
El siguiente circuito de prueba contempla los siguientes procesos:
- Descargar un modelo de spacy para utilizar como modelo base.
- Creación de un modelo base
- Agregar entidades al pipeline de reconocimiento de nombre de entidades del modelo base.
- Ejecutar el entrenamiento, basándose en la configuración dada por el archivo de ejemplo
example_train_config.json
.
Descargar un modelo base
python -m spacy download es_core_news_lg
Crear un modelo basado en es_core_news_lg
y guardarlo en la carpeta models/base/2021-01-19
python train.py create_custom_spacy_model \
"es_core_news_lg" \
"models/base/2021-01-19"
Agregar las entidades que nos interesan detectar en el modelo (entidades soportadas)
python train.py add_new_entity_to_model \
"PER,LOC,DIRECCIÓN,OCUPACIÓN/PROFESIÓN,PATENTE_DOMINIO,ARTÍCULO" \
"models/base/2021-01-19"
Entrenar un modelo (crear previamente un archivo train_config.json
basado en example_train_config.json
)
python train.py train example_tuning_hyperparams
El flag --help
proporciona información de los scripts disponibles.
python train.py --help
model_name
: nombre del modelo a utilizar como base del nuevooutput_path
: directorio donde se almacenará el nuevo modelo
python train.py create_custom_spacy_model <model_name> <output_path>
Ejemplo para un modelo en español:
python train.py create_custom_spacy_model \
"es_core_news_lg" \
"models/base/2021-01-19"
ents
: Strings de las entidades sin espaciomodel_path
: directorio del modelo custom a utilizar
python train.py add_new_entity_to_model \
<ents> \
<model_path>
python train.py add_new_entity_to_model \
"PER,LOC,DIRECCIÓN" \
"models/base/2021-01-19"
Útil para crear reglas con patrones
files_path
: Directorio con archivos dataturks .json- `entity: Nombre de la entidad
context_words
: cantidad de palabras de contexto vecinas
python train.py show_text \
<files_path> \
<entity> \
<context_words>
El entrenamiento guardará el mejor modelo (siempre que supere el threshold - leer parámetros de configuración), así como un archivo history.csv
en la carpeta history (en la raiz del proyecto) en el que se explicitan parámetros y scores obtenidos por época (epoch).
config_name
: nombre de la configuración que se usará para entrenar el modelo, dicha debería estar en un archivo de configuración con el nombretrain_config.json
.
python train.py train <config_name>
Ejemplo:
python train.py train example_tuning_hyperparams
El archivo de configuración train_config.json
se debe generar a partir de example_train_config.json
. Los parámetros disponibles para modificar son:
use_gpu
: valor booleano que determina si correr o no el entrenamiento usando el gpu. Se debe tener configurado CUDA toolkit y seguir este instructivo : Ejecutar SpaCy con GPU. Nota: tener en cuenta que el batch size afecta directamente el uso de memoria.path_data_training
: directorio de la data para entrenar el modelopath_data_validation
: directorio de la data de validación para evaluar el modelopath_data_testing
: directorio de la data de testing para evaluar el modelo. Si está incluida esta opción los conjuntos de entrenamiento y validación serán combinados y utilizados para entrenamiento. Ver F. Chollet, Deep Learning in Python , cap. 4.2evaluate
: valor que determina que conjunto de datos usar para evaluar el modelo. Opcionestest
/val
.val
es el valor por defecto y no es necesario incluirlois_raw
: valor booleano que determina si el archivo será convertido (cuando is_raw sea True)save_misaligneds_to_file
: valor booleano que determina si se guardarán en un archivo json las annotations que estén desalineadas y provoquen que el documento analizado se ignore para su usomodel_path
: directorio del modelo custom a utilizarsave_model_path
: directorio donde se guardará el modelo generado a partir del entrenamientoentities
: entidadas a ser usadas para el entrenamiento.threshold
: valor a partir del cual se guardará un modelo, sólo si el score obtenido es mayor al threshold (número entero)epochs
: cantidad de iteraciones / épocas en las que se entrenará el modelo (número entero)optimizer
: aquí se pueden configurar los parámetros como el learning rate (tasa de aprendizaje) y otros presentes en el optimizador Adam.dropout
: porcentaje de weights que se descartarán aleatoriamente para dar mayor variabilidad (número decimal) y evitar que el modelo memorice los datos de entrenamiento.batch_size
: tamaño del batch (cantidad de textos) a utilizar para entrenar el modelo (número entero)callbacks
: representa un objeto de arrays de callbacks a ser usados en el entrenamiento. Para ver dichas funciones ir al archivocallbacks.py
.
El siguiente comando permite visualizar rapidamente resultados de un entrenamiento utilizando displayCy. Disponibiliza un servidor en el puerto 5030
.
model_path
: directorio del modelo a utilizar para las pruebastest_text
: string que represente un texto de prueba
python train.py display_text_prediction <model_path> <test_text>
Ejemplo:
python train.py display_text_prediction \
models/base/2021-01-19 \
"Soy un texto de prueba para detectar alguna entidad"
Luego visitar
localhost:5030
desde un navegador.
El siguiente comando transforma una serie de documentos .json
en formato dataturks a un dataset único, también en formato .json
, soportado por la CLI de IA².
input_files_path
: directorio de archivos en formato dataturksentities
: string que representa una lista de entidades, separadas por comaoutput_file_path
: directorio de salida del dataset generadonum_files
: número de archivos que serán incluídos en la creación del dataset. Por defecto es0
e incluye todos los archivos alojados en el directorio.
python train.py convert_dataturks_to_train_file \
<input_files_path> \
<entities> \
<output_file_path> \
<num_files>
Ejemplo:
Asume la existencia de un set de información etiquetada con Dataturks en el directorio data/raw/validation.
python train.py convert_dataturks_to_train_file \
"data/raw/validation" \
"PER, LOC, DIRECCIÓN" \
"data/unified/validation.json"
Ejecuta un comando en consola y guarda en el horario de comienzo y de fin en un log.
command_to_run
: Es el comando a ejecutar con parametros y espacios incluido.Va entre comillas dobles
python utils.py run_command_with_timer <command>
Ejemplo:
python utils.py run_command_with_timer "python train.py example_train_config example"
El script deploy_model.sh
se encarga de:
- Incluír 3 elementos al pipeline (en orden de aparición y posterior al NER pipeline)
- Realizar modificaciones al código fuente del modelo: se asignan Language factories para cada componente.
- Generar un archivo
tar.gz
en el directorio/dist
. Este bundle puede ser instalado mediante pip. Ejemplo:pip install modelo.tar.gz
.
Pipelines que se incluyen:
- EntityRuler:
entity_ruler.py
- EntityMatcher:
entity_matcher.py
- EntityCustom:
entoty_custom.py
Parámetros:
base_model
: directorio a un modelo base de origen, compatible con Spacymodel_name
: nombre del modelo a crear, sin espacios ni guiones bajosversion
: versión del modelo a crearpipeline_components
: directorio a los módulos de pipeline components que se incluiran en el modelo
./deploy_model.sh <base_model> <model_name> <version> <pipeline_components>
Ejemplo:
./deploy_model.sh es_core_news_lg nombre-de-modelo 1.0 ./pipeline_components
Algunos tests utilizan un modelo de spacy para realizar pruebas sobre texto plano. Por esta razón es necesario generar un archivo .env
, utilizando .env.example
como base. La variable TEST_MODEL_PATH
del achivo .env
debe contener la ruta hacia un modelo. Luego puede utilizar el siguiente comando para correr las pruebas:
make test
Ejemplos:
.env
# Un modelo entrenado y guardado dentro del directorio models/
export TEST_MODEL_FILE=models/path_to_my_model
# Otro ejemplo de un modelo de Spacy descargado utilizando (python -m spacy download es_core_news_lg)
export TEST_MODEL_FILE=es_core_news_lg
GNU General Public License version 3
Por favor, asegúrese de leer los lineamientos de contribución antes de realizar Pull Requests.