ryubloblog’s diary

宮城県の仙台で働くプログラマーです。

Hagging Face Inference APIをFastAPIで使用してみた

はじめに

startpython.connpass.com

#97のみんなのPython勉強会のトーク1草薙 昭彦さんの
『Postmanで始めるAI・機械学習プラットフォームHugging Face』
の内容が興味深く、実際にAIを利用してみたいと思ったので実際にやってみましたという記事です。

トーク内で使用されていた資料も公開されていました!

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

実装したもの

FastAPIを使用してSwaggerから簡単に利用できるようにしました。

API: https://inference-api-with-fastapi-2nc47pcv3a-an.a.run.app/docs
リポジトリ: GitHub - ryu-0729/inference_api_with_fastapi

使用技術

Python3.12
FastAPI
Docker/Dev Container
Cloud Run
Hagging Face Inference API

Hagging Face Inference APIの利用方法

トーク内の資料でも紹介されてはいますが、一通りの流れを記載いたします。

Step1 Hugging Faceにユーザー登録

メールアドレスとパスワードを入力してユーザー登録をします。
登録したメールアドレスに認証メールが届くので認証を完了します。

Step2 アクセストークンの取得

ユーザーの設定画面から左側の「Access Tokens」を選択します。

「New Token」のボタンからアクセストークンを生成します。
Roleはreadで問題ないです。

Step3 Hagging Face Inference APIの利用

PostmanからのAPIの利用方法は、資料に記載がされているのでここでは省略いたします。
15 ~ 21ページに記載されています。

https://speakerdeck.com/nagix/postmandeshi-meruaiji-jie-xue-xi-puratutohuomuhugging-face?slide=15

Python(FastAPI)からの利用方法

今回はrequestsパッケージを使用してAPIを利用します。

pypi.org

エンドポイントさえ設定できれば簡単にAPIを利用することができます。

huggingface.co

上記のリンクに記載されていますが、エンドポイントの形式は、「共通URL + モデルID」になります。

ENDPOINT = https://api-inference.huggingface.co/models/<MODEL_ID>

利用するモデルは下記リンクを見てみて設定するか、ご自身で調べて設定する形になります。

https://huggingface.co/docs/api-inference/detailed_parameters#detailed-parameters

また、Step2で生成したアクセストークンをAuthorizationヘッダーに渡すことも必要になります。
形式は「Bearer + アクセストークン」になります。
"Authorization": f"Bearer {access_token}"

参考ソース(Postmanのコード生成を利用)

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 xxxxxxxxxxxxxxx'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

今回実装したソースコードについては下記を参照していただければと思います。

https://github.com/ryu-0729/inference_api_with_fastapi/blob/master/app/core/requestapi.py

https://github.com/ryu-0729/inference_api_with_fastapi/blob/master/app/apis/text.py

※ 注意事項
初回アクセスの際に、モデルの読み込みによってAPIエラーになる場合がありました。
しばらく時間を置いて実行することで正常に動作することが確認できました。

実行例

使用したInference APIについて

今回使用したInference APIについて紹介したいと思います。

テキストから感情分析 Text Classification

https://huggingface.co/docs/api-inference/detailed_parameters#text-classification-task

テキストから感情を分析するAPIです。
分析したいテキストをパラメータとして渡すと感情ごとに一致度を数値としてレスポンスが返ってきます。

https://inference-api-with-fastapi-2nc47pcv3a-an.a.run.app/docs#/Text/text_classification_text_text_classification_get

テキストの問題に答える Question Answering

https://huggingface.co/docs/api-inference/detailed_parameters#question-answering-task

テキストの問題に答えるAPIです。
問題文とテキストをパラメータとして渡すと問題に答えるレスポンスが返ってきます。

https://inference-api-with-fastapi-2nc47pcv3a-an.a.run.app/docs#/Text/question_answer_text_question_answer_get

画像からテキストを生成 Blip Image Captioning Large

https://huggingface.co/Salesforce/blip-image-captioning-large

画像URLからテキストを生成するAPIです。
画像URLをパラメータとして渡すとどのような画像であるかをテキストにしてレスポンスが返ってきます。

https://inference-api-with-fastapi-2nc47pcv3a-an.a.run.app/docs#/Multimodal/image_to_text_multimodal_image_to_text_get

まとめ

Hagging Face Inference APIPython(FastAPI)から使用してみたわけですが、想像以上に簡単に利用することができました。
今回使用したAPI以外にも画像生成や画像の感情分析とかも利用できるので、興味がある方は実際に触ってみると面白いと思います。

「みんなのPython勉強会」には毎月のように参加しているわけですが、毎月興味深い内容やPythonの技術について新しいことを知れる貴重な勉強会だと感じています。
感謝です!!

以上になります、ありがとうございました!