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 草薙 昭彦 テクノロジーエバンジェリスト
  2. みんなの 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とは?』
  3. 本日のトピック • AI・機械学習プラットフォーム Hugging Face の、無料で簡単に利用できる Inference API を API

    ツール Postman を使って呼び出してみる • Postman から Python コードを生成し、機能を動かしてみる @postman_japan Postman API コレクション Python コード Hugging Face Inference API
  4. Hugging Face とは? • 機械学習コミュニティのための共同開発プラットフォーム ◦ 開発者・研究者が機械学習モデル、データセット、アプリケーションを共有 • 噛み砕いていうと・・ ◦

    機械学習の GitHub ✨ • Hugging Face はもともと10代をターゲットとしたチャットボットを開発する会社として始 まったが、その後機械学習の民主化を目的としたプラットフォームを提供する会社に @postman_japan
  5. Inference API とは? • 無料のすぐ使える機械学習 API ◦ シンプルな API コールで、推論用に用意された

    NLP、オーディオ、コンピュータービ ジョンモデルを簡単に利用できる • Hosted Inference Endpoints API との違いは? ◦ 名前はよく似ているが、Hosted Inference Endpoints はセキュリティ的に隔離さ れ、本番利用向けに用意された有償の環境 • API のレート制限があり、性能最適化や GPU インスタンスの利用はできない @postman_japan https://huggingface.co/inference-api
  6. こういう時に Inference API • NLP、オーディオ、コンピュータビジョンの多様なモデル、ライブラリが用意されており、機 械学習を利用したアプリケーションを 時間をかけず構築できる • 新しいモデルへシームレスにアップグレードできるため、常に 最先端の

    AI を活用できる • インフラを気にかけることなく、モデルの パフォーマンスと信頼性をスケールアップできる • データサイエンスや MLOps の知識や経験が少なくても、AIのパワーを活用できる @postman_japan
  7. Postman とは? @postman_japan API 提供側 ライフサイクル API 利用側 ライフサイクル テスト

    開発 設計 定義 デプロイ デプロイ 配布 監視 監視 テスト 評価 統合 発見 セキュ リティ • API リクエストに対するレスポンスをテストするための API クライアントを中心に、API 提 供者・利用者両方の API ライフサイクル全体に役立つツールを提供
  8. 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
  9. Postman コレクション コレクションは、API リクエストの集合です。コレクション単位で(もしくはコレクションに関連付けて)モック サーバー、モニター、テストスイートなど主要な Postman 機能が利用できます コレクション API リクエスト

    テスト サンプル API リクエスト テスト サンプル API リクエスト テスト サンプル コレクションでできる主なこと • 複数 API リクエスト、関連レスポンス、テストの定義 • ワークフロー定義(リクエスト呼び出しのシーケンス) • リクエスト・テスト実行の自動化(コレクションランナー活用) • コレクション単位の文書化 • モックサーバー利用(コレクション単位) • モニター利用(コレクション単位) • チームメイトや利用者とのコラボレーション ◦ フォーク (Fork) ◦ プルリクエスト ◦ コメント @postman_japan
  10. Postman API ネットワーク Postman API ネットワークは、 API 利用者と API 提供者の双方が

    API を簡単に発見、探索、共有でき るユニークな場所を提供します。 Postman API ネットワークには2つの種類があります: パブリック APIネットワーク プライベート APIネットワーク APIネットワーク @postman_japan
  11. Inference API を検索する • Postman API ネットワークから Hugging Face Inference

    API を探してみる ◦ Postman 画面上部の検索窓に「Hugging Face Inference API」を入力 ◦ 「Hugging Face Inference API (free) / Postman Student Programs」を選択 @postman_japan
  12. 最初の 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
  13. 最初の API コール (Text Classification) @postman_japan コレクションか らリクエスト Text Classification

    を選ぶ パス変数 model に SamLowe/roberta-base-go_emot ions が指定されていることを確認 Params タブを 選択
  14. コレクションに含まれているモデル @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
  15. リクエストのコードスニペット @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}]