🤗 Hubでのスーパーチャージド検索

'🤗 Hubの高速検索'

huggingface_hubライブラリは、ホスティングエンドポイント(モデル、データセット、スペース)を探索するためのプログラム的なアプローチを提供する軽量なインタフェースです。

これまでは、このインタフェースを介してハブでの検索は難しく、ユーザーは「知っているだけ」で慣れなければならない多くの側面がありました。

この記事では、huggingface_hubに追加されたいくつかの新機能を紹介し、ユーザーにJupyterやPythonインタフェースを離れずに使用したいモデルやデータセットを検索するためのフレンドリーなAPIを提供します。

始める前に、システムに最新バージョンのhuggingface_hubライブラリがない場合は、次のセルを実行してください:

!pip install huggingface_hub -U

問題の位置づけ:

まず、自分がどのようなシナリオにいるか想像してみましょう。テキスト分類のためにハブでホストされているすべてのモデルを見つけたいとします。これらのモデルはGLUEデータセットでトレーニングされ、PyTorchと互換性があります。

https://huggingface.co/models を単に開いてそこにあるウィジェットを使用することもできます。しかし、これによりIDEを離れて結果をスキャンする必要がありますし、必要な情報を得るためにはいくつかのボタンクリックが必要です。

もしもIDEを離れずにこれを解決する方法があったらどうでしょうか?プログラム的なインタフェースであれば、ハブを探索するためのワークフローにも簡単に組み込めるかもしれません。

ここでhuggingface_hubが登場します。

このライブラリに慣れている方は、すでにこの種のモデルを検索できることを知っているかもしれません。しかし、クエリを正しく取得することは試行錯誤の痛ましいプロセスです。

それを簡略化することはできるでしょうか?さあ、見てみましょう!

必要なものを見つける

まず、HfApiをインポートします。これはHugging Faceのバックエンドホスティングと対話するのに役立つクラスです。モデル、データセットなどを通じて対話することができます。さらに、いくつかのヘルパークラスもインポートします:ModelFilterModelSearchArguments

from huggingface_hub import HfApi, ModelFilter, ModelSearchArguments

api = HfApi()

これらの2つのクラスは、上記の問題に対する解決策をフレーム化するのに役立ちます。 ModelSearchArgumentsクラスは、検索できるすべての有効なパラメータを含むネームスペースのようなクラスです。

のぞいてみましょう:

>>> model_args = ModelSearchArguments()

>>> model_args

利用可能な属性またはキー:
 * author
 * dataset
 * language
 * library
 * license
 * model_name
 * pipeline_tag

利用できるさまざまな属性がわかります(このマジックがどのように行われるかについては後ほど詳しく説明します)。私たちが求めるものをカテゴリー分けすると、おそらく以下のように分けることができるでしょう:

  • pipeline_tag(またはタスク):テキスト分類
  • dataset:GLUE
  • library:PyTorch

このような分類を考えると、宣言したmodel_argsの中にそれらを見つけることができるはずです:

>>> model_args.pipeline_tag.TextClassification

'text-classification'

>>> model_args.dataset.glue

'dataset:glue'

>>> model_args.library.PyTorch

'pytorch'

しかし、ここでいくつかの便利なラッピングが行われていることに気付き始めます。 ModelSearchArguments(および補完されるDatasetSearchArguments)は、APIが求める形式化された出力に合わせた人間が読みやすいインタフェースを持っており、GLUEデータセットをdataset:glueで検索する方法などが含まれます。

これが重要です。なぜなら、特定のパラメータをどのように記述すればよいかを知らない場合、APIでモデルを検索しようとしている間に非常に簡単にイライラすることができるからです!

正しいパラメータがわかったので、簡単にAPIを検索できます:

>>> models = api.list_models(filter = (
>>>     model_args.pipeline_tag.TextClassification, 
>>>     model_args.dataset.glue, 
>>>     model_args.library.PyTorch)
>>> )
>>> print(len(models))

    140

私たちの基準に合致する140個の一致するモデルが見つかりました!(この記事を書いた時点での情報です)。そして、1つをより詳しく見てみると、確かに正しいようです:

>>> models[0]

    ModelInfo: {
        modelId: Jiva/xlm-roberta-large-it-mnli
        sha: c6e64469ec4aa17fedbd1b2522256f90a90b5b86
        lastModified: 2021-12-10T14:56:38.000Z
        tags: ['pytorch', 'xlm-roberta', 'text-classification', 'it', 'dataset:multi_nli', 'dataset:glue', 'arxiv:1911.02116', 'transformers', 'tensorflow', 'license:mit', 'zero-shot-classification']
        pipeline_tag: zero-shot-classification
        siblings: [ModelFile(rfilename='.gitattributes'), ModelFile(rfilename='README.md'), ModelFile(rfilename='config.json'), ModelFile(rfilename='pytorch_model.bin'), ModelFile(rfilename='sentencepiece.bpe.model'), ModelFile(rfilename='special_tokens_map.json'), ModelFile(rfilename='tokenizer.json'), ModelFile(rfilename='tokenizer_config.json')]
        config: None
        private: False
        downloads: 680
        library_name: transformers
        likes: 1
    }

これは少し読みやすくなり、”このパラメータは正しいかどうか”を推測する必要はありません。

このモデルのモデルIDを使用してプログラムで情報を取得することもできることをご存知でしたか? 以下はその方法です:

api.model_info('Jiva/xlm-roberta-large-it-mnli')

更に向上させる

Hubを検索するときに推測作業を排除するために、ModelSearchArgumentsDatasetSearchArgumentsを使用する方法を見ましたが、非常に複雑で乱雑なクエリを持っている場合はどうでしょうか?

以下のようなクエリです:「text-classificationzero-shotの両方でトレーニングされ、Multi NLIとGLUEデータセットでトレーニングされ、PyTorchとTensorFlowの両方と互換性があるモデルをすべて検索したい」。

このクエリを設定するために、ModelFilterクラスを使用します。これは、このような状況を処理するために設計されているため、頭を悩ませる必要はありません:

>>> filt = ModelFilter(
>>>     task = ["text-classification", "zero-shot-classification"],
>>>     trained_dataset = [model_args.dataset.multi_nli, model_args.dataset.glue],
>>>     library = ['pytorch', 'tensorflow']
>>> )
>>> api.list_models(filt)

    [ModelInfo: {
         modelId: Jiva/xlm-roberta-large-it-mnli
         sha: c6e64469ec4aa17fedbd1b2522256f90a90b5b86
         lastModified: 2021-12-10T14:56:38.000Z
         tags: ['pytorch', 'xlm-roberta', 'text-classification', 'it', 'dataset:multi_nli', 'dataset:glue', 'arxiv:1911.02116', 'transformers', 'tensorflow', 'license:mit', 'zero-shot-classification']
         pipeline_tag: zero-shot-classification
         siblings: [ModelFile(rfilename='.gitattributes'), ModelFile(rfilename='README.md'), ModelFile(rfilename='config.json'), ModelFile(rfilename='pytorch_model.bin'), ModelFile(rfilename='sentencepiece.bpe.model'), ModelFile(rfilename='special_tokens_map.json'), ModelFile(rfilename='tokenizer.json'), ModelFile(rfilename='tokenizer_config.json')]
         config: None
         private: False
         downloads: 680
         library_name: transformers
         likes: 1
     }]

非常に迅速にわかりますが、APIを検索するためのより協調したアプローチであり、あなたに頭痛の種を追加しません!

これは何ですか?

非常に簡単に、この列挙型ディクショナリのようなデータ型であるAttributeDictionaryによって提供される仕組みについて話します。

fastcoreライブラリのAttrDictクラスに強くインスパイアされたこのアイデアの一般的なアイデアは、通常のディクショナリを取り、ディクショナリ内のすべてのキーに対してタブ補完を提供することによって探索的なプログラミングを超高速化することです。

前述のように、model_args.dataset.glueのように探索できるネストされたディクショナリがある場合、これはさらに強力になります!

JavaScriptに詳しい方には、objectクラスの動作を模倣しています。

このシンプルなユーティリティクラスは、ネストされたデータ型を探索し理解しようとする際に、APIリクエストの返り値など、そこにあるものをよりユーザー中心のエクスペリエンスを提供することができます。

前述のように、AttrDictをいくつかの重要な方法で拡張しています:

  • del model_args[key]またはdel model_args.keyでキーを削除できます
  • 前述で見たきれいな__repr__

ただし、非常に重要な概念として、キーに数字や特殊文字が含まれている場合は、オブジェクトとしてではなく、ディクショナリとしてインデックス化する必要があるということです。

>>> from huggingface_hub.utils.endpoint_helpers import AttributeDictionary

これに関する非常に簡単な例は、キーが3_cAttributeDictionaryがある場合です:

>>> d = {"a":2, "b":3, "3_c":4}
>>> ad = AttributeDictionary(d)

>>> # 属性として
>>> ad.3_c

 File "<ipython-input-6-c0fe109cf75d>", line 2
    ad.3_c
        ^
SyntaxError: invalid token

>>> # ディクショナリのキーとして
>>> ad["3_c"]

4

まとめ

これで、この新しい検索APIがハブのワークフローと探索にどのように直接影響を与えるかについて、おおまかな理解ができることを願っています!これに加えて、AttributeDictionaryがあなたにとって有用な場所をコード内で知っているかもしれません。

ここからは、ハブの効率的な検索に関する公式ドキュメントを確認し、私たちにスターを与えることを忘れないでください!

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

人工知能

アーティスの創設者兼CEO、ウィリアム・ウーによるインタビューシリーズ

ウィリアム・ウーは、Artisseの創設者兼CEOであり、ユーザーの好みに基づいて写真を精密に変更する技術を提供していますそれ...

人工知能

「ジンディのCEO兼共同創設者、セリーナ・リー― インタビューシリーズ」

「Celina Leeは、ZindiのCEO兼共同創設者であり、アフリカのデータサイエンティスト向けの最大の専門ネットワークです Celina...

人工知能

「サティスファイラボのCEO兼共同創設者、ドニー・ホワイト- インタビューシリーズ」

2016年に設立されたSatisfi Labsは、会話型AI企業のリーディングカンパニーです早期の成功は、ニューヨーク・メッツ、メイシ...

人工知能

「スノーケルAIのCEO兼共同創設者、アレックス・ラットナー - インタビューシリーズ」

アレックス・ラトナーは、スタンフォードAIラボを母体とする会社、Snorkel AIのCEO兼共同創設者ですSnorkel AIは、手作業のAI...

AIテクノロジー

アンソニー・グーネティレケ氏は、Amdocsのグループ社長であり、テクノロジー部門および戦略部門の責任者です- インタビューシリーズ

アンソニー・グーネティレーケは、Amdocsでグループ社長、テクノロジーと戦略担当です彼と企業戦略チームは、会社の戦略を策...

AIニュース

OpenAIのCEOであるSam Altman氏:AIの力が証明されるにつれて、仕事に関するリスクが生じる

OpenAIのCEOであるSam Altmanは、特に彼の作品であるChatGPTに関するAIの潜在的な危険性について公言してきました。最近のイ...