Command Line Interface for IA² models development, training and deployment.
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:
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 modelopython 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 utilizarpython 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 .jsoncontext_words
: cantidad de palabras de contexto vecinaspython 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 nombre train_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. Opciones test
/ 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 archivo callbacks.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 pruebapython 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 es 0
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 doblespython 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:
tar.gz
en el directorio /dist
. Este bundle puede ser instalado mediante pip. Ejemplo: pip install modelo.tar.gz
.Pipelines que se incluyen:
entity_ruler.py
entity_matcher.py
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.