Varios modelos y código para la identificación de paráfrasis implementados en TensorFlow (1.1.0).
Tenía mucho cuidado para documentar el código y explicar lo que estoy haciendo en varios pasos en los modelos; ¡Esperemos que sea un código de ejemplo didáctico para aquellos que buscan comenzar con TensorFlow!
Hasta ahora, este repositorio ha implementado:
Una línea de base LSTM siamesa básica, basada libremente en el modelo en Mueller, Jonas y Aditya Thyagarajan. "Arquitecturas recurrentes siamesas para la similitud de la oración de aprendizaje". AAAI (2016).
Un modelo LSTM siamés con una "capa coincidente" adicional, como se describe en Liu, Yang et al. "Aprender la inferencia del lenguaje natural utilizando el modelo LSTM bidireccional y la atención interior". Corr ABS/1605.09090 (2016).
El modelo de correspondencia múltiple de estado más o menos de estado de arte de Wang, Zhiguo et al. "Mataje bilateral multiperspectiva para oraciones de lenguaje natural". Corr ABS/1702.03814 (2017).
¡Los PR para agregar más modelos / optimizar o parchear los existentes son más que bienvenidos! La mayor parte del código del modelo reside en duplicate_Questions/modelos
Gran parte del código de procesamiento de datos se toma / inspira en Allenai / Deep_Qa, ¡vaya a ver si le gusta cómo se estructura este proyecto!
Este proyecto fue desarrollado y se ha probado en Python 3.5 (probablemente no funcione con otras versiones de Python), y los requisitos del paquete están en requirements.txt .
Para instalar los requisitos:
pip install -r requirements.txt
Tenga en cuenta que después de instalar los requisitos, debe descargar los datos NLTK necesarios ejecutando (en su shell):
python -m nltk.downloader punkt
Tenga en cuenta que el archivo requirements.txt especifica tensorflow como una dependencia, que es una versión unida a CPU de TensorFlow. Si tiene una GPU, debe desinstalar esta CPU TensorFlow e instalar la versión GPU ejecutando:
pip uninstall tensorflow
pip install tensorflow-gpu
Para comenzar, ejecute lo siguiente para generar los directorios auxiliares para almacenar datos, modelos capacitados y registros:
make aux_dirs
Además, si desea utilizar vectores de guantes previos al estado previo, ejecute:
make glove
que descargará vectores de guantes previos a data/external/ . Extraiga los archivos en ese mismo directorio.
Para usar los datos de pares de preguntas de Quora, descargue el conjunto de datos de Kaggle (puede requerir una cuenta). Coloque los archivos ZIP descargados en data/raw/ , y extraiga los archivos a ese mismo directorio.
Entonces, corre:
make quora_data
Para limpiar automáticamente y procesar los datos con los scripts en scripts/data/quora .
Para entrenar un modelo o carga + predecir con un modelo, luego ejecute los scripts en scripts/run_model/ con python <script_path> . Puede obtener documentación adicional sobre los parámetros que toman ejecutando python <script_path> -h
Aquí hay un comando Ejemplo de ejecución para la línea de base siamese bilstm:
python scripts/run_model/run_siamese.py train --share_encoder_weights --model_name=baseline_siamese --run_id=0
Aquí hay un comando Ejemplo de ejecución para el bilstm siamés con la capa coincidente:
python scripts/run_model/run_siamese_matching_bilstm.py train --share_encoder_weights --model_name=siamese_matching --run_id=0
Aquí hay un comando Ejemplo de ejecución para el modelo BIMPM:
python scripts/run_model/run_bimpm.py train --early_stopping_patience=5 --model_name=biMPM --run_id=0
Tenga en cuenta que los valores predeterminados pueden no ser ideales para su uso, así que no dude en girar las perillas como desee.
¿Tiene ideas sobre cómo mejorar este repositorio? ¿Tiene una solicitud de función, informe de errores o parche? Siéntase libre de abrir un problema o relaciones públicas, ya que estoy feliz de abordar los problemas y mirar las solicitudes de extracción.
├── LICENSE
├── Makefile <- Makefile with commands like `make data` or `make train`
├── README.md <- The top-level README for developers using this project.
├── data
│ ├── external <- Data from third party sources.
│ ├── interim <- Intermediate data that has been transformed.
│ ├── processed <- The final, canonical data sets for modeling.
│ └── raw <- Original immutable data (e.g. Quora Question Pairs).
|
├── logs <- Logs from training or prediction, including TF model summaries.
│
├── models <- Serialized models.
|
├── requirements.txt <- The requirements file for reproducing the analysis environment
│
├── duplicate_questions<- Module with source code for models and data.
│ ├── data <- Methods and classes for manipulating data.
│ │
│ ├── models <- Methods and classes for training models.
│ │
│ └── util <- Various helper methods and classes for use in models.
│
├── scripts <- Scripts for generating the data
│ ├── data <- Scripts to clean and split data
│ │
│ └── run_model <- Scripts to train and predict with models.
│
└── tests <- Directory with unit tests.