Опубликовано: 16 мая 2024 г.
Положительные и отрицательные отзывы могут повлиять на решение покупателя о покупке.
По данным внешних исследований, 82% онлайн-покупателей активно ищут негативные отзывы перед совершением покупки. Эти отрицательные отзывы полезны для клиентов и бизнеса, поскольку наличие отрицательных отзывов может помочь снизить процент возвратов и помочь производителям улучшить свою продукцию.
Вот несколько способов улучшить качество обзора:
- Проверяйте каждый отзыв на токсичность перед его отправкой. Мы могли бы рекомендовать пользователям удалять оскорбительные выражения, а также другие бесполезные замечания, чтобы их отзывы лучше помогали другим пользователям принять более правильное решение о покупке.
- Минусы : Эта сумка отстой, и я ее ненавижу.
- Отрицательный и полезный отзыв. Молнии очень жесткие, а материал кажется дешевым. Я вернул эту сумку.
- Автоматическое создание рейтинга на основе языка, используемого в обзоре.
- Определите, является ли отзыв отрицательным или положительным.
В конечном итоге последнее слово в оценке продукта должно остаться за пользователем.
Следующая лаборатория кода предлагает решения на стороне клиента, на устройстве и в браузере. Никаких знаний в области разработки искусственного интеллекта, серверов или ключей API не требуется.
Предварительные условия
Хотя серверный ИИ с решениями (такими как Gemini API или OpenAI API ) предлагает надежные решения для многих приложений, в этом руководстве мы сосредоточимся на клиентском веб-ИИ. Вывод искусственного интеллекта на стороне клиента происходит в браузере, чтобы улучшить работу веб-пользователей за счет устранения обращений к серверу.
В этой кодовой лаборатории мы используем сочетание методов, чтобы показать вам, что есть в вашем наборе инструментов для ИИ на стороне клиента.
Мы используем следующие библиотеки и модели:
- TensforFlow.js для анализа токсичности. TensorFlow.js — это библиотека машинного обучения с открытым исходным кодом, предназначенная как для вывода, так и для обучения в Интернете.
- Transformers.js для анализа настроений. Transformers.js — это веб-библиотека искусственного интеллекта от Hugging Face.
- Джемма 2B за звездный рейтинг. Gemma — это семейство легких открытых моделей, созданных на основе исследований и технологий, которые Google использовал для создания моделей Gemini. Чтобы запустить Gemma в браузере, мы используем его с экспериментальным API-интерфейсом LLM Inference от MediaPipe.
UX и соображения безопасности
Есть несколько соображений, которые помогут обеспечить оптимальный пользовательский опыт и безопасность:
- Разрешить пользователю редактировать рейтинг. В конечном итоге последнее слово в оценке продукта должно остаться за пользователем.
- Дайте понять пользователю, что рейтинг и отзывы автоматизированы.
- Разрешите пользователям публиковать обзоры, классифицированные как токсичные, но запустите повторную проверку на сервере. Это предотвращает неприятные ситуации, когда нетоксичный отзыв ошибочно классифицируется как токсичный (ложноположительный результат). Сюда также входят случаи, когда злоумышленнику удается обойти проверку на стороне клиента.
- Проверка токсичности на стороне клиента полезна, но ее можно обойти. Убедитесь, что вы также выполнили проверку на стороне сервера.
Анализируйте токсичность с помощью TensorFlow.js
С помощью TensorFlow.js можно быстро начать анализировать токсичность отзывов пользователей.
- Установите и импортируйте библиотеку TensorFlow.js и модель токсичности.
- Установите минимальную достоверность прогноза. Значение по умолчанию — 0,85, а в нашем примере мы установили его на 0,9.
- Загрузите модель асинхронно.
- Классифицируйте обзор асинхронно. Наш код определяет прогнозы, превышающие порог 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
Установите и импортируйте библиотеку Transformers.js.
Настройте задачу анализа настроений с помощью выделенного конвейера . При первом использовании конвейера модель загружается и кэшируется. С этого момента анализ настроений должен выполняться намного быстрее.
Классифицируйте обзор асинхронно. Используйте собственный порог, чтобы установить уровень достоверности, который вы считаете пригодным для вашего приложения.
Например:
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.
С помощью LLM Inference API вы можете запускать большие языковые модели (LLM) полностью в браузере.
Эта новая возможность особенно революционна, учитывая требования LLM к памяти и вычислениям, которые более чем в сто раз превышают потребности клиентских моделей. Это становится возможным благодаря оптимизации веб-стека, включая новые операции, квантование, кэширование и распределение веса. Источник: «Большие языковые модели на устройстве с помощью MediaPipe и TensorFlow Lite» .
- Установите и импортируйте API вывода MediaPipe LLM.
- Загрузите модель . Здесь мы используем Gemma 2B , скачанную с Kaggle . Gemma 2B — самая маленькая из моделей Google с открытым весом.
- Укажите код на нужные файлы модели с помощью
FilesetResolver
. Это важно, поскольку генеративные модели ИИ могут иметь определенную структуру каталогов для своих активов. - Загрузите и настройте модель с помощью интерфейса LLM MediaPipe. Подготовьте модель к использованию: укажите местоположение ее модели, предпочтительную длину ответов и предпочтительный уровень креативности с температурой.
- Дайте модели подсказку ( см. пример ).
- Ждем ответа модели.
- Анализ рейтинга: извлеките звездный рейтинг из ответа модели.
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 в нескольких проверенных эталонных обзорах. Чтобы подтвердить эту точность, необходимы дополнительные испытания.
Тем не менее, разработка подсказки для «Джеммы 2B» требует работы. Поскольку Gemma 2B — это небольшая программа LLM, для получения удовлетворительных результатов ей требуется подробное приглашение — значительно более подробное, чем то, что требуется для Gemini API.
Вывод может быть молниеносным . Если вы запустите фрагменты из этого документа, вы заметите, что вывод может выполняться быстрее, потенциально быстрее, чем обращение к серверу, на ряде устройств. Тем не менее, скорость вывода может сильно различаться. Требуется тщательное тестирование на целевых устройствах. Мы ожидаем, что вывод браузера будет становиться быстрее благодаря обновлениям WebGPU, WebAssembly и библиотек. Например, Transformers.js добавляет поддержку веб-графического процессора в версии 3 , что может многократно ускорить вывод на устройстве .
Размеры загрузки могут быть очень большими. Вывод в браузере выполняется быстро, но загрузка моделей ИИ может оказаться сложной задачей. Для реализации искусственного интеллекта в браузере вам обычно нужны и библиотека, и модель, которые увеличивают размер загрузки вашего веб-приложения.
В то время как модель токсичности Tensorflow (классическая модель обработки естественного языка) занимает всего несколько килобайт, генеративные модели искусственного интеллекта, такие как модель анализа настроений по умолчанию Transformers.js, достигают 60 МБ. Большие языковые модели, такие как Gemma, могут иметь размер до 1,3 ГБ. Это превышает средний размер веб-страницы в 2,2 МБ , что уже намного больше, чем рекомендуется для обеспечения наилучшей производительности. Генеративный ИИ на стороне клиента жизнеспособен в определенных сценариях.
Область генеративного искусственного интеллекта в сети быстро развивается! Ожидается, что в будущем появятся меньшие, оптимизированные для Интернета модели.
Следующие шаги
Chrome экспериментирует с другим способом запуска генеративного ИИ в браузере. Вы можете подписаться на программу ранней предварительной версии, чтобы протестировать ее.