ToneConsistencyMetric
New Scorer API
We just released a new evals API called Scorers, with a more ergonomic API and more metadata stored for error analysis, and more flexibility to evaluate data structures. It’s fairly simple to migrate, but we will continue to support the existing Evals API.
ToneConsistencyMetric
クラスは、テキストの感情的なトーンと感情の一貫性を評価します。このクラスは2つのモードで動作できます:入力/出力ペア間のトーンを比較するか、単一のテキスト内でのトーンの安定性を分析するかです。
基本的な使い方
import { ToneConsistencyMetric } from "@mastra/evals/nlp";
const metric = new ToneConsistencyMetric();
// Compare tone between input and output
const result1 = await metric.measure(
"I love this amazing product!",
"This product is wonderful and fantastic!",
);
// Analyze tone stability in a single text
const result2 = await metric.measure(
"The service is excellent. The staff is friendly. The atmosphere is perfect.",
"", // Empty string for single-text analysis
);
console.log(result1.score); // Tone consistency score from 0-1
console.log(result2.score); // Tone stability score from 0-1
measure() のパラメーター
input:
string
トーンを分析するためのテキスト
output:
string
トーン比較のための参照テキスト(安定性分析の場合は空文字列)
戻り値
score:
number
トーンの一貫性/安定性スコア(0-1)
info:
object
詳細なトーン情報
info オブジェクト(トーン比較)
responseSentiment:
number
入力テキストのセンチメントスコア
referenceSentiment:
number
出力テキストのセンチメントスコア
difference:
number
センチメントスコア間の絶対差
info オブジェクト(トーン安定性)
avgSentiment:
number
文ごとの平均センチメントスコア
sentimentVariance:
number
文間のセンチメントの分散
スコアリングの詳細
このメトリックは、トーンパターンの分析とモード別スコアリングを通じて感情の一貫性を評価します。
スコアリングプロセス
-
トーンパターンを分析:
- 感情の特徴を抽出
- 感情スコアを算出
- トーンの変動を測定
-
モード別スコアを計算: トーンの一貫性(入力と出力):
- テキスト間の感情を比較
- 感情の差分を計算
- スコア = 1 - (感情の差分 / 最大差分)
トーンの安定性(単一入力):
- 文ごとの感情を分析
- 感情の分散を計算
- スコア = 1 - (感情の分散 / 最大分散)
最終スコア:mode_specific_score * scale
スコアの解釈
(0 から scale、デフォルトは 0-1)
- 1.0: 完全なトーンの一貫性/安定性
- 0.7-0.9: 軽微な変動を伴う強い一貫性
- 0.4-0.6: 目立つ変化を伴う中程度の一貫性
- 0.1-0.3: 大きなトーン変化を伴う低い一貫性
- 0.0: 一貫性なし ― 完全に異なるトーン
両方のモードの例
import { ToneConsistencyMetric } from "@mastra/evals/nlp";
const metric = new ToneConsistencyMetric();
// Tone Consistency Mode
const consistencyResult = await metric.measure(
"This product is fantastic and amazing!",
"The product is excellent and wonderful!",
);
// Example output:
// {
// score: 0.95,
// info: {
// responseSentiment: 0.8,
// referenceSentiment: 0.75,
// difference: 0.05
// }
// }
// Tone Stability Mode
const stabilityResult = await metric.measure(
"Great service! Friendly staff. Perfect atmosphere.",
"",
);
// Example output:
// {
// score: 0.9,
// info: {
// avgSentiment: 0.6,
// sentimentVariance: 0.1
// }
// }