Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

みんなの 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とは?』

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Hugging Face @postman_japan https://huggingface.co

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

最初の 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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

最初の API コール (Text Classification) @postman_japan レスポンスの データ Body タブを選 択 リクエストを送信

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

コレクションに含まれているモデル @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

Slide 24

Slide 24 text

ライブデモ @postman_japan

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

リクエストのコードスニペット @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}]

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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