# Usando AllenNLP no Hugging Face

`allennlp` é uma biblioteca de PLN para o desenvolvimento de modelos de última geração em diferentes tarefas linguísticas. Ela fornece abstrações e APIs de alto nível para componentes e modelos comuns no PLN moderno. Também oferece um framework extensível que facilita a execução e o gerenciamento de experimentos de PLN.

## Explorando allennlp no Hub

Você pode encontrar modelos do `allennlp` no Hub filtrando à esquerda da [página de modelos](https://huggingface.co/models?library=allennlp).

Todos os modelos no Hub vêm com recursos úteis
1. Uma aba de métricas de treinamento com rastreamentos do TensorBoard hospedados automaticamente.
2. Tags de metadados que auxiliam na descoberta.
3. Um widget interativo que você pode usar para interagir com o modelo diretamente no navegador.
4. Um widget de Inference Providers que permite fazer solicitações de inferência.

## Usando modelos existentes

Você pode usar a classe `Predictor` para carregar modelos existentes no Hub. Para isso, use o método `from_path` e utilize o prefixo `"hf://"` com o id do repositório. Aqui está um exemplo de ponta a ponta.

```py
import allennlp_models
from allennlp.predictors.predictor import Predictor

predictor = Predictor.from_path("hf://allenai/bidaf-elmo")
predictor_input = {
    "passage": "My name is Wolfgang and I live in Berlin", 
    "question": "Where do I live?"
}
predictions = predictor.predict_json(predictor_input)
```

Para obter um trecho como este, você pode clicar em `Use in AllenNLP` no canto superior direito,

## Compartilhando seus modelos

O primeiro passo é salvar o modelo localmente. Por exemplo, você pode usar o método [`archive_model`](https://docs.allennlp.org/main/api/models/archival/#archive_model) para salvar o modelo como um arquivo `model.tar.gz`. Em seguida, você pode enviar o modelo compactado para o Hub. Quando você treina um modelo com `allennlp`, o modelo é serializado automaticamente, então você pode usar isso como opção preferencial.

### Usando a CLI do AllenNLP

Para enviar com a CLI, você pode usar o comando `allennlp push_to_hf`, conforme mostrado abaixo.

```bash
allennlp push_to_hf --repo_name test_allennlp --archive_path model 
```

| Argumento                    	| Tipo         	| Descrição                                                                                                                   	|
|-----------------------------	|--------------	|-------------------------------------------------------------------------------------------------------------------------------	|
| `--repo_name`, `-n`         	| str / `Path` 	| Nome do repositório no Hub.                                                                                            	|
| `--organization`, `-o`      	| str          	| Nome opcional da organização para a qual o pipeline deve ser enviado.                                                       	|
| `--serialization-dir`, `-s` 	| str / `Path` 	| Caminho para o diretório com o modelo serializado.                                                                                  	|
| `--archive-path`, `-a`      	| str / `Path` 	| Se, em vez de um caminho de serialização, você estiver usando um modelo compactado (por exemplo, model/model.tar.gz), pode usar essa flag.              	|
| `--local-repo-path`, `-l`   	| str / `Path` 	| Caminho local para o repositório do modelo (será criado se não existir). O padrão é `hub` no diretório de trabalho atual. 	|
| `--commit-message`, `-c`    	| str          	| Mensagem de commit a ser usada para a atualização. O padrão é `"update repository"`.                                                          	|

### A partir de um script Python

A função `push_to_hf` tem os mesmos parâmetros que o script bash.

```py
from allennlp.common.push_to_hf import push_to_hf

serialization_dir = "path/to/serialization/directory"
push_to_hf(
    repo_name="my_repo_name",
    serialization_dir=serialization_dir,
    local_repo_path=self.local_repo_path
)
```

Em apenas um minuto, você pode colocar seu modelo no Hub, testá-lo diretamente no navegador e compartilhá-lo com o restante da comunidade. Todos os metadados necessários serão enviados para você!

## Recursos adicionais

* [website](https://allenai.org/allennlp) da AllenNLP.
* Repositório do AllenNLP [repository](https://github.com/allenai/allennlp).

