Поощряйте полезные обзоры продуктов с помощью веб-ИИ на стороне клиента.

Мод Налпас
Maud Nalpas
Кенджи Баэ
Kenji Baheux
Александра Клеппер
Alexandra Klepper

Опубликовано: 16 мая 2024 г.

Положительные и отрицательные отзывы могут повлиять на решение покупателя о покупке.

Согласно внешним исследованиям, 82% онлайн-покупателей активно ищут отрицательные отзывы перед покупкой. Эти отзывы полезны как для покупателей, так и для компаний, поскольку их наличие может помочь снизить количество возвратов и помочь производителям улучшить качество своей продукции.

Вот несколько способов улучшить качество обзора:

  • Проверяйте каждый отзыв на токсичность перед публикацией. Мы могли бы призвать пользователей удалять оскорбительные высказывания и другие бесполезные комментарии, чтобы их отзывы могли помочь другим пользователям принять более взвешенное решение о покупке.
    • Минусы : Эта сумка — отстой, я ее ненавижу.
    • Отрицательный отзыв с полезными отзывами. Молнии очень тугие, а материал кажется дешёвым. Я вернул эту сумку.
  • Автоматически генерировать рейтинг на основе языка, использованного в обзоре.
  • Определите, является ли отзыв отрицательным или положительным.
Скриншот примера отзыва с комментариями и оценкой в звездах.
В этом примере комментарий рецензента получает положительную оценку и оценку в пять звезд.

В конечном счете, последнее слово в оценке продукта остается за пользователем.

В этой лабораторной работе представлены клиентские решения, работающие как на устройстве, так и в браузере. Знания в области разработки ИИ, серверов или ключей API не требуются.

Предпосылки

Хотя серверные решения на основе ИИ (такие как API Gemini или API OpenAI ) предлагают надежные решения для многих приложений, в этом руководстве мы сосредоточимся на клиентском веб-ИИ. Вывод данных на стороне клиента выполняется в браузере, что позволяет улучшить взаимодействие с веб-пользователями за счет устранения необходимости в обмене данными с сервером.

В этой лабораторной работе мы используем сочетание методов, чтобы показать вам, какой инструментарий есть в вашем арсенале для клиентского ИИ.

Мы используем следующие библиотеки и модели:

  • TensforFlow.js для анализа токсичности. TensorFlow.js — это библиотека машинного обучения с открытым исходным кодом, предназначенная как для вывода данных, так и для обучения в сети.
  • transformers.js для анализа настроений. Transformers.js — это веб-библиотека искусственного интеллекта от Hugging Face.
  • Gemma 2B для звёздных рейтингов. Gemma — это семейство лёгких открытых моделей, созданных на основе исследований и технологий, использованных Google при создании моделей Gemini. Для запуска Gemma в браузере мы используем экспериментальный API вывода LLM от MediaPipe.

UX и соображения безопасности

Чтобы обеспечить оптимальное взаимодействие с пользователем и безопасность, необходимо учитывать несколько моментов:

  • Разрешите пользователю редактировать рейтинг. В конечном счёте, последнее слово в оценке продукта должно быть за пользователем.
  • Дайте понять пользователю, что рейтинг и обзоры автоматизированы.
  • Разрешить пользователям публиковать отзывы, классифицированные как токсичные, но при этом запустить повторную проверку на сервере. Это предотвращает неприятную ситуацию, когда нетоксичный отзыв ошибочно классифицируется как токсичный (ложное срабатывание). Это также касается случаев, когда злоумышленнику удаётся обойти проверку на стороне клиента.
  • Проверка токсичности на стороне клиента полезна, но её можно обойти. Обязательно запустите проверку и на стороне сервера.

Анализ токсичности с помощью TensorFlow.js

С помощью TensorFlow.js можно быстро приступить к анализу токсичности отзывов пользователей.

  1. Установите и импортируйте библиотеку TensorFlow.js и модель токсичности.
  2. Установите минимальную достоверность прогноза. Значение по умолчанию — 0,85, а в нашем примере — 0,9.
  3. Загружайте модель асинхронно.
  4. Асинхронная классификация отзывов. Наш код определяет прогнозы, превышающие порог 0,9 для любой категории.

Эта модель позволяет классифицировать токсичность по следующим признакам: атака на личность, оскорбление, непристойность и т. д.

Например:

import * as toxicity from '@tensorflow-models/toxicity';

// Minimum prediction confidence allowed
const TOXICITY_COMMENT_THRESHOLD = 0.9;

const toxicityModel = await toxicity.load(TOXICITY_COMMENT_THRESHOLD);
const toxicityPredictions = await toxicityModel.classify([review]);
// `predictions` is an array with the raw toxicity probabilities
const isToxic = toxicityPredictions.some(
    (prediction) => prediction.results[0].match
);

Определите настроения с помощью Transformers.js

  1. Установите и импортируйте библиотеку Transformers.js.

  2. Настройте задачу анализа тональности с помощью выделенного конвейера . При первом использовании конвейера модель загружается и кэшируется. После этого анализ тональности должен выполняться значительно быстрее.

  3. Асинхронно классифицируйте обзор. Используйте настраиваемое пороговое значение, чтобы задать уровень достоверности, который вы считаете подходящим для вашего приложения.

Например:

import { pipeline } from '@xenova/transformers';

const SENTIMENT_THRESHOLD = 0.9;
// Create a pipeline (don't block rendering on this function)
const transformersjsClassifierSentiment = await pipeline(
  'sentiment-analysis'
);

// When the user finishes typing
const sentimentResult = await transformersjsClassifierSentiment(review);
const { label, score } = sentimentResult[0];
if (score > SENTIMENT_THRESHOLD) {
  // The sentiment is `label`
} else {
  // Classification is not conclusive
}

Предложите оценку в звездах с помощью Gemma и MediaPipe

С помощью API вывода LLM вы можете полностью запускать большие языковые модели (LLM) в браузере.

Эта новая возможность особенно важна, учитывая требования к памяти и вычислительным ресурсам LLM, которые более чем в сто раз превышают требования клиентских моделей. Это стало возможным благодаря оптимизации всего веб-стека, включая новые операции, квантизацию, кэширование и распределение веса. Источник: «Large Language Models On-Device with MediaPipe and TensorFlow Lite» .

  1. Установите и импортируйте API вывода MediaPipe LLM.
  2. Загрузите модель . Здесь мы используем Gemma 2B , скачанную с Kaggle . Gemma 2B — самая маленькая из моделей Google с открытым весом.
  3. Укажите коду нужные файлы модели с помощью FilesetResolver . Это важно, поскольку генеративные модели ИИ могут иметь определённую структуру каталогов для своих ресурсов.
  4. Загрузите и настройте модель с помощью интерфейса LLM MediaPipe. Подготовьте модель к использованию: укажите местоположение модели, предпочтительную длину ответов и желаемый уровень креативности в работе с температурой.
  5. Дайте модели подсказку ( см. пример ).
  6. Подождите ответа модели.
  7. Анализ рейтинга: извлечение звездного рейтинга из ответа модели.
import { FilesetResolver, LlmInference } from '@mediapipe/tasks-genai';

const mediaPipeGenAi = await FilesetResolver.forGenAiTasks();
const llmInference = await LlmInference.createFromOptions(mediaPipeGenAi, {
    baseOptions: {
        modelAssetPath: '/gemma-2b-it-gpu-int4.bin',
    },
    maxTokens: 1000,
    topK: 40,
    temperature: 0.5,
    randomSeed: 101,
});

const prompt = 
const output = await llmInference.generateResponse(prompt);

const int = /\d/;
const ratingAsString = output.match(int)[0];
rating = parseInt(ratingAsString);

Пример подсказки

const prompt = `Analyze a product review, and then based on your analysis give me the
corresponding rating (integer). The rating should be an integer between 1 and 5.
1 is the worst rating, and 5 is the best rating. A strongly dissatisfied review
that only mentions issues should have a rating of 1 (worst). A strongly
satisfied review that only mentions positives and upsides should have a rating
of 5 (best). Be opinionated. Use the full range of possible ratings (1 to 5). \n\n
  \n\n
  Here are some examples of reviews and their corresponding analyses and ratings:
  \n\n
  Review: 'Stylish and functional. Not sure how it'll handle rugged outdoor use,
  but it's perfect for urban exploring.'
  Analysis: The reviewer appreciates the product's style and basic
  functionality. They express some uncertainty about its ruggedness but overall
  find it suitable for their intended use, resulting in a positive, but not
  top-tier rating.
  Rating (integer): 4
  \n\n
  Review: 'It's a solid backpack at a decent price. Does the job, but nothing
  particularly amazing about it.'
  Analysis: This reflects an average opinion. The backpack is functional and
  fulfills its essential purpose. However, the reviewer finds it unremarkable
  and lacking any standout features deserving of higher praise.
  Rating (integer): 3
  \n\n
  Review: 'The waist belt broke on my first trip! Customer service was
  unresponsive too. Would not recommend.'
  Analysis: A serious product defect and poor customer service experience
  naturally warrants the lowest possible rating. The reviewer is extremely
  unsatisfied with both the product and the company.
  Rating (integer): 1
  \n\n
  Review: 'Love how many pockets and compartments it has. Keeps everything
  organized on long trips. Durable too!'
  Analysis: The enthusiastic review highlights specific features the user loves
  (organization and durability), indicating great satisfaction with the product.
  This justifies the highest rating.
  Rating (integer): 5
  \n\n
  Review: 'The straps are a bit flimsy, and they started digging into my
  shoulders under heavy loads.'
  Analysis: While not a totally negative review, a significant comfort issue
  leads the reviewer to rate the product poorly. The straps are a key component
  of a backpack, and their failure to perform well under load is a major flaw.
  Rating (integer): 1
  \n\n
  Now, here is the review you need to assess:
  \n
  Review: "${review}" \n`;

Еда на вынос

Опыт работы с искусственным интеллектом и машинным обучением не требуется . Разработка подсказки требует итераций, но остальная часть кода — это стандартная веб-разработка.

Клиентские модели достаточно точны . Если вы воспользуетесь фрагментами из этого документа, вы увидите, что как анализ токсичности, так и анализ тональности дают точные результаты. Рейтинги Gemma в основном совпали с рейтингами модели Gemini для нескольких протестированных референсных отзывов. Для подтверждения этой точности необходимы дополнительные исследования.

Тем не менее, разработка подсказки для Gemma 2B требует усилий. Поскольку Gemma 2B — это небольшая программа LLM, для получения удовлетворительных результатов ей нужна подробная подсказка — заметно более подробная, чем та, которая требуется для API Gemini.

Вывод может быть молниеносным . Если вы запустите фрагменты из этого документа, вы заметите, что вывод может быть быстрым, потенциально быстрее, чем циклы передачи данных между серверами, на ряде устройств. При этом скорость вывода может значительно варьироваться. Необходимы тщательные сравнительные испытания на целевых устройствах. Мы ожидаем, что вывод в браузере будет продолжать ускоряться благодаря обновлениям WebGPU, WebAssembly и библиотек. Например, в Transformers.js добавлена поддержка Web GPU в версии 3 , что может многократно ускорить вывод на устройстве .

Размеры загружаемых данных могут быть очень большими. Вывод в браузере выполняется быстро, но загрузка моделей ИИ может быть сложной задачей. Для реализации ИИ в браузере обычно требуются как библиотека, так и модель, что увеличивает размер загружаемого файла веб-приложения.

В то время как модель токсичности Tensorflow (классическая модель обработки естественного языка) занимает всего несколько килобайт, генеративные модели ИИ, такие как стандартная модель анализа настроений в Transformers.js, достигают размера 60 МБ. Большие языковые модели, такие как Gemma, могут занимать до 1,3 ГБ. Это превышает медианный размер веб-страницы в 2,2 МБ , что и так значительно превышает рекомендуемый для оптимальной производительности размер. Генеративный ИИ на стороне клиента эффективен в определённых сценариях.

Сфера генеративного ИИ в интернете стремительно развивается! Ожидается, что в будущем появятся более компактные модели, оптимизированные для интернета.

Следующие шаги

Chrome экспериментирует с новым способом запуска генеративного ИИ в браузере. Вы можете зарегистрироваться в программе раннего ознакомления, чтобы протестировать его.