PubNub関数とHuggingFaceによるセンチメント分析
Published: 2024-04-04 18:53:57

自分のアプリケーションやビジネスの中でAIを活用する方法が常に増加している中、リアルタイム・システムを作成する際にAIをどのように活用できるかをカバーすることは不可欠です。多くのユースケースがこのカテゴリーに分類される。 [アプリ内チャット](https://www.pubnub.com/solutions/chat/), [IoT](https://www.pubnub.com/solutions/iot-device-control/)または [ライブイベント](https://www.pubnub.com/solutions/live-audience-engagement/)ほとんどの場合、AI をソリューションに適用して、より良いものにする方法があります。

このブログでは、センチメント分析を使用して、ライブチャットの「肯定的」または「否定的」な行動を監視する方法を説明します。このアプリケーションには、不適切な顧客のサポートチャットを監視する、または、顧客が見ているイベントを楽しんでいるかどうかを確認するためにライブイベントチャットを監視するなど、いくつかの使用例があります。いずれにせよ、特にリアルタイム・システムを構築する場合、多くのアプリケーションでAIの利用が考えられる。

そこでPubNubの出番となる。 [PubNub](https://www.pubnub.com/)は、可用性の高いリアルタイム・コミュニケーション・プラットフォーム [プラットフォーム](https://www.pubnub.com/products/pubnub-platform/).これを利用して [チャット](https://www.pubnub.com/solutions/chat/), [IoTデバイス制御システム](https://www.pubnub.com/solutions/iot-device-control/), [ジオロケーションアプリ](https://www.pubnub.com/solutions/geolocation/)その他多くの通信システムPubNubの機能についてもっと知りたい方は [ドキュメント](https://www.pubnub.com/docs)または [価格](https://www.pubnub.com/pricing/)のページをご覧ください。

PubNubインテグレーションとは何ですか？
----------------------

まず [PubNubファンクション](https://www.pubnub.com/docs/serverless/functions/overview)PubNub Functionsを使用すると、PubNubインスタンス内で発生したイベントをキャプチャできます。これにより、既存の統合を活用したり、データを変換、再ルーティング、増強、フィルタリング、さらには集約するコードを書くことができます。では、具体的にどういうことでしょうか？基本的には、PubNubを介してメッセージ、シグナル、ファイルなど（データ）を送信するとします。この場合、クライアントが受信する前、または受信した後にコードを記述して、送信されるデータをブロックしたり、データを変更したり、あるいはデータを別のサードパーティシステムにルーティングしたりすることができます。

[PubNubインテグレーション](https://www.pubnub.com/integrations/)はPubNub Functionsの拡張機能で、PubNub Functionを素早くセットアップし、AWS、Giphy、Google Cloudなどのサードパーティのサービスと統合することができます。これは、基本的にあなたのリアルタイムシステムを私たちのFunctionsカタログ内の任意のサードパーティシステムに接続するために事前に書かれたコードです。このカタログはPubNubポータルまたは "Home "タブにあります。

下の画像を参照し、"Discover & Integrate "をクリックしてPubNubの既製のFunctionsを参照してください。

![](https://www.pubnub.com/cdn/3prze68gbwl1/4MMaTasjLUbSmmJIAkfgEc/d181be4a7a3b4626341e7fcdafec6035/Screenshot_2024-04-03_at_9.32.46_PM.png)

HuggingFaceを始める
---------------

この時点で、おそらく誰もがOpenAI、GPT-4、Claude、または人気のある大規模言語モデル（LLM）のいずれかについて聞いたことがあるでしょう。しかし、これらのLLMを本番環境で使用すると、コストが高くついたり、結果が非決定的になったりします。これは、あらゆることに長けていることの欠点だと思う。そこでHuggingFaceが役に立つ。[HuggingFace](https://huggingface.co/)はオープンソースのAIと機械学習モデルを提供しており、HuggingFace自体、あるいは以下のようなサードパーティーのシステムに簡単にデプロイすることができる。 [Amazon SageMaker](https://aws.amazon.com/sagemaker/)または [Azure ML](https://azure.microsoft.com/)あなたはAPIを通してこれらのデプロイメントとインターフェイスし、これらのモデルのスケーリングを制御することができます。これらのモデルには様々なサイズがあるが、一般的には1つの特定のタスクを実行するのに適した小さなAIモデルである。これらのモデルを微調整したり、事前に訓練されたモデルを特定のタスクに使用したりする機能があれば、様々なアプリケーションへの組み込みがより効率的になり、自動化とパフォーマンスが向上する。これらのモデルを組み合わせることで、新しく複雑なAIアプリケーションを作り出すことができる。この場合、HuggingFaceモデルを利用することで、以下のようなサードパーティプロバイダのプロダクションアプリケーションに依存する必要がなくなる。 [OpenAI](https://openai.com/)または [グーグル](https://gemini.google.com/)この場合、HuggingFaceモデルを利用することで、OpenAIやGoogleのようなサードパーティプロバイダの本番アプリケーションに依存する必要がなくなり、ディープラーニングソリューションを業務に導入するための、より的を絞ったカスタマイズ可能なアプローチが保証される。

以下のスクリーンショットを参照し、HuggingFaceがどれだけ多くの異なるAIモデルを提供しているかをご覧ください。

![](https://www.pubnub.com/cdn/3prze68gbwl1/59ab7LYEGEFRK4ypXiEh1x/b2fa83f8e8de8af87ba990b98429af5d/Screenshot_2024-04-03_at_10.09.09_PM.png)

センチメント分析とは
----------

[センチメント分析](https://en.wikipedia.org/wiki/Sentiment_analysis)(オピニオン・マイニングまたは感情AIとも呼ばれる)は、自然言語処理とテキスト分析を使用して、メッセージの感情またはトーンが肯定的、否定的、または中立的のいずれかであるかを判断することです。今日、企業は電子メール、カスタマーサポートメッセージ、ソーシャルメディア上のコメント、レビューなど、膨大な量のテキストベースのデータを持っている。センチメント分析は、これらのテキストをスキャンして、トピックに対する著者の態度を判断することができる。企業はこのデータを利用して、顧客サービスやブランドの評判を高めることができます。

### センチメント分析の使用例

**モデレーション**：センチメント分析を使用して、ライブイベント、サポート、またはアプリ内チャットを監視し、悪さをする顧客がいないかどうかを確認し、そのメッセージをすばやく禁止して削除することができます。これにより、プラットフォーム上の健全な環境を保つことができます。

**データ分析**：企業は、何千通ものEメールやテキストをスキャンして、顧客がイベントや企業ブランドに対してどのように反応するかを確認したいと思うことがある。このデータを使って、顧客の行動によって自分たちのやっていることの正誤を判断し、次に何をすべきかをより的確に判断することができる。

### PubNub機能でセンチメント分析を実装する

HuggingFace PubNubインテグレーションを使って、PubNubファンクションにセンチメント分析を実装してみましょう。まず、PubNubポータルにアクセスし、ホームページのファンクションカタログを開きます。Functions Catalogに入ったら、"HuggingFace Serverless API "をクリックする。

![](https://www.pubnub.com/cdn/3prze68gbwl1/1V2CWr9MvssSvP5DJYrulk/b344b52bb22fff541e29d0692e6f48cf/Screenshot_2024-04-03_at_10.25.01_PM.png)

PubNubインテグレーションを選択した後、PubNubファンクションを設定したいキーセットとアプリを選択してステップに従います。変数のステップに進んだら、HuggingFaceからAPIキーを取得する必要があります。Huggingfaceのプロフィール設定で [アクセストークン](https://huggingface.co/settings/tokens)これをPubNubファンクションのシークレットに追加する必要があります。そしてcreateを押すと、あなたのPubNubインスタンスとHuggingFaceが正式に統合されます。これで以下のコードサンプルのPubNub Functionが表示されるはずです。

```js
//
// **                                             **
// ** Add your API Key to MY SECRETS (Left Panel) **
// **                                             **
// **             HUGGINGFACE_API_KEY             **
// **                                             **
//
const FunctionConfig = {
    "HUGGINGFACE_API_KEY": "HuggingFace"
};
//
// Import Modules
//
const http = require('xhr');
const vault = require('vault');
//
// Main
//
export default async (request) => {
    let message = request.message.text;
    console.log('Sentiment:');
    let model = 'distilbert-base-uncased-finetuned-sst-2-english';
    let response = await query(message, model);
    console.log(response);
    console.log('GPT2:');
    model = 'gpt2';
    response = await query(message, model);
    console.log(response);
    console.log('Google\'s Gemma:');
    model = 'google/gemma-7b-it';
    response = await query(`<start_of_turn>user\n${message}\n<start_of_turn>model`, model);
    console.log(response);
    console.log('Capture:');
    model = 'dbmdz/bert-large-cased-finetuned-conll03-english';
    response = await query(message, model);
    console.log(response);
    return request.ok()
};
//
// HuggingFace API Call
//
async function query(text, model='distilbert-base-uncased-finetuned-sst-2-english') {
    const apikey = await vault.get(FunctionConfig.HUGGINGFACE_API_KEY);
    const response = await http.fetch( `https://api-inference.huggingface.co/models/${model}`, {
        headers: { Authorization: `Bearer ${apikey}`, 'Content-Type': 'application/json' },
        method: "POST",
        body: JSON.stringify({inputs:text}),
    });
    return await response.json();
}
```

このPubNubファンクションで使用されている最初のモデル、"distilbert-base-uncased-finetuned-sst-2-english "に焦点を当てます。この関数の詳細については [distilbert-base-uncased-finetuned-sst-2-englishをご覧ください。](https://huggingface.co/distilbert/distilbert-base-uncased-finetuned-sst-2-english)または、この関数のもとになっているモデル [distilbert/distilbert-base-uncasedです。](https://huggingface.co/distilbert/distilbert-base-uncased).このモデルは [github](https://github.com/aws-neuron/aws-neuron-sdk/blob/master/src/benchmark/pytorch/distilbert-base-uncased-finetuned-sst-2-english_compile.py).このモデルは私たちのためにすべての重い作業を行い、ネットワークを介して送信されたときにPubNubメッセージのセンチメント分析を決定します。

私は現在の関数を次のようにリファクタリングしました：

```js
//
// **                                             **
// ** Add your API Key to MY SECRETS (Left Panel) **
// **                                             **
// **             HUGGINGFACE_API_KEY             **
// **                                             **
//
const FunctionConfig = {
    "HUGGINGFACE_API_KEY": "HuggingFace"
};
//
// Import Modules
//
const http = require('xhr');
const vault = require('vault');
//
// Main
//
export default async (request) => {
    let message = request.message.text;
    console.log('Sentiment:');
    let model = 'distilbert-base-uncased-finetuned-sst-2-english';
    let response = await query(message, model);
    // Get the negative score
    if(response[0][0].label == "NEGATIVE"){
        request.message.score = response[0][0].score;
    }
    else{
        request.message.score = response[0][1].score;
    }
    console.log(request.message.score);
    return request.ok()
};
//
// HuggingFace API Call
//
async function query(text, model='distilbert-base-uncased-finetuned-sst-2-english') {
    const apikey = await vault.get(FunctionConfig.HUGGINGFACE_API_KEY);
    const response = await http.fetch( `https://api-inference.huggingface.co/models/${model}`, {
        headers: { Authorization: `Bearer ${apikey}`, 'Content-Type': 'application/json' },
        method: "POST",
        body: JSON.stringify({inputs:text}),
    });
    return await response.json();
}
```

このコードでは、センチメント分析HuggingFaceモデルを呼び出し、`スコアの`下のメッセージのペイロードにアタッチしています。テストを通して、もし私が次のようなメッセージをアップロードすると、そのメッセージは「0」になります：

```js
{
    "text": "That was not cool"
}
```

`0.9997703433036804という`ネガティブなスコアが得られ、これは高いネガティブスコアであり、このメッセージはフラグを立てることができます。このモデルの出力範囲は`0～1`であり、0は非常に低いスコア、1は最も高いスコアであることに注意することが重要です。 一方、次のようなメッセージを送信した場合：

```js
{
    "text": "Thats so Cool!"
}
```

`0.00014850986190140247という`ネガティブなスコアが表示されますが、これは本当に低いネガティブ・スコアであり、メッセージがポジティブなトーンであることを意味します。

PubNubを始める
----------

わずか数ステップで、PubNub統合を利用してPubNubネットワークにセンチメント分析を実装しました。AIとPubNubでできることに興味があれば、次のような他のブログもご覧ください：

[PubNubとChatGPT / OpenAIでチャットボットを構築する](https://www.pubnub.com/blog/build-a-chatbot-with-pubnub-and-chatgpt-openai/):OpenAIの統合とPubNubを使って独自のチャットボットを構築する方法を説明します。

[カスタムナレッジベースでLLMチャットボットを構築する](https://www.pubnub.com/blog/build-chatbot-with-custom-knowledge-base/):ここでは、PubNubファンクションを利用して独自のカスタムナレッジベースLLMチャットボットを構築する方法を説明します。自社のデータに関する質問に答えることができます。

[プロンプトエンジニアリングとLLMの開発者ガイド](https://www.pubnub.com/blog/developers-guide-to-prompt-engineering/):プロンプトエンジニアリングとこれらの大規模言語モデルからあなたが望む答えを得る方法についてのガイドをご覧ください。

[ChatGPTと統合されたジオロケーションチュートリアル](https://www.pubnub.com/tutorials/geolocation-tracker/):このチュートリアルでは、ユーザーが位置情報を共有し、リアルタイムでメッセージを送信できるジオロケーション・トラッキング・アプリを構築する方法と、ChatGPTと統合して位置情報を提供する方法を紹介します。

PubNubはどのようにお役に立てるでしょうか？
========================

この記事は[PubNub.com](https://www.pubnub.com/blog/sentiment-analysis-with-pubnub-functions-and-huggingface/)に掲載されたものです。

PubNubのプラットフォームは、開発者がWebアプリ、モバイルアプリ、IoTデバイス向けにリアルタイムのインタラクティブ機能を構築、提供、管理できるように支援します。

私たちのプラットフォームの基盤は、業界最大かつ最もスケーラブルなリアルタイムエッジメッセージングネットワークです。世界15か所以上で8億人の月間アクティブユーザーをサポートし、99.999%の信頼性を誇るため、停電や同時実行数の制限、トラフィックの急増による遅延の問題を心配する必要はありません。

PubNubを体験
---------

[ライブツアーを](https://www.pubnub.com/tour/introduction/)チェックして、5分以内にすべてのPubNub搭載アプリの背後にある本質的な概念を理解する

セットアップ
------

[PubNubアカウントに](https://admin.pubnub.com/signup/)サインアップすると、PubNubキーに無料ですぐにアクセスできます。

始める
---

[PubNubのドキュメントは](https://www.pubnub.com/docs)、ユースケースや[SDKに](https://www.pubnub.com/docs)関係なく、あなたを立ち上げ、実行することができます。