긍정적인 리뷰와 부정적인 리뷰는 구매자의 구매 결정에 영향을 줄 수 있습니다.
외부 연구에 따르면 온라인 쇼핑객의 82% 가 구매 전에 구매 전 리뷰를 확인할 수 있어야 합니다. 이러한 부정적인 리뷰는 다음에 도움이 됩니다. 부정적인 리뷰가 있으면 도움이 될 수 있으므로 반품 비율을 낮추고 제조업체의 제품 개선을 돕습니다.
다음은 리뷰 품질을 개선할 수 있는 몇 가지 방법입니다.
- 각 리뷰를 제출하기 전에 유해성을 확인합니다. 불쾌감을 주는 표현과 유용하지 않은 기타 발언은 삭제하는 것이 좋습니다. 그러면 리뷰가 다른 사용자가 더 나은 구매 결정을 내리는 데 도움이 됩니다.
- 부정적: 이 가방은 끔찍해서 별로예요.
- 유용한 피드백이 있지만 부정적임: 지퍼가 매우 견고하고 재질이 저렴합니다. 이 가방을 돌려줬어요.
- 리뷰에 사용된 언어를 기준으로 평점을 자동 생성합니다.
- 리뷰가 부정적인지 긍정적인지 판단합니다.
![감정과 별표 평점이 포함된 리뷰 예시의 스크린샷](https://developer.chrome.com/static/docs/ai/images/leave-a-review.png?authuser=19&hl=ko)
궁극적으로 사용자가 제품 평가에 대한 최종 의견을 제시할 수 있어야 합니다.
다음 Codelab은 브라우저에서 기기 내 솔루션을 제공합니다. AI 없음 API 키를 사용할 수 있습니다
기본 요건
솔루션 (예: Gemini API 또는 OpenAI API)는 이 가이드에서는 온디바이스 웹 AI에 중점을 둡니다. 온디바이스 웹 AI AI 모델이 브라우저에서 실행되어 웹 사용자의 경험을 개선하는 것을 말합니다. 서버 왕복 없이 비용을 절감할 수 있습니다
이 Codelab에서는 다양한 기법을 사용하여 도구 상자에 있는 항목을 보여줍니다. 온디바이스 웹 AI를 개발합니다
Google에서는 다음과 같은 라이브러리와 모델을 사용합니다.
- TensforFlow.js: 독성 분석 TensorFlow.js는 웹에서 추론 및 학습을 위한 오픈소스 머신러닝 라이브러리입니다.
- transformers.js 사용 Transformers.js는 Hugging Face의 웹 AI 라이브러리입니다.
- 별표 평점: Gemma 2B Gemma는 Google이 Gemini 모델을 만드는 데 사용한 연구와 기술을 바탕으로 구축된 경량 개방형 모델 제품군입니다. 브라우저에서 Gemma를 실행하기 위해 MediaPipe의 실험용 LLM Inference API와 함께 사용합니다.
UX 및 안전 고려사항
최적의 사용자 환경과 안전을 보장하기 위해 고려해야 할 몇 가지 사항이 있습니다.
- 사용자가 평점을 수정할 수 있도록 허용합니다. 궁극적으로 사용자가 최종 제품 평가에 도움이 됩니다.
- 평점 및 리뷰가 자동화되어 있음을 사용자에게 분명히 알립니다.
- 사용자가 악의적으로 분류된 리뷰를 게시할 수 있도록 허용하지만, 2차 검사를 실행함 있습니다. 이렇게 하면 악의적이지 않은 리뷰로 인해 불편을 겪는 일을 방지할 수 있습니다. 독성 (거짓양성)으로 잘못 분류되었습니다. 여기에는 악성 사용자가 클라이언트 측 검사를 우회하는 경우
- 클라이언트 측 유해성 검사는 유용하지만 우회할 수 있습니다. 서버 측에서 확인을 실행할 수도 있습니다
TensorFlow.js로 유해성 분석
TensorFlow.js를 사용하여 사용자 리뷰의 유해성을 빠르게 분석할 수 있습니다.
- 설치 및 import 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의 컴퓨팅 수요는 100배가 넘으며 잘 작동합니다. 온디바이스 스택 전반에 걸친 최적화는 새로운 작업, 양자화, 캐싱, 가중치 공유를 포함하여 가능합니다. 출처: 'Large Language Models On-Device with MediaPipe and TensorFlow Lite'(MediaPipe와 TensorFlow Lite가 있는 기기 내)
- 설치 및 가져오기 MediaPipe LLM 추론 API를 사용하는 것이 좋습니다
- 모델을 다운로드합니다. 여기서는 Gemma 2B를 사용합니다. Kaggle에서 다운로드 Gemma 2B는 Google의 개방형 가중치 모델 중 가장 작은 모델입니다.
FilesetResolver
를 사용하여 코드가 올바른 모델 파일을 가리키도록 지정합니다. 이것은 생성형 AI 모델에 특정 디렉터리 구조가 있을 수 있기 때문에 중요합니다. 확인할 수 있습니다- MediaPipe의 LLM 인터페이스로 모델을 로드하고 구성합니다. 필요한 모델 위치, 선호 응답 길이 지정 창의력을 마음껏 발휘할 수 있습니다.
- 모델에 프롬프트를 입력합니다 (예시 참조).
- 모델의 응답을 기다립니다.
- 평점 파싱: 모델의 응답에서 별표 평점을 추출합니다.
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는 특히 만족스러운 결과를 얻으려면 자세한 프롬프트가 필요합니다. Gemini API에서 필요한 것보다 더 자세한 정보를 얻을 수 있습니다
유추 속도는 매우 빠를 수 있습니다. 이 문서의 스니펫을 실행하면 추론은 서버보다 잠재적으로 더 빠를 수 있음을 관찰해야 합니다. 여러 기기에서의 응답 시간을 확인할 수 있습니다 하지만 추론 속도는 경우에 따라 크게 향상되었습니다. 대상 기기에서 철저한 벤치마킹이 필요합니다. 기기 내 예상 추론을 통해 웹 GPU, WebAssembly 및 라이브러리 업데이트로 계속 속도를 향상할 수 있습니다. 예를 들어 Transformers.js는 v3의 웹 GPU 지원 기기 내 추론 속도를 크게 향상할 수 있습니다.
다운로드 크기가 매우 클 수 있습니다. 브라우저에서 추론은 빠르지만 AI 모델을 로드하는 것이 어려울 수 있습니다 브라우저 내 AI를 실행하려면 일반적으로 에는 웹 앱의 다운로드 크기에 추가되는 라이브러리와 모델이 모두 필요합니다.
TensorFlow 유해성 모델 (기존의 자연어 처리 모델)은 Transformers.js의 기본값과 같은 생성형 AI 모델은 감정 분석 모델이 60MB에 달합니다 Gemma와 같은 대규모 언어 모델은 최대 1.3GB의 용량을 제공합니다 중앙값을 초과합니다. 2.2MB의 웹페이지 크기: 최상의 성능을 위해 권장되는 것보다 훨씬 더 큽니다. 온디바이스 생성형 AI는 특정 시나리오에서 실행 가능합니다.
웹의 생성형 AI 분야는 빠르게 발전하고 있습니다. 더 작게, 웹 최적화 모델은 새롭게 등장할 것으로 예상되는 있습니다.
다음 단계
Chrome은 브라우저에서 생성형 AI를 실행하는 다른 방법을 실험하고 있습니다. 사전 체험판 프로그램에 가입할 수 있습니다. 테스트할 수 있습니다.