Анализ тональности — это мощная техника, используемая для определения эмоционального тона фрагмента текста. Он имеет множество применений, от понимания отзывов клиентов до анализа тенденций в социальных сетях.

11 июля IBM объявила об общедоступной платформе watsonx. В этом блоге я использовал платформу watsonx.ai, которая включает большие языковые модели (LLM), которые помогают организациям создавать специализированные приложения для решения своих бизнес-задач.

В этом блоге я попытался продемонстрировать, как клиент может использовать модель IBM LLM для определения тональности комментария. Мы создадим образец портала формы обратной связи, чтобы отправить текст для анализа тональности по модели IBM LLM. После анализа комментарий и тональность будут сохранены в таблице базы данных PostgreSQL для дальнейшего анализа.

Следующий архитектурный проект поможет вам понять, как работает приложение.

  1. Пользователь откроет форму обратной связи, заполнит данные и нажмет «Отправить».
  2. Приложение обратной связи будет анализировать комментарии пользователей и передавать их watsonx.ai с помощью API для получения подробной информации о настроении.
  3. Watsonx.ai возвращает детали настроений.
  4. Код Python запишет данные, предоставленные клиентом, из формы обратной связи и данные тональности в таблицу PostgreSQL.
  5. Инструментальная панель Cognos автоматически обновится, как только в таблицу будут добавлены новые сведения.
  6. Cloud Pak for Data сохранит панель мониторинга cognos и сделает ее доступной для будущих изменений.

Предположения:

Чтобы обеспечить плавную реализацию, давайте установим следующие предположения:

  • У вас есть базовые знания о программировании на Python.
  • Вы можете получить доступ к облачной учетной записи IBM, службе машинного обучения Watson, Cloud Pak для данных и серверу PostgreSQL.
  • Создайте учетную запись уровня бесплатного пользования IBM cloud, перейдя по этой ссылке.
  • На вашем компьютере установлены Python 3.x и менеджер пакетов pip.

Необходимые условия:

  • Используйте эту ссылку, чтобы создать ключи API в облаке IBM и хранить их в надежном месте.
  • Войдите на платформу watsonx, используя эту ссылку, и если вы войдете в первый раз, вам будет предложено создать проект. Нажмите Создать проект песочницы.
  • Если служба машинного обучения Watson отсутствует, вы получите следующее сообщение об ошибке. Вместо этого нажмите «Создать проект».

  • Дайте ему имя на следующем экране, свяжите сегмент хранилища и нажмите «Создать».
  • Теперь вы окажетесь на экране проекта. Нажмите «Управление» и скопируйте идентификатор проекта. Вам нужно будет обновить идентификатор проекта в коде Python ниже.
  • Нажмите «Активы», нажмите «Новая задача» и нажмите «Поэкспериментировать с моделями фундамента и запросами на сборку».

  • Свяжите службу WML с лабораторией подсказок

  • Если службы WML не найдены, вам будет предложено создать их. Нажмите «Новая служба» в правом углу.

  • Нажмите Служба машинного обучения Watson, выберите упрощенный план и нажмите Создать.
  • Теперь вернитесь к активам, нажмите на лабораторную подсказку и установите все флажки на экране для вашего согласия. Нажмите пропустить тур.
  • Нажмите на приглашение «Образец» на левой боковой панели, нажмите «Обнаружение тональности» и заполните данные, показанные на снимке экрана ниже. Щелкните Создать.

  • Нажмите на модель в правом верхнем углу и нажмите «просмотреть все модели фундаментов». На следующем экране выберите «MPT-7B-Instruct2» и нажмите «Выбрать модель».
  • Соберите следующую информацию с вашего сервера PostgreSQL. Убедитесь, что у вас есть разрешение на создание таблицы в базе данных и вставку/обновление записей в нее.
DB_NAME = ‘your_database_name’
DB_USER = 'your_username'
DB_PASSWORD = 'your_password'
DB_HOST = 'your_host'
DB_PORT = 'your_port'
  • Добавьте службу панели мониторинга cognos из IBM Cloud Pak для каталога службы данных. Перейдите по этой ссылке для получения пошаговой инструкции.

Пошаговые инструкции:

  • Установите Flask и psycopg2 на свой локальный компьютер с помощью следующей команды.
Pip install Flask psycopg2

For Mac or Linux run 

pip install Flask psycopg2-binary
  • Создайте файл app.py и вставьте в него следующий код. Обновите параметры, как указано в коде. Сохраните файл.
from flask import Flask, render_template, request, jsonify
import traceback
import psycopg2
import requests
import json

app = Flask(__name__)

api_key='Insert your IBM Cloud API key here'
PROJECT_ID='Insert your watsonx project id here'

def generate_bearer_token(api_key):
    url = 'https://iam.cloud.ibm.com/identity/token'
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
    data = {
        'grant_type': 'urn:ibm:params:oauth:grant-type:apikey',
        'apikey': api_key
    }
    response = requests.post(url, headers=headers, data=data)
    response_json = response.json()
    bearer_token = response_json.get('access_token')
    return bearer_token

bearer_token = generate_bearer_token(api_key)

# Replace the following database credentials with your own
DB_NAME = 'your_database_name'
DB_USER = 'your_username'
DB_PASSWORD = 'your_password'
DB_HOST = 'your_host'
DB_PORT = 'your_port'

def create_table():
    conn = psycopg2.connect(
        dbname=DB_NAME,
        user=DB_USER,
        password=DB_PASSWORD,
        host=DB_HOST,
        port=DB_PORT
    )
    cursor = conn.cursor()
    cursor.execute(
    '''
    CREATE TABLE IF NOT EXISTS comments (
        id SERIAL PRIMARY KEY,
        first_name TEXT,
        last_name TEXT,
        gender TEXT,
        country TEXT,
        comment_text TEXT,
        sentiment TEXT
    )
    '''
)

    conn.commit()
    cursor.close()
    conn.close()

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        try:
            first_name = request.form['first_name']
            last_name = request.form['last_name']
            gender = request.form['gender']
            country = request.form['country']
            comment_text = request.form['comment']
            insert_comment(first_name, last_name, gender, country, comment_text)
        except Exception as e:
            traceback.print_exc()
            return jsonify({'error': str(e)})
    return render_template('index.html')


def get_sentiment(review):
    url = "https://us-south.ml.cloud.ibm.com/ml/v1-beta/generation/text?version=2023-05-29"
    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'Authorization': f'Bearer {bearer_token}'
    }
    data = {
        "model_id": "ibm/mpt-7b-instruct2",
        "input": f"Classify this review as positive or negative.\\n\\nReview:\\n{review}\\n\\nClassification:\\n",
        "parameters": {
            "decoding_method": "greedy",
            "max_new_tokens": 6,
            "min_new_tokens": 0,
            "stop_sequences": [],
            "repetition_penalty": 1,
            "time_limit": 60
        },
        "project_id": PROJECT_ID
    }
    response = requests.post(url, headers=headers, json=data)
    response_json = response.json()
    generated_text = response_json.get('results')[0].get('generated_text')
    sentiment = None
    if generated_text:
        sentiment = generated_text.strip(' "')
    if sentiment.lower() in ["positive", "negative", "null"]:
        return sentiment.lower()
    return None


def insert_comment(first_name, last_name, gender, country, comment_text):
    sentiment = get_sentiment(comment_text)
    conn = psycopg2.connect(
        dbname=DB_NAME,
        user=DB_USER,
        password=DB_PASSWORD,
        host=DB_HOST,
        port=DB_PORT
    )
    cursor = conn.cursor()
    cursor.execute(
        '''
        INSERT INTO comments (first_name, last_name, gender, country, comment_text, sentiment)
        VALUES (%s, %s, %s, %s, %s, %s)
        ''',
        (first_name, last_name, gender, country, comment_text, sentiment)
    )
    conn.commit()
    cursor.close()
    conn.close()

if __name__ == '__main__':
    create_table()
    app.run()
  • Создайте папку с именем «templates» в том же каталоге, что и ваш файл Python.
  • В папке шаблонов создайте файл с именем index.html, скопируйте следующее содержимое в файл index.html и сохраните его.
<!DOCTYPE html>
<html>
<head>
    <title>Comment Form</title>
</head>
<body>
    <h1>Feedback Form</h1>
    <form method="POST" action="/">
        <label for="first_name">First Name:</label>
        <input type="text" name="first_name" id="first_name"><br>

        <label for="last_name">Last Name:</label>
        <input type="text" name="last_name" id="last_name"><br>

        <label for="gender">Gender:</label>
        <input type="text" name="gender" id="gender"><br>

        <label for="country">Country:</label>
        <input type="text" name="country" id="country"><br>

        <label for="comment">Comment:</label>
        <textarea name="comment" rows="4" cols="50"></textarea><br>
        <input type="submit" value="Submit">
    </form>
</body>
</html>
  • Из оболочки вашего компьютера перейдите в каталог, где находится файл app.py. После этого выполните следующую команду, чтобы выполнить код Python.
Python app.py
  • Если вы видите следующий вывод, откройте браузер, введите localhost:5000 и нажмите Enter.

  • В вашем браузере вы увидите следующий экран.

  • Заполните данные в форме обратной связи и нажмите отправить.
  • Когда вы нажмете «Отправить» в первый раз, будет создана таблица с «public» в качестве имени схемы и «comment» в качестве имени таблицы.
  • Получите доступ к таблице и выполните следующий запрос SQL.
SELECT * FROM public.comments
  • Вы должны увидеть свою запись с данными, которые вы указали в форме, и информацией о настроении. Например, «Положительный», «Отрицательный» или «Нулевой».

  • Теперь давайте создадим панель мониторинга в IBM Cloud Pak for Data с помощью службы Cognos Dashboard.
  • Войдите в свою учетную запись IBM Cloud Pak for Data, используя эту ссылку, чтобы создать панель мониторинга.
  • Воспользуйтесь инструкцией, приведенной в ссылке, для создания подключения к платформе.
  • Теперь создайте проект и нажмите +New Asset, чтобы добавить подключение к проекту.
  • Нажмите +Новый актив еще раз и выберите Редактор панели мониторинга. Укажите имя информационной панели и свяжите ее с Cognos Dashboard.
  • Добавьте таблицу комментариев из базы данных PostgreSQL на панель инструментов и добавьте графики. Вот ссылка для ознакомления с Cognos Dashboard.
  • Попробуйте построить что-то вроде того, что показано ниже.

Дополнительные ресурсы: