
Bem -vindo à biblioteca de transferência da NLP, uma estrutura construída sobre o Pytorch para promover a experimentação reprodutível e transferir aprendizado na PNL
Você pode ter uma visão geral da API de alto nível neste notebook Colab, que mostra como usar a estrutura em vários exemplos. Todos os exemplos baseados em DL nesses notebooks incorporam monitoramento de treinamento em tensorboard de células!
Para um exemplo de Finetuning de modelo pré-treinado, fornecemos um pequeno tutorial executável sobre o BertClassifier Finetuning neste notebook Colab
mkvirtualenv transfernlp
workon transfernlp
git clone https://github.com/feedly/transfer-nlp.git
cd transfer-nlp
pip install -r requirements.txt
Para usar a transferência PNL como uma biblioteca:
# to install the experiment builder only
pip install transfernlp
# to install Transfer NLP with PyTorch and Transfer Learning in NLP support
pip install transfernlp[torch]
ou
pip install git+https://github.com/feedly/transfer-nlp.git
Para obter o estado mais recente antes dos novos lançamentos.
Para usar a transferência de PNL com exemplos associados:
git clone https://github.com/feedly/transfer-nlp.git
pip install -r requirements.txt
A documentação da API e uma visão geral da biblioteca podem ser encontrados aqui
O núcleo da biblioteca é feito de um construtor de experimentos: você define os diferentes objetos que seu experimento precisa e o carregador de configuração os constrói de uma maneira agradável. Para pesquisas reprodutíveis e estudos de ablação fácil, a biblioteca aplica o uso de arquivos de configuração para experimentos. Como as pessoas têm gostos diferentes para o que constitui um bom arquivo de experimento, a biblioteca permite experimentos definidos em vários formatos:
No Transfer-NLP, um arquivo de configuração de experimento contém todas as informações necessárias para definir completamente o experimento. É aqui que você inserirá nomes dos diferentes componentes que seu experimento usará, juntamente com os hiperparâmetros que você deseja usar. A transferência-NLP utiliza a inversão do padrão de controle, que permite definir qualquer classe / método / função que você possa precisar, a classe ExperimentConfig criará um DictionNary e instatará seus objetos de acordo.
Para usar suas próprias classes dentro do transferência-NLP, você precisa registrá-las usando o decorador @register_plugin . Em vez de usar um registro diferente para cada tipo de componente (modelos, carregadores de dados, vetorizadores, otimizadores, ...), apenas um único registro é usado aqui, a fim de aplicar a personalização total.
Se você usar o transferência PNL apenas como uma dependência de desenvolvimento, convém usá -lo apenas declarativamente e ligue para register_plugin() em objetos que deseja usar no tempo de execução do experimento.
Aqui está um exemplo de como você pode definir um experimento em um arquivo YAML:
data_loader:
_name: MyDataLoader
data_parameter: foo
data_vectorizer:
_name: MyVectorizer
vectorizer_parameter: bar
model:
_name: MyModel
model_hyper_param: 100
data: $data_loader
trainer:
_name: MyTrainer
model: $model
data: $data_loader
loss:
_name: PyTorchLoss
tensorboard_logs: $HOME/path/to/tensorboard/logs
metrics:
accuracy:
_name: Accuracy
Qualquer objeto pode ser definido por meio de uma classe, método ou função, dados um _name Parameters seguido por seus próprios parâmetros. As experiências são então carregadas e instanciadas usando ExperimentConfig(experiment=experiment_path_or_dict)
Algumas considerações:
Os parâmetros padrão podem ser ignorados no arquivo de experimento.
Se um objeto for usado em lugares diferentes, você poderá consultar o símbolo $ , por exemplo, aqui o objeto trainer usa o data_loader instanciado em outros lugares. Nenhuma ordem de objetos é necessária.
Para caminhos, você pode usar variáveis de ambiente para que outras máquinas também possam executar seus experimentos. No exemplo anterior, você executaria o ExperimentConfig(experiment=yaml_path, HOME=Path.home()) para instanciar o experimento e substituir $HOME pelo caminho da sua máquina.
A instanciação de configuração permite quaisquer configurações complexas com dicto / lista aninhados
Você pode dar uma olhada nos testes para exemplos de configurações de experimento que o carregador de configuração pode construir. Além disso, fornecemos experimentos executáveis em experiments/ .
Para experimentos de aprendizagem profunda, fornecemos um BaseIgniteTrainer em transfer_nlp.plugins.trainers.py . Este treinador básico pegará um modelo e alguns dados como entrada e executará um pipeline de treinamento inteiro. Utilizamos a biblioteca de identificação de Pytorch para monitorar os eventos durante o treinamento (registrando algumas métricas, manipulando taxas de aprendizado, modelos de operações de verificação, etc ...). Os logs do Tensorboard também estão incluídos como uma opção, você precisará especificar um caminho de parâmetros simples tensorboard_logs no arquivo de configuração. Em seguida, basta executar tensorboard --logdir=path/to/logs em um terminal e você pode monitorar seu experimento enquanto estiver treinando! O Tensorboard vem com utilitários muito agradáveis para acompanhar as normas dos pesos do seu modelo, histogramas, distribuições, visualização de incorporações, etc., então recomendamos que realmente o recomendamos.

Fornecemos uma classe SingleTaskTrainer que você pode usar para qualquer configuração supervisionada que lide com uma tarefa. Estamos trabalhando em uma classe MultiTaskTrainer para lidar com as configurações de várias tarefas e um SingleTaskFineTuner para grandes configurações de Finetuning de modelos.
Aqui estão alguns casos de uso para a PNL de transferência:
ExperimentRunner permite executar sequencialmente seus conjuntos de experimentos e gera relatórios personalizados (você só precisa implementar seu método report em uma classe ReporterABC personalizada)Module Pytorch e permitir que os treinadores lidem com a parte de treinamento (enquanto ainda controla a maioria dos parâmetros de treinamento através do arquivo de experimento)Ao experimentar seus próprios modelos / dados, o treinamento pode levar algum tempo. Para ser notificado quando o seu treinamento acabar ou falhar, você pode usar o simples knockknock da biblioteca por pessoas no Huggingface, que adicionam um decorador simples à sua função em execução para notificá-lo por meio de folga, e-mail, etc.
A biblioteca foi inspirada na leitura de "Processamento de linguagem natural com Pytorch", de Delip Rao e Brian McMahan. Experimentos em experiments , o bloco de construção de vocabulário e as incorporações mais próximas são retiradas ou adaptadas do código fornecido no livro.