Skip to content

Latest commit

 

History

History
171 lines (106 loc) · 8.33 KB

README.md

File metadata and controls

171 lines (106 loc) · 8.33 KB


Aura NLP

Microserviço para processamento de linguagem natural utilizado pela assistenve virtual Aura para entendimento dos textos informados pelos usuários. A implementação é construída com base no pacote nlp.js.

🚀 Começando

1. Dependências

Para executar o projeto, você precisa ter o seguinte instalado:

2. Configuração

Feito a instalação das dependências, é necessário obter uma cópia do projeto. A forma recomendada é clonar o repositório para a sua máquina.

Para isso, rode:

git clone --recurse-submodules https://github.com/ccuffs/aura-nlp && cd aura-nlp

Isso criará e trocará para a pasta aura-nlp com o código do projeto. Em seguinda, instale as dependências:

npm install

3. Utilizacão

3.1 Rodando o projeto

Existem várias formas de rodar o projeto, como a api web, treino, etc. Para saber todas as opções, rode:

node aura.js -h

Todas as funcionalidades são baseadas no formato node aura.js <comando>, onde <comando> é o módulo que você deseja executar.

3.2 Utilização da API

Para iniciar o servidor web (api REST), rode o seguinte;

node aura.js serve

Após isso a aplicação estará rodando na porta 3000 e poderá ser acessada em localhost:3000.

DICA: use node aura.js serve -p 8080 para escolher a porta do servidor web.

A API web, com todos os endpoints, estará acessivel em /api, por exemplo localhost:3000/api. Por padrão, dois endpoints da api estão disponíveis:

Faça um teste acessando localhost:3000/api/qna/comida+favorita.

Quando o servidor web é iniciado, você pode informar quais engines (e modelos/urls) você deseja através do parâmetro -e (ou --engine=, cujo formato é <nome>:<url>:/path/para/modelo.nlp, <nome>:<url>:/path/para/modelo.nlp, etc). O exemplo abaixo inicia o servidor web com duas engines (domain e qna), nas urls /api/domain-url e /api/qna-url, informando onde os modelos dessas duas engines estão:

node aura.js serve -p 3000 -e "domain:domain-url:./data/models/domain.model,qna:qna-url:./data/models/qna.model"

4. Baixando e treinando novos modelos

O repositório vem com alguns modelos muito simples prontos para uso. O ideal é você treinar seus próprios modelos. Veja nas seções a seguir como treinar seus modelos.

4.1 Usando uma planilha no Google Spreadsheets como dataset

A melhor forma de manter um dataset para outros contribuirem é utilizar uma planilha no Google Spreadsheet. Para tornar uma delas disponível para download, faça o seguinte:

  1. Acesse a planilha
  2. Escolha File > Publish to the web
  3. Configure o tipo para `Tab-separated values (.tsv)
  4. Clique Publish
  5. Copie a URL resultante (será algo como https://docs.google.com/spreadsheets/d/e/2PACX-1vS4GT7aqVyOHEGlSz-FPg1asFpq8ffoFwXFBoNiVQLR8uD6m2usl9t_bBwMm7VnXJoYvUFlV1HJRbJh/pub?output=tsv).

Depois de publicar a planilha como TSV, você pode baixar e utilizar ela como dataset. Para isso, na raiz desse repositório, rode o seguinte comando (assumindo que a URL da planilha é a mesma do passo anterior; atualize a URL se sua planilha for diferente):

curl -L "https://docs.google.com/spreadsheets/d/e/2PACX-1vS4GT7aqVyOHEGlSz-FPg1asFpq8ffoFwXFBoNiVQLR8uD6m2usl9t_bBwMm7VnXJoYvUFlV1HJRbJh/pub?gid=0&single=true&output=tsv" > ./data/train/dataset.tsv

Isso criará o arquivo ./data/train/aura-domain.tsv que pode ser utilizado para treinos.

4.3 Treinando um modelo

Para treinar um novo modelo, você precisa especificar a engine e o local onde o modelo será escrito. A engine é o estilo de dados que serão processados. Atualmente existem duas engines disponíveis: domain (conhecimento de domínio específico, inclusive NER) e qna (perguntas e respostas).

Para treinar um modelo para a engine domain, rode o seguinte:

node aura.js train --type="domain" --dataset="./data/train/aura-domain.tsv" --output="./data/models/domain.model"

Para treinar um modelo para a engine qna, rode o seguinte:

node aura.js train --type="qna" --dataset="./data/train/aura-qna.tsv" --output="./data/models/qna.model"

4.4 Formato do dataset

Todas as engines são treinadas a partir de um arquivo .tsv (tab-separed values). As seções a seguir explicam o formato de treinamento de cada engine.

4.4.1 Dataset domain

Para a engine domain, o formato do arquivo é o seguinte:

type category nickname language content
ner hero spiderman en Spiderman, Spider-man
ner hero iron man en Iron Man, Ironman, iron-man
ner hero thor en Thor
ner food burger en Burguer, Hamburguer
doc sawhero en I saw %hero% eating %food%
doc wanteat en I want to eat %food%

A coluna type informa o tipo da linha. Os tipos possiveis são ner (entidade nomeada) e doc (informação qualquer). Ambos os tipos tem uma coluna category que informa a categoria que aquela linha/entidade pertence, e uma coluna language que informa a linguagem.

Uma linha do tipo ner tem os seguintes atributos:

  • nickname: nome curto para a entidade em questão;
  • content: nomes reais da entidade, que são todas as variações possíveis do nome, separados por ,.

Uma linha do tipo doc tem os seguintes atributos:

  • nickname: (não possui, então deixar vazio).
  • content: frase que exemplifica o uso de alguma ner. Aqui você pode usar o nome de uma categoria de ner entre %, por exemplo, %hero% para se referir a todas as ners que sejam hero. A frase I saw %hero% eating %food% treinará o modelo para encontrar frases do tipo I saw Thor eating Hamburguer (%hero% é thor, %food% é burger).
4.4.1 Dataset qna

Para a engine qna, o formato do arquivo é o seguinte:

question answer
Fale sobre você Sou uma agente virtual
Porque você está aqui Porque é muito legal

Não há tipos de colunas, apenas uma organização no formato pergunta \t resposta.

🤝 Contribua

Sua ajuda é muito bem-vinda, independente da forma! Confira o arquivo CONTRIBUTING.md para conhecer todas as formas de contribuir com o projeto. Por exemplo, sugerir uma nova funcionalidade, reportar um problema/bug, enviar um pull request, ou simplemente utilizar o projeto e comentar sua experiência.

Veja o arquivo ROADMAP.md para ter uma ideia de como o projeto deve evoluir.

🎫 Licença

Esse projeto é licenciado nos termos da licença open-source MIT e está disponível de graça.

🧬 Changelog

Veja todas as alterações desse projeto no arquivo CHANGELOG.md.

🧪 Projetos semelhates

Abaixo está uma lista de links interessantes e projetos similares: