Índice:
- Introdução à Tensor Library da Torch
- Gráficos de computação e diferenciação automática
- Bloqueios de construção profunda: mapas afins, não linearidades e objetivos
- Otimização e treinamento
- Criando componentes de rede em pytorch
- Exemplo: Classificador de texto de regressão logística de regressão
- Incorporações de palavras: codificando semântica lexical
- Exemplo: Modelagem de Linguagem N-Gram
- Exercício: Bolsa contínua para aprender a incorporações de palavras
- Modelagem de sequência e redes de memória de termo de longa duração
- Exemplo: um LSTM para marcação de parte do fala
- Exercício: Aumentando o tagger LSTM com recursos no nível do caractere
- Avançado: kits de ferramentas dinâmicos, programação dinâmica e o BILSTM-CRF
- Exemplo: campo aleatório condicional bi-LSTM para reconhecimento de entidade nomeada
- Exercício: uma nova função de perda para marcação discriminativa
O que é este tutorial?
Estou escrevendo este tutorial porque, embora haja muitos outros tutoriais por aí, todos parecem ter um dos três problemas:
- Eles têm muito conteúdo em visão computacional e convocação, o que é irrelevante para a maioria das PNL (embora as conversas tenham sido aplicadas de maneira legal aos problemas de PNL).
- O Pytorch é novo em folha e muitos tutoriais de aprendizado profundo para a PNL estão em estruturas mais antigas, e geralmente não em estruturas dinâmicas como o Pytorch, que têm um sabor totalmente diferente.
- Os exemplos não vão além dos modelos de linguagem RNN e mostram as coisas incríveis que você pode fazer ao tentar fazer previsão de estrutura linguusita. Eu acho que isso é um problema, porque os gráficos dinâmicos de Pytorch fazem da previsão da estrutura um de seus maiores pontos fortes.
Especificamente, estou escrevendo este tutorial para uma aula de processamento de linguagem natural da Georgia Tech, para facilitar um conjunto de problemas que escrevi para a classe sobre análise de transição profunda. O conjunto de problemas usa algumas técnicas avançadas. A intenção deste tutorial é cobrir o básico, para que os alunos possam se concentrar nos aspectos mais desafiadores do conjunto de problemas. O objetivo é começar com o básico e subir para a previsão da estrutura lingüística, que eu sinto que está quase completamente ausente em outros tutoriais de Pytorch. O básico da Geral Deep Learning tem exposições curtas. Os tópicos mais específicos do NLP receberam discussões mais aprofundadas, embora eu tenha me referido a outras fontes quando senti que uma descrição completa reinventaria a roda e ocupava muito espaço.
Conjunto de problemas de análise de dependência
Como mencionado acima, aqui está o conjunto de problemas que passa pela implementação de um analisador de dependência de alto desempenho em Pytorch. Eu queria adicionar um link aqui, pois pode ser útil, desde que você ignore as coisas específicas da classe. Algumas notas:
- Há muito código; portanto, o início do conjunto de problemas foi principalmente para familiarizar as pessoas com a maneira como meu código representava os dados relevantes e com as interfaces que você precisa usar. O restante do conjunto de problemas está realmente implementando componentes para o analisador. Como não tínhamos aprendido profundo na classe antes, tentei fornecer uma enorme quantidade de comentários e sugestões ao escrevê -la.
- Existe um teste de unidade para cada entrega, que você pode executar com os Notests.
- Como usamos esse problema definido na classe, não publique publicamente soluções.
- O mesmo repositório possui algumas notas que incluem uma seção sobre análise de dependência de mudança de troca, se você estiver procurando por uma fonte escrita para complementar o conjunto de problemas.
- O link acima pode não funcionar se for retirado no início de um novo semestre.
Referências:
- Aprendi muito sobre previsão de estrutura profunda no EMNLP 2016 com este tutorial sobre o Dynet, dado por Chris Dyer e Graham Neubig da CMU e Yoav Goldberg, da Bar Ilan University. O Dynet é um ótimo pacote, especialmente se você deseja usar o C ++ e evitar a digitação dinâmica. O exercício final do CRF do BILSTM e o exercício de características no nível do personagem são coisas que aprendi com este tutorial.
- Um ótimo livro sobre previsão da estrutura é a previsão da estrutura lingüística de Noah Smith. Não usa aprendizado profundo, mas tudo bem.
- O melhor livro de aprendizado profundo que conheço é o Deep Learning, que é por alguns grandes contribuintes para o campo e muito abrangente, embora não haja um foco na PNL. É gratuito online, mas vale a pena ter em sua prateleira.
Exercícios:
Existem alguns exercícios no tutorial, que são para implementar um modelo popular (CBOW) ou aumentar um dos meus modelos. O exercício de características no nível do caractere é especialmente muito trivial, mas muito útil (não posso citar os números exatos, mas já executei o experimento antes e geralmente os recursos no nível do caractere aumentam a precisão de 2-3%). Como eles não são exercícios simples, em breve os implementei e os adicionarei ao repositório.
Sugestões:
Abra um problema do GitHub se você encontrar algum erro ou pensar que existe um modelo específico que seria útil para adicionar.