公開日: 2024 年 5 月 16 日
肯定的なレビューと否定的なレビューは、購入者の購入決定に役立ちます。
外部調査によると、オンライン ショッピングをする人の 82% が、購入前に否定的なレビューを積極的に探しています。否定的なレビューは、返品率の削減やメーカーによる製品の改善に役立つため、顧客と企業の両方にとって有益です。
レビューの質を高める方法はいくつかあります。
- レビューが送信される前に、有害なコンテンツが含まれていないか確認します。ユーザーに不快な言葉や役に立たないコメントを削除するよう促すことで、他のユーザーがより適切な購入決定を下せるようにします。
- 否定的なレビュー: このバッグは最悪です。嫌いです。
- 役に立つフィードバックを含む否定的なレビュー ファスナーが非常に硬く、素材が安っぽく感じます。このバッグは返品しました。
- レビューで使用されている言語に基づいて、評価を自動生成します。
- レビューが否定的か肯定的かを判断します。
最終的に、ユーザーが商品の評価を決定する必要があります。
次の Codelab では、クライアントサイドのソリューション(オンデバイスとブラウザ)について説明します。AI 開発の知識、サーバー、API キーは必要ありません。
前提条件
Gemini API や OpenAI API などのソリューションを使用したサーバーサイド AI は、 多くのアプリケーションに堅牢なソリューションを提供しますが、このガイドではクライアントサイドのウェブ AI に焦点を当てます。クライアントサイド AI 推論はブラウザで行われるため、サーバーのラウンドトリップを排除してウェブユーザーのエクスペリエンスを向上させることができます。
この Codelab では、さまざまな手法を組み合わせて、クライアントサイド AI のツールボックスの内容を紹介します。
次のライブラリとモデルを使用します。
- TensforFlow.js。 TensorFlow.js は、ウェブでの推論とトレーニングの両方に使用できるオープンソースの機械学習ライブラリです。
- transformers.js。Transformers.js は、Hugging Face のウェブ AI ライブラリです。
- 評価用の Gemma 2B。Gemma は、Google が Gemini モデルの作成に使用した研究とテクノロジーに基づいて構築された、軽量なオープンモデルのファミリーです。ブラウザで Gemma を実行するには、MediaPipe の 試験運用版 LLM 推論 APIと組み合わせて使用します。
UX と安全性に関する考慮事項
最適なユーザー エクスペリエンスと安全性を確保するために、次の点を考慮する必要があります。
- ユーザーが評価を編集できるようにします。最終的に、ユーザーが商品の評価を決定する必要があります。
- 評価とレビューが自動化されていることをユーザーに明確に伝えます。
- 有害と分類されたレビューをユーザーが投稿できるようにしますが、サーバーで 2 回目のチェックを行います。これにより、有害でないレビューが誤って有害と分類される(誤検出)という不満な事態を防ぐことができます。また、悪意のあるユーザーがクライアントサイドのチェックを回避した場合にも対応できます。
- クライアントサイドの有害性チェックは便利ですが、回避される可能性があります。サーバーサイドでもチェックを実行してください。
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 で感情を判断する
専用のパイプラインを使用して感情分析 タスク を設定します。 パイプラインを初めて使用すると、モデルがダウンロードされてキャッシュに保存されます。 その後、感情分析は大幅に高速化されます。
レビューを非同期で分類します。カスタムのしきい値を使用して、アプリケーションで使用できると判断する信頼度レベルを設定します。
次に例を示します。
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 推論 API を使用すると、大規模言語モデル(LLM)をブラウザ内で完全に実行できます。
この新機能は、LLM のメモリとコンピューティングの需要がクライアントサイド モデルの 100 倍以上であることを考えると、特に革新的です。新しいオペレーション、量子化、キャッシュ、重み共有など、ウェブスタック全体で最適化が行われています。 出典: 「MediaPipe と TensorFlow Lite を使用したオンデバイス大規模言語モデル」。
- MediaPipe LLM 推論 API を インストールしてインポートします。
- モデルをダウンロードします。 ここでは、Kaggle からダウンロードした Gemma 2B を使用します。Gemma 2B は、Google のオープンウェイト モデルの中で最も小さいモデルです。
FilesetResolverを使用して、コードを適切なモデルファイルに指定します。生成 AI モデルでは、アセットのディレクトリ構造が特定されている場合があるため、これは重要です。- MediaPipe の LLM インターフェースを使用してモデルを読み込んで構成します。モデルを使用できるように準備します。モデルの場所、推奨されるレスポンスの長さ、Temperature による推奨される創造性のレベルを指定します。
- モデルにプロンプトを指定します(例を参照)。
- モデルのレスポンスを待ちます。
- 評価を解析します。モデルのレスポンスから評価を抽出します。
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`;
要点
AI/ML の専門知識は不要です 。プロンプトの設計には反復が必要ですが、コードの残りの部分は標準的なウェブ開発です。
クライアントサイド モデルはかなり正確です 。このドキュメントのスニペットを実行すると、有害性分析と感情分析の両方で正確な結果が得られます。Gemma の評価は、テストしたいくつかの参照レビューで、Gemini モデルの評価とほぼ一致しました。その精度を検証するには、さらにテストが必要です。
ただし、Gemma 2B のプロンプトの設計には手間がかかります。Gemma 2B は小規模な LLM であるため、満足のいく結果を得るには詳細なプロンプトが必要です。特に、Gemini API で必要なプロンプトよりも詳細なプロンプトが必要です。
推論は非常に高速です 。このドキュメントのスニペットを実行すると、多くのデバイスで推論が高速になり、サーバーのラウンドトリップよりも高速になる可能性があることがわかります。ただし、推論速度は大きく異なる場合があります。ターゲット デバイスでの徹底的なベンチマークが必要です。WebGPU、WebAssembly、ライブラリのアップデートにより、ブラウザの推論はさらに高速化されると予想されます。 たとえば、Transformers.js では v3 で Web GPU のサポートが追加され、 オンデバイス推論を大幅に高速化できます。
ダウンロード サイズが非常に大きくなる可能性があります。 ブラウザでの推論は高速ですが、AI モデルの読み込みは難しい場合があります。ブラウザ内 AI を実行するには、通常、ライブラリとモデルの両方が必要であり、ウェブアプリのダウンロード サイズが増加します。
Tensorflow 有害性モデル(従来の自然言語処理モデル)は数キロバイトにすぎませんが、Transformers.js のデフォルトの感情分析モデルなどの生成 AI モデルは 60 MB に達します。Gemma などの大規模言語モデルは 1.3 GB になることもあります。これは、最適なパフォーマンスに推奨されるサイズよりもはるかに大きい、ウェブページのサイズの中央値である median 2.2 MB をはるかに超えています。クライアントサイドの生成 AI は、特定のシナリオで実現可能です。
ウェブ上の生成 AI の分野は急速に進化しています。今後、より小型で ウェブに最適化されたモデルが 登場すると予想されます 。
次のステップ
Chrome では、ブラウザで生成 AI を実行する別の方法を試験運用しています。 早期プレビュー プログラムに登録 してテストできます。