PubNub 함수와 허깅페이스를 사용한 감정 분석
Published: 2024-04-04 18:58:58

애플리케이션이나 비즈니스 내에서 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의 기능에 대해 자세히 알아보려면 다음을 방문하세요. [docs](https://www.pubnub.com/docs) 또는 [가격](https://www.pubnub.com/pricing/) 페이지를 방문하여 시작하세요.

PubNub 연동이란 무엇인가요?
------------------

먼저, 잘 모르는 분들을 위해 [펍넙 함수](https://www.pubnub.com/docs/serverless/functions/overview)를 잘 모르시는 분들을 위해 설명하자면, PubNub 함수를 사용하면 PubNub 인스턴스 내에서 발생하는 이벤트를 캡처할 수 있습니다. 이를 통해 기존 통합을 활용하거나 데이터를 변환, 재라우팅, 증강, 필터링, 집계하는 코드를 작성할 수 있습니다. 그렇다면 이는 정확히 무엇을 의미할까요? 기본적으로 메시지, 신호, 파일 등(데이터)을 PubNub을 통해 전송한다고 가정해 보겠습니다. 이 경우 클라이언트가 데이터를 수신하기 전이나 후에 코드를 작성하여 전송되는 데이터를 차단하거나 데이터를 수정하거나 데이터를 다른 타사 시스템으로 라우팅할 수 있습니다.

[PubNub 통합](https://www.pubnub.com/integrations/) 는 PubNub 함수를 빠르게 설정하고 AWS, Giphy, Google Cloud 등과 같은 일부 타사 서비스와 통합할 수 있는 PubNub 함수의 확장 기능입니다. 기본적으로 실시간 시스템을 서드파티 시스템에 연결하기 위해 미리 작성된 코드가 함수 카탈로그에 포함되어 있습니다. 이 카탈로그는 PubNub 포털 또는 '홈' 탭에서 찾을 수 있습니다.

아래 이미지를 참조하고 "검색 및 통합"을 클릭하여 PubNub의 사전 제작된 함수를 찾아보세요.

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

허깅페이스 시작하기
----------

이쯤 되면 누구나 OpenAI, GPT-4, Claude 또는 인기 있는 대규모 언어 모델(LLM)에 대해 들어보셨을 것입니다. 하지만 프로덕션 환경에서 이러한 LLM을 사용하면 비용이 많이 들거나 결과가 불확실할 수 있습니다. 모든 것을 잘하는 것의 단점은 특정 작업 하나만 더 잘할 수 있다는 것입니다. 바로 이 부분에서 HuggingFace가 활용될 수 있습니다.[허깅페이스](https://huggingface.co/) 는 허깅페이스 자체 또는 다음과 같은 타사 시스템에 쉽게 배포할 수 있는 오픈 소스 AI 및 머신 러닝 모델을 제공합니다. [아마존 세이지메이커](https://aws.amazon.com/sagemaker/) 또는 [Azure ML](https://azure.microsoft.com/)API를 통해 이러한 배포와 인터페이스하고 이러한 모델의 확장을 제어할 수 있으므로 프로덕션 환경에 완벽하게 적합합니다. 이러한 모델은 크기가 다양하지만 일반적으로 한 가지 특정 작업에 능숙한 소규모 AI 모델입니다. 이러한 모델을 미세 조정하거나 특정 작업에 대해 사전 학습된 모델을 사용할 수 있는 기능을 사용하면 다양한 애플리케이션에 모델을 임베드하여 자동화 및 성능을 향상시키는 것이 더욱 효율적입니다. 이러한 모델을 결합하면 새롭고 복잡한 AI 애플리케이션을 만들 수 있습니다. 이 경우 HuggingFace 모델을 활용하면 다음과 같은 타사 제공업체의 프로덕션 애플리케이션에 의존할 필요가 없습니다. [OpenAI](https://openai.com/) 또는 [Google](https://gemini.google.com/)과 같은 타사 제공업체의 프로덕션 애플리케이션에 의존하지 않아도 되므로 운영에서 딥러닝 솔루션을 배포할 때 보다 타겟팅되고 맞춤화된 접근 방식을 보장할 수 있습니다.

아래 스크린샷을 참조하여 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라고도 함)은 자연어 처리와 텍스트 분석을 사용하여 메시지의 감정이나 어조가 긍정적인지, 부정적인지, 중립적인지 판단하는 것입니다. 오늘날 기업들은 이메일, 고객 지원 메시지, 소셜 미디어 댓글, 리뷰 등과 같은 방대한 양의 텍스트 기반 데이터를 보유하고 있습니다. 감성 분석은 이러한 텍스트를 스캔하여 주제에 대한 작성자의 태도를 파악할 수 있습니다. 기업은 이 데이터를 사용하여 고객 서비스 또는 브랜드 평판을 높일 수 있습니다.

### 감성 분석 사용 사례

**중재**: 감성 분석으로 실시간 이벤트, 지원 또는 인앱 채팅을 모니터링하여 잘못된 행동을 하는 고객이 있는지 확인하고 해당 메시지를 신속하게 금지 및 삭제할 수 있습니다. 이를 통해 플랫폼의 건전한 환경을 조성할 수 있습니다.

**데이터 분석**: 기업은 때때로 수천 개의 이메일이나 문자를 스캔하여 고객이 이벤트나 회사 브랜드에 대해 어떻게 반응하는지 확인하고자 합니다. 이러한 데이터를 사용하여 고객의 행동에 따라 옳고 그름을 판단하고 다음에 해야 할 일에 대해 더 나은 결정을 내릴 수 있습니다.

### PubNub 함수에서 감성 분석 구현하기

허깅페이스 펍넙 통합을 사용해, 감정 분석을 펍넙 함수에 바로 구현해 보겠습니다. 먼저 PubNub 포털로 이동하여 홈 페이지에서 함수 카탈로그를 엽니다. 함수 카탈로그에서 "HuggingFace 서버리스 API"를 클릭합니다.

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

PubNub 연동을 선택한 후 PubNub 함수를 구성할 키 세트와 앱을 선택하여 단계를 따르세요. 변수 단계로 이동한 후에는 HuggingFace에서 API 키를 가져와야 합니다. 허깅페이스 내 프로필 설정으로 이동하여 [액세스 토큰](https://huggingface.co/settings/tokens)을 선택하여 PubNub 함수 비밀 번호에 추가해야 합니다. 그런 다음 생성을 누르면 PubNub 인스턴스가 HuggingFace와 공식적으로 통합됩니다. 이제 다음 코드 샘플이 포함된 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);
    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 모델을 호출하여 `점수` 아래 메시지 페이로드에 첨부합니다. 테스트를 통해 다음과 같은 메시지를 업로드하면:

```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.com에](https://www.pubnub.com/blog/sentiment-analysis-with-pubnub-functions-and-huggingface/) 게시되었습니다.

저희 플랫폼은 개발자가 웹 앱, 모바일 앱, IoT 디바이스를 위한 실시간 상호작용을 구축, 제공, 관리할 수 있도록 지원합니다.

저희 플랫폼의 기반은 업계에서 가장 크고 확장성이 뛰어난 실시간 에지 메시징 네트워크입니다. 전 세계 15개 이상의 PoP가 월간 8억 명의 활성 사용자를 지원하고 99.999%의 안정성을 제공하므로 중단, 동시 접속자 수 제한 또는 트래픽 폭증으로 인한 지연 문제를 걱정할 필요가 없습니다.

PubNub 체험하기
-----------

[라이브 투어를](https://www.pubnub.com/tour/introduction/) 통해 5분 이내에 모든 PubNub 기반 앱의 필수 개념을 이해하세요.

설정하기
----

PubNub [계정에](https://admin.pubnub.com/signup/) 가입하여 PubNub 키에 무료로 즉시 액세스하세요.

시작하기
----

사용 사례나 [SDK에](https://www.pubnub.com/docs) 관계없이 [PubNub 문서를](https://www.pubnub.com/docs) 통해 바로 시작하고 실행할 수 있습니다.