Vários modelos e código para identificação de paráfrase implementados no Tensorflow (1.1.0).
Tomei muito cuidado para documentar o código e explicar o que estou fazendo em várias etapas ao longo dos modelos; Espero que seja um código de exemplo didático para quem deseja começar com o TensorFlow!
Até agora, este repo implementou:
Uma linha de base básica da Siamese LSTM, vagamente baseada no modelo em Mueller, Jonas e Aditya Thyagarajan. "Arquiteturas recorrentes siamesas para aprender a similaridade da sentença". AAAI (2016).
Um modelo Siamese LSTM com uma "camada correspondente", conforme descrito em Liu, Yang et al. "Aprendendo a inferência de linguagem natural usando o modelo LSTM bidirecional e a atenção interior". CORR ABS/1605.09090 (2016).
O modelo de correspondência multitensível mais ou menos ou sem estado da arte bilateral de Wang, Zhiguo et al. "Combinação bilateral de várias perspectivas para frases de linguagem natural". CORR ABS/1702.03814 (2017).
PRs para adicionar mais modelos / otimizar ou patches existentes são mais do que bem -vindos! A maior parte do código do modelo reside em duplicate_questions/modelos
Muitos do código de processamento de dados são obtidos / inspirados em Allenai / Deep_Qa, verifique -os se você gosta de como esse projeto está estruturado!
Este projeto foi desenvolvido e foi testado no Python 3.5 (provavelmente não funciona com outras versões do Python), e os requisitos do pacote estão em requirements.txt .
Para instalar os requisitos:
pip install -r requirements.txt
Observe que, após a instalação dos requisitos, você deve baixar os dados do NLTK necessários em execução (em seu shell):
python -m nltk.downloader punkt
Observe que o arquivo requirements.txt especifica tensorflow como uma dependência, que é uma versão ligada à CPU do TensorFlow. Se você tiver uma GPU, desinstale esta CPU Tensorflow e instale a versão da GPU executando:
pip uninstall tensorflow
pip install tensorflow-gpu
Para começar, execute o seguinte para gerar os diretórios auxiliares para armazenar dados, modelos treinados e logs:
make aux_dirs
Além disso, se você quiser usar vetores de luvas pré -traida, execute:
make glove
que baixarão vetores de luvas pré -tenham para data/external/ . Extraia os arquivos nesse mesmo diretório.
Para usar os dados de pares de perguntas do Quora, faça o download do conjunto de dados de Kaggle (pode exigir uma conta). Coloque os arquivos ZIP baixados em data/raw/ e extraia os arquivos para o mesmo diretório.
Então, corra:
make quora_data
Para limpar e processar automaticamente os dados com os scripts nos scripts/data/quora .
Para treinar um modelo ou carregar + prever com um modelo, execute os scripts nos scripts/run_model/ com python <script_path> . Você pode obter documentação adicional sobre os parâmetros que eles levam executando python <script_path> -h
Aqui está um exemplo de comando de execução para a linha de base Siamese Bilstm:
python scripts/run_model/run_siamese.py train --share_encoder_weights --model_name=baseline_siamese --run_id=0
Aqui está um exemplo de comando de execução para o bilstm siameses com camada correspondente:
python scripts/run_model/run_siamese_matching_bilstm.py train --share_encoder_weights --model_name=siamese_matching --run_id=0
Aqui está um exemplo de comando de execução para o modelo BIMPM:
python scripts/run_model/run_bimpm.py train --early_stopping_patience=5 --model_name=biMPM --run_id=0
Observe que os padrões podem não ser ideais para o seu uso; portanto, fique à vontade para girar os botões da maneira que quiser.
Você tem idéias sobre como melhorar esse repositório? Tem uma solicitação de recurso, relatório de bug ou patch? Sinta -se à vontade para abrir um problema ou relações públicas, pois fico feliz em resolver problemas e procurar solicitações de puxão.
├── 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.