algo-social-sentiment について
algo-social-sentimentは、モデルを学習せずにソーシャルメディアのテキストを評価するためのVADER感情分析スキルです。辞書とルールでスラング、顔文字、大文字、句読点を扱い、スコアと極性ラベルを出力します。
主な機能
- 01辞書とルールによる感情分析
- 02スラング、顔文字、強調表現への対応
- 03複合スコアと極性比率の算出
- 04閾値による極性ラベル付け
- 05結果確認とエッジケースのガイド
活用シーン
- 01ソーシャル投稿、ツイート、レビューの分析
- 02モデル学習なしでのテキスト評価
- 03複数テキストの感情分布の集計
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ asgard-ai-platform/ skills --skill algo-social-sentimentインストール後、Claude Code で/algo-social-sentimentを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
examples/sample_scenario.mdreferences/model-comparison.mdvader-rules.md詳細
VADER 感情分析
概要
VADER(Valence Aware Dictionary and sEntiment Reasoner)は、ソーシャルメディアに最適化された辞書・ルールベースの感情分析ツールです。ポジティブ、ネガティブ、ニュートラルの割合を組み合わせた複合スコア [-1, +1] を返します。テキストごとの処理時間は O(n) で、n は単語数です。トレーニングは不要です。
使用する場面
適用条件:
- ソーシャルメディアの投稿、ツイート、レビューの感情を分析する場合
- ML モデルのトレーニングなしで、手軽に感情スコアを算出する場合
- スラング、顔文字、くだけた表現を含むテキストを処理する場合
使用しない場面:
- フォーマルな文章や学術的な文章の場合(VADER はソーシャルメディア向けに調整されています)
- 特定のドメインの感情が重要な場合(例:金融関連の感情分析には FinBERT を使用してください)
- 皮肉の検出が重要な場合(VADER は皮肉を検出しません)
アルゴリズム
IRON LAW: VADER Is Designed for SOCIAL MEDIA Text
It handles slang, emoticons, capitalization, and punctuation as
sentiment modifiers. Applying it to formal documents (legal, academic,
medical) produces unreliable scores. For domain-specific text, use
domain-trained models instead.
フェーズ 1:入力の検証
テキストをトークン化します。大文字表記(すべて大文字の場合は強調)、句読点(! は強調)、顔文字/絵文字を保持します。 判定条件: テキストが空でなく、エンコーディングが正しく処理されていること。
フェーズ 2:コアアルゴリズム
- 各トークンを VADER 辞書(感情スコア付きの用語を 7,500 件以上収録)で検索します
- 文法ルールを適用します:否定(「not good」=ネガティブ)、程度を表す修飾語(「very good」>「good」)、大文字による強調、句読点による強調
- ポジティブ、ネガティブ、ニュートラルの割合について、バレンスの生スコアを計算します
- 複合スコアを計算します:次の式を使い、すべてのバレンススコアの合計を正規化します:compound = sum / √(sum² + α)。ここで α = 15 です
フェーズ 3:検証
分類します:compound ≥ 0.05 → ポジティブ、≤ -0.05 → ネガティブ、それ以外 → ニュートラル。サンプル結果を抜き取り確認します。 判定条件: 10~20 件のサンプルを手動で抜き取り確認し、分類が妥当であること。
フェーズ 4:出力
テキストごとに複合スコアと極性分類を返します。
出力形式
{
"results": [{"text": "...", "compound": 0.76, "pos": 0.45, "neu": 0.55, "neg": 0.0, "label": "positive"}],
"metadata": {"texts_analyzed": 500, "distribution": {"positive": 0.45, "neutral": 0.35, "negative": 0.20}}
}
例
入出力の例
入力: "This product is AMAZING!!! 😍" 期待値: compound ≈ 0.87(ポジティブ)。大文字、!!!、😍 の絵文字によってスコアが強調されます。
エッジケース
| 入力 | 期待値 | 理由 |
|---|---|---|
| "Not bad at all" | ややポジティブ(約 0.2) | 二重否定が部分的に処理されます |
| "😂😂😂" | ポジティブ | 絵文字は辞書に対応付けられています |
| 空文字列 | Compound = 0、ニュートラル | スコアを付けるトークンがありません |
注意点
- 皮肉は検出できません:「Oh great, another meeting」はポジティブと判定されます。VADER に皮肉の検出機能はありません。
- 否定の適用範囲:VADER は 3 語の範囲内で否定を適用します。「I do not think this is bad」では、否定の連鎖を誤って解析する場合があります。
- 絵文字の網羅性:VADER の絵文字辞書は新しい絵文字に対応していない場合があります。必要に応じて更新または補完してください。
- 言語の制限:VADER は英語専用です。中国語や日本語には、言語別のツール(中国語の場合は SnowNLP など)を使用してください。
- 複合スコアのしきい値への感度:0.05 の境界値は任意です。ユースケースや許容できる偽陽性の度合いに応じて、しきい値を調整してください。
参考資料
- VADER の辞書とルールのドキュメントについては、
references/vader-rules.mdを参照してください - Transformer ベースの感情分析モデルとの比較については、
references/model-comparison.mdを参照してください