Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Postmanで始めるAI・機械学習プラットフォームHugging Face

草薙昭彦
September 14, 2023

Postmanで始めるAI・機械学習プラットフォームHugging Face

みんなのPython勉強会#97での発表資料です。

今話題の、世界中の研究者・開発者が利用するAI・機械学習プラットフォームHugging Face。その中でも、誰でも無料で利用できる非常にシンプルなInference (推論) APIを、API開発・テストツールのPostmanから呼び出してテキスト分類やText-To-Imageを試す方法を解説します。APIの呼び出し方が決まったら、そのままPythonコードに出力する便利な小技もご紹介。

草薙昭彦

September 14, 2023
Tweet

More Decks by 草薙昭彦

Other Decks in Technology

Transcript

  1. All rights reserved by Postman Inc
    Postman で始める AI・
    機械学習プラットフォーム
    Hugging Face
    草薙 昭彦
    テクノロジーエバンジェリスト

    View Slide

  2. テクノロジーエバンジェリスト
    Postman 株式会社
    草薙 昭彦
    @postman_japan
    @nagix

    View Slide

  3. みんなの Python 勉強会は5回目です
    @postman_japan
    2015/05/28
    業務のための Python 勉強会
    『データサイエンスとデータエンジニア』
    2016/06/08
    みんなの Python 勉強会#13
    『大規模データ分析を支えるインフラ系オープンソースソフト
    ウェアの最新事情』
    2020/07/09
    みんなの Python 勉強会#59
    『Mini Tokyo 3D - 交通デジタルツインとデジタルトランス
    フォーメーションの世界』
    2023/06/15
    みんなの Python 勉強会#94
    『Postman 東京オフィス・プレオープン ★ API プラットフォー
    ム Postmanとは?』

    View Slide

  4. 本日のトピック
    ● AI・機械学習プラットフォーム Hugging Face の、無料で簡単に利用できる Inference
    API を API ツール Postman を使って呼び出してみる
    ● Postman から Python コードを生成し、機能を動かしてみる
    @postman_japan
    Postman
    API コレクション
    Python コード
    Hugging Face
    Inference
    API

    View Slide

  5. Hugging Face
    @postman_japan
    https://huggingface.co

    View Slide

  6. Hugging Face とは?
    ● 機械学習コミュニティのための共同開発プラットフォーム
    ○ 開発者・研究者が機械学習モデル、データセット、アプリケーションを共有
    ● 噛み砕いていうと・・
    ○ 機械学習の GitHub ✨
    ● Hugging Face はもともと10代をターゲットとしたチャットボットを開発する会社として始
    まったが、その後機械学習の民主化を目的としたプラットフォームを提供する会社に
    @postman_japan

    View Slide

  7. Inference API とは?
    ● 無料のすぐ使える機械学習 API
    ○ シンプルな API コールで、推論用に用意された NLP、オーディオ、コンピュータービ
    ジョンモデルを簡単に利用できる
    ● Hosted Inference Endpoints API との違いは?
    ○ 名前はよく似ているが、Hosted Inference Endpoints はセキュリティ的に隔離さ
    れ、本番利用向けに用意された有償の環境
    ● API のレート制限があり、性能最適化や GPU インスタンスの利用はできない
    @postman_japan
    https://huggingface.co/inference-api

    View Slide

  8. こういう時に Inference API
    ● NLP、オーディオ、コンピュータビジョンの多様なモデル、ライブラリが用意されており、機
    械学習を利用したアプリケーションを
    時間をかけず構築できる
    ● 新しいモデルへシームレスにアップグレードできるため、常に
    最先端の AI を活用できる
    ● インフラを気にかけることなく、モデルの
    パフォーマンスと信頼性をスケールアップできる
    ● データサイエンスや MLOps の知識や経験が少なくても、AIのパワーを活用できる
    @postman_japan

    View Slide

  9. 準備
    1. サインアップ
    2. アクセストークンを取得 (hf_xxxxxxxxxx)
    @postman_japan

    View Slide

  10. Postman
    @postman_japan
    https://www.postman.com

    View Slide

  11. Postman とは?
    @postman_japan
    API 提供側
    ライフサイクル
    API 利用側
    ライフサイクル
    テスト
    開発
    設計
    定義
    デプロイ
    デプロイ
    配布
    監視
    監視
    テスト
    評価
    統合
    発見
    セキュ
    リティ
    ● API リクエストに対するレスポンスをテストするための API クライアントを中心に、API 提
    供者・利用者両方の API ライフサイクル全体に役立つツールを提供

    View Slide

  12. Web API
    https://api.example.com/search?q=postman&lang=en
    GET
    ホスト パス
    リクエスト
    レスポンス
    メソッド パラメータ
    エンドポイント
    200
    ステータス
    コード
    {
    "id": 723495468,
    "name": "postman",
    "type": "company",
    "address": "1-5-1 Marunouchi, Chiyoda-ku, Tokyo"
    }
    @postman_japan

    View Slide

  13. Postman コレクション
    コレクションは、API リクエストの集合です。コレクション単位で(もしくはコレクションに関連付けて)モック
    サーバー、モニター、テストスイートなど主要な Postman 機能が利用できます
    コレクション
    API リクエスト
    テスト サンプル
    API リクエスト
    テスト サンプル
    API リクエスト
    テスト サンプル
    コレクションでできる主なこと
    ● 複数 API リクエスト、関連レスポンス、テストの定義
    ● ワークフロー定義(リクエスト呼び出しのシーケンス)
    ● リクエスト・テスト実行の自動化(コレクションランナー活用)
    ● コレクション単位の文書化
    ● モックサーバー利用(コレクション単位)
    ● モニター利用(コレクション単位)
    ● チームメイトや利用者とのコラボレーション
    ○ フォーク (Fork)
    ○ プルリクエスト
    ○ コメント
    @postman_japan

    View Slide

  14. Postman API ネットワーク
    Postman API ネットワークは、 API 利用者と API 提供者の双方が API を簡単に発見、探索、共有でき
    るユニークな場所を提供します。
    Postman API ネットワークには2つの種類があります:
    パブリック
    APIネットワーク
    プライベート
    APIネットワーク
    APIネットワーク
    @postman_japan

    View Slide

  15. Inference API を検索する
    ● Postman API ネットワークから Hugging Face Inference API を探してみる
    ○ Postman 画面上部の検索窓に「Hugging Face Inference API」を入力
    ○ 「Hugging Face Inference API (free) / Postman Student Programs」を選択
    @postman_japan

    View Slide

  16. Inference API をフォークする
    コレクションのフォークとは?
    ● 公開されているコレクションのコ
    ピーを自分の手元(ワークス
    ペース)に作り、それに対して操
    作を行う
    ● GitHub のリポジトリのフォーク
    に似た概念
    @postman_japan

    View Slide

  17. コレクション変数に API キーを格納する
    ● 変数とは?
    ○ 繰り返し使う文字列や数値を変数に格納して管理する
    ● コレクションの「Variables」タブで「access_token」に API キーを入力
    @postman_japan
    最後に Save を
    忘れずに

    View Slide

  18. 最初の API コール (Text Classification)
    @postman_japan
    I am not having a great day.
    ラベル 値
    disappointment 0.5044485330581665
    sadness 0.3469431400299072
    annoyance 0.08485797047615051
    neutral 0.05476689338684082
    … …
    モデル: SamLowe/roberta-base-go_emotions

    View Slide

  19. 最初の API コール (Text Classification)
    @postman_japan
    コレクションか
    らリクエスト
    Text
    Classification
    を選ぶ
    パス変数 model に
    SamLowe/roberta-base-go_emot
    ions が指定されていることを確認
    Params タブを
    選択

    View Slide

  20. 最初の API コール (Text Classification)
    @postman_japan
    Post するデータ
    Body タブを選

    View Slide

  21. 最初の API コール (Text Classification)
    @postman_japan
    レスポンスの
    データ
    Body タブを選

    リクエストを送信

    View Slide

  22. roberta-base-go_emotions ってどんなモデル?
    @postman_japan
    https://huggingface.co/SamLowe/roberta-base-go_emotions

    View Slide

  23. コレクションに含まれているモデル
    @postman_japan
    テキスト
    Text Classification SamLowe/roberta-base-go_emotions
    Zero Shot Classification MoritzLaurer/DeBERTa-v3-base-mnli-fe
    ver-anli
    Token Classification tomaarsen/span-marker-mbert-base-mu
    ltinerd
    Question Answering IProject-10/xlm-roberta-base-finetuned-
    squad2
    Fill mask bert-base-uncased
    Summarization facebook/bart-large-cnn
    Translation Helsinki-NLP/opus-mt-en-zh
    Text-to-text google/flan-t5-xxl
    Feature Extraction facebook/bart-large
    Sentence Similarity sentence-transformers/all-MiniLM-L6-v2
    画像
    Image
    Classification
    nateraw/vit-age-classifier
    Text-to-Image runwayml/stable-diffusion-v
    1-5
    音声
    Audio
    Classification
    MIT/ast-finetuned-audioset
    -10-10-0.4593
    Text-to-Speech facebook/fastspeech2-en-lj
    speech

    View Slide

  24. ライブデモ
    @postman_japan

    View Slide

  25. リクエストのコードスニペット
    @postman_japan
    コードアイコンを
    クリック

    View Slide

  26. リクエストのコードスニペット
    @postman_japan
    お好みの言語を
    選択

    View Slide

  27. リクエストのコードスニペット
    @postman_japan
    % python
    Python 3.10.10 (main, Jul 14 2023, 11:54:03) [Clang 14.0.3 (clang-1403.0.22.14.1)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import requests
    >>> import json
    >>>
    >>> url = "https://api-inference.huggingface.co/models/SamLowe/roberta-base-go_emotions"
    >>>
    >>> payload = json.dumps({
    ... "text": "I am not having a great day."
    ... })
    >>> headers = {
    ... 'Content-Type': 'application/json',
    ... 'Authorization': 'Bearer hf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    ... }
    >>>
    >>> response = requests.request("POST", url, headers=headers, data=payload)
    >>>
    >>> print(response.text)
    [{"label":"disappointment","score":0.5044485330581665},{"label":"sadness","score":0.3469431400299072},{"label":
    "annoyance","score":0.08485797047615051},{"label":"neutral","score":0.05476689338684082},{"label":"disapproval"
    ,"score":0.05280729755759239},{"label":"realization","score":0.0147128039970994},{"label":"nervousness","score"
    :0.013806507922708988},{"label":"approval","score":0.011522370390594006},{"label":"joy","score":0.0062008751556
    277275},{"label":"anger","score":0.005856028757989407},{"label":"embarrassment","score":0.005520221311599016},{
    "label":"caring","score":0.005480862222611904},{"label":"remorse","score":0.0053450302220880985},{"label":"disg
    ust","score":0.004901108331978321},{"label":"grief","score":0.0035944394767284393},{"label":"confusion","score"
    :0.0035573095083236694},{"label":"relief","score":0.0030994510743767023},{"label":"desire","score":0.0028612534
    515559673},{"label":"admiration","score":0.0027561066672205925},{"label":"optimism","score":0.00272876257076859
    47},{"label":"fear","score":0.002634430304169655},{"label":"love","score":0.00248360657133162},{"label":"excite
    ment","score":0.002481137402355671},{"label":"curiosity","score":0.0022594754118472338},{"label":"amusement","s
    core":0.001642841612920165},{"label":"surprise","score":0.0015645057428628206},{"label":"gratitude","score":0.0
    006519951275549829},{"label":"pride","score":0.000576098682358861}]

    View Slide

  28. ありがとうございました
    @postman_japan

    View Slide

  29. Postman Sapporo Meetup 2023.9
    https://postman.connpass.com/event/293366/
    2023/9/27(水)
    @postman_japan

    View Slide

  30. Postman Tokyo Meetup 2023.10
    https://postman.connpass.com/event/294381/
    2023/10/10(火)
    @postman_japan

    View Slide

  31. 「API ファーストの世界」コミック日本語版
    https://www.api-first-world.com/ja/
    @postman_japan

    View Slide