# Hugging FaceでのAllenNLPの活用

`allennlp`は、さまざまな言語タスクで最先端のモデルを開発するためのNLPライブラリです。現代のNLPで一般的なコンポーネントやモデルに対して、高レベルの抽象化とAPIを提供します。また、NLP実験の実行と管理を容易にする拡張可能なフレームワークも提供しています。

## Hubでのallennlpの探索

[モデルページ](https://huggingface.co/models?library=allennlp)の左側でフィルタリングすることで、Hub上で`allennlp`のモデルを見つけることができます。

Hub上のすべてのモデルには、便利な機能が備わっています
1. 自動ホスティングされたTensorBoardトレースを備えたトレーニングメトリクスタブ。
2. 検索可能性を高めるためのメタデータタグ。
3. ブラウザ上でモデルを直接試すことができるインタラクティブなウィジェット。
4. 推論リクエストを行うことを可能にするInference Providersウィジェット。

## 既存のモデルを使用する

`Predictor`クラスを使用して、Hub上の既存のモデルを読み込むことができます。これを実現するには、`from_path`メソッドを使用し、リポジトリIDに`"hf://"`プレフィックスを付与します。以下はエンドツーエンドの例です。

```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)
```

このようなスニペットを取得するには、右上の`Use in AllenNLP`をクリックできます。

## モデルの共有

最初のステップは、モデルをローカルに保存することです。例えば、[`archive_model`](https://docs.allennlp.org/main/api/models/archival/#archive_model) メソッドを使用して、モデルを `model.tar.gz` ファイルとして保存できます。その後、圧縮されたモデルを Hub にプッシュできます。`allennlp` でモデルをトレーニングすると、モデルは自動的にシリアライズされるため、それを優先的なオプションとして使用できます。

### AllenNLP CLIの使用

CLIでプッシュするには、以下に示す`allennlp push_to_hf`コマンドを使用できます。

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

| 引数                    	| 型         	| 説明                                                                                                                   	|
|-----------------------------	|--------------	|-------------------------------------------------------------------------------------------------------------------------------	|
| `--repo_name`, `-n`         	| str / `Path` 	| Hub上のリポジトリ名。                                                                                            	|
| `--organization`, `-o`      	| str          	| パイプラインをアップロードする組織の任意の名前。                                                       	|
| `--serialization-dir`, `-s` 	| str / `Path` 	| シリアライズされたモデルを含むディレクトリへのパス。                                                                                  	|
| `--archive-path`, `-a`      	| str / `Path` 	| シリアライズパスではなく、圧縮されたモデル（例: model/model.tar.gz）を使用している場合は、このフラグを使用できます。              	|
| `--local-repo-path`, `-l`   	| str / `Path` 	| モデルリポジトリのローカルパス（存在しない場合は作成されます）。デフォルトでは、現在の作業ディレクトリ内の`hub`です。 	|
| `--commit-message`, `-c`    	| str          	| 更新に使用するコミットメッセージ。デフォルトは`"update repository"`です。                                                          	|

### Pythonスクリプトから

`push_to_hf` 関数は、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
)
```

わずか1分で、モデルをHubに公開し、ブラウザで直接試して、コミュニティの他のメンバーと共有できます。必要なメタデータはすべて自動的にアップロードされます!

## 追加のリソース

* AllenNLPの[ウェブサイト](https://allenai.org/allennlp)。
* AllenNLPの[リポジトリ](https://github.com/allenai/allennlp)。

