blog-voice-analyzer
ブログコンテンツに対してAI Voice Analyzerを実行し、AI生成のような表現パターンを検出して、改善するための具体的な修正提案を取得できます。ブログ記事を公開する前にレビューや改善を行う際に活用できます。
description の原文を見る
Run the AI Voice Analyzer on blog content to detect AI-sounding patterns and get actionable rewrite suggestions. Use when reviewing or improving blog articles before publishing.
SKILL.md 本文
ブログ音声アナライザー
NLPを使用してブログ記事のAI風パターンを分析し、公開前に執筆を改善するための診断を取得します。目標は、ほぼすべての他のブログ記事より人間らしく読める、かつGoogleの有用なコンテンツシグナルでフラグされることを避ける内容です。
ユーザーが /blog-voice-analyzer で呼び出すか、ブログ投稿のAIパターンを「確認」または「分析」するよう求められたときに起動されます。
クイックスタート
pipenv run python3 scripts/blog/ai_voice_analyzer.py <path-to-markdown-file>
このスクリプトはテキストファイル(マークダウン、プレーンテキスト)を受け入れます。分析前にフロントマター、HTML、マークダウンフォーマットを削除します。
検出内容
アナライザーは、4つのカテゴリに整理された18個の独立したチェックを実行します。各チェックは0~100でスコア化され(数値が高いほど人間らしい)、全体スコアは加重平均です。
構造パターン
| チェック | 測定対象 | AI特性 | 人間の特性 |
|---|---|---|---|
| 文の長さのばらつき | 文ごとの単語数の標準偏差 | 15~20語周辺に集中(標準偏差 < 4) | ワイルドなばらつき: 3語の短文と30語の文が混在(標準偏差 8以上) |
| 文の開き方の多様性 | 各文の最初の2トークンのPOSパターン | 40%以上が「The」または「This」で開始 | 短文、質問、接続詞、逆順、前置詞句 |
| 節の深さの多様性 | 文ごとの最大依存性木の深さ | 文全体で均一な深さ | シンプルな文と複雑にネストされた文の混在 |
| 段落サイズの多様性 | 段落単語数の変動係数 | どの段落もほぼ同じ長さ | 1行の段落と長いテキストブロックが混在 |
語彙と単語選択
| チェック | 測定対象 | AI特性 | 人間の特性 |
|---|---|---|---|
| 語彙の多様性(TTR) | コンテンツ単語のタイプ・トークン比 | 低いTTR(< 45%) — 同じ単語を繰り返す | 高いTTR、ただしシンプルな語彙を意図的に使う執筆者もいる |
| ヘッジ/フィラー句 | 約50のAIマーカー句と約35のシグナル単語に対する完全一致 | 「It's important to note」「multifaceted」「leverage」「delve」「cornerstone」 | マッチなし |
| 弱い副詞 | 「really」「very」「literally」「significantly」などの密度 | > 1%の密度 | より強い動詞で置換、または完全に削除 |
| 名詞化の密度 | -tion、-ment、-ness、-ity、-ence、-anceで終わる名詞 | > 5% — 「reduction」「transition」「consumption」(能動動詞ではなく) | < 3% — 「reduce」「shift to」「consume」を好む |
| 曖昧な動詞句 | 「contributes to」「remains a」「poses a」「provides a」「aims to」など | 1記事あたり4~6個以上 | ゼロ — 直接的な主張を使用 |
| 単語の繰り返し | 予想される頻度を超えるコンテンツ単語(トピック単語はより高いしきい値) | 300語中「Substantial」が4回 | トピック単語は自然に繰り返されるかもしれない; 非トピック単語はバリエーション豊か |
声とパーソナリティ
| チェック | 測定対象 | AI特性 | 人間の特性 |
|---|---|---|---|
| 個人的な声 | 一人称(「I」「we」)、二人称(「you」)、短縮形(「don't」「it's」) | 3つすべてがゼロ | 意見には一人称、エンゲージメントには二人称、温かみのために短縮形 |
| 質問 | ?で終わる文 | ゼロの質問 — 純粋に宣言的 | 5~10%の文が質問(修辞的または直接的) |
| 具体的な詳細(NER) | 固有表現: 人物、場所、日付、数字、組織 | ゼロ — すべて抽象的で一般的 | 名前、日付、数字、実例 |
| 読みやすさレジスタ | Flesch-Kincaid学年 + 平均音節数/単語 | 学年14以上(学術的)、平均音節数 > 1.8 | 学年6~10(会話的)、平均音節数 < 1.6 |
マイクロパターン
| チェック | 測定対象 | AI特性 | 人間の特性 |
|---|---|---|---|
| 受動態 | 依存性ラベル nsubjpass / auxpass | 文の > 15% | < 10% |
| 遷移単語の開き | 文の開始に「However」「Furthermore」「Additionally」 | > 段落あたり0.5個 | シグナル化なしでアイデアが流れる |
| 3項目リスト | 「X、Y、そしてZ」調整パターン | > 1000語あたり2個 | すべてが3つセットではない |
| ペア形容詞の決まり文句 | 依存性解析による「ADJ and ADJ」(「smooth and swift」「widespread and uniform」) | > 1000語あたり3個 | より強い単語を選ぶ |
出力の読み方
全体スコア
| 範囲 | 解釈 |
|---|---|
| 75-100 | 自然に読める。フラグされた項目の細かい調整のみ。 |
| 55-74 | AIパターンがいくつか見える。ターゲットを絞った書き直しを推奨。 |
| 35-54 | 明らかなAI音声。大幅な書き直しが必要。 |
| 0-34 | AI生成の可能性が高い。完全な書き直しを推奨。 |
フラグされた文
2個以上の問題がある文のみがフラグされます(ノイズを削減)。各文にはHIGH/MED重要度のラベルと以下のような具体的な診断が付きます:
[HIGH] #13:
"The variability in charging station availability, especially in rural areas, poses a challenge..."
→ Vague verb: "poses a"
→ Nominalization-heavy (4): variability, station, availability, distance
→ Length (20w) ≈ average (21w)
これらは最初に書き直すべき文です。
優先度の高い修正
サマリーは、スコアが最も低い5つのディメンションと具体的なアクションをリストアップします。これらを順番に対処してください。
出力を使用してコンテンツを改善する方法
ステップ1: アナライザーを実行
pipenv run python3 scripts/blog/ai_voice_analyzer.py path/to/article.md
ステップ2: 優先度の高い項目から順に修正
優先度の高い修正リストを上から下へ進めます。カテゴリ別で最も影響の大きい改善:
パーソナリティのスコアが低い場合(< 70):
- 短縮形を全体に追加: 「do not」→「don't」「it is」→「it's」「you are」→「you're」
- 意見に一人称を追加: 「I find...」「In my experience...」「We've all been there」
- 読者にエンゲージするために二人称を追加: 「You know that feeling when...」
質問のスコアが低い場合(< 50):
- トピック文を質問に変換: 「Decision fatigue depletes willpower」→「Why does making too many choices drain you?」
- 読者が自分のことだと感じるような修辞疑問を追加: 「Ever notice how the simplest decisions feel impossible by 8pm?」
- セクションの最後に次のポイントへつながる質問で終わる
読みやすさのスコアが低い場合(< 70):
- ラテン語由来の単語をより短いものに置換: 「utilize」→「use」「approximately」→「about」「demonstrate」→「show」
- セミコロンとエムダッシュで長い文を分割
- 音に出して読む — 友人に言わないなら、単純化してください
名詞化のスコアが低い場合(< 70):
- すべての-tion/-ment/-ness名詞を見つけ、能動動詞に変換:
- 「The reduction of stress」→「Reducing stress」
- 「The implementation of the system」→「Implementing the system」
- 「His contribution to the project」→「He contributed to the project」
ヘッジ句が検出された場合:
- それらをすべて削除してください。すべてです。意味は加えられません:
- 「It's important to note that X」→「X」
- 「In today's fast-paced world」→ 完全に削除
- 「multifaceted」→「complex」または単に具体的なファセットを説明
曖昧な動詞が検出された場合:
- 直接的な主張に置換:
- 「X contributes to Y」→「X causes Y」または「X increases Y」
- 「X remains a significant challenge」→「X is still hard」または具体的にはなぜ
- 「X aims to achieve Y」→「X does Y」または「X tries to Y」
文のばらつきが低い場合(< 70):
- 3~5語の短い文を追加: 「That's the point.」 / 「And it works.」 / 「Here's why.」
- 段落の最も長い文を2つに分割
- 「But」または「And」で文を開始
ステップ3: 再実行して比較
pipenv run python3 scripts/blog/ai_voice_analyzer.py path/to/article-v2.md
目標: 全体スコア > 80、HIGH重要度のフラグされた文がゼロ。
ステップ4(オプション): モデルベンチマークを実行
異なるAIモデルが類似のプロンプトにどのようにパフォーマンスするかを比較するには:
pipenv run python3 scripts/blog/benchmark_models.py
これにより、モデルごとに3つの記事(Claude Sonnet、Haiku; GPT-4o、4o-mini、o3-mini)が心理学/生産性トピックで生成され、すべてスコア化されます。スクリプトの TOPICS と MODELS を編集してカスタマイズします。
既知の制限事項
アナライザーがよく捕捉するもの:
- 語彙パターン(ヘッジ句、シグナル単語、名詞化、曖昧な動詞)
- 構造的な単調性(文の長さ、開き方の繰り返し、節の深さ)
- 音声の欠如(パーソナリティがない、質問がない、短縮形がない)
- レジスタのミスマッチ(ブログコンテンツに対する学術的な学年レベル)
アナライザーが捕捉しないもの:
- セマンティック空虚さ — 文はバリエーション豊かで、ヘッジ句がないように見えても、実質的なことを言わないことがあります。このツールは、コンテンツが洞察的か一般的な定型句かを判断できません。
- セクションレベルのテンプレート構造 — トピック→説明→トピック→説明が全体を通じて繰り返されるのはAIの強いパターンですが、ツールは文と段落レベルのみを見て、セクションレベルのテンプレートは見ません。
- 決まり文句のアイデア — ツールはどう書くかをチェックし、何を書くかはチェックしません。明白なアドバイスに満ちた記事(「十分な睡眠を取る」「定期的に運動する」)は構造的には問題なくスコアされます。
- トリガー句なしの過度なヘッジング — 段落はパッセージリストの特定の句を使用することなく、優柔不断で非コミットメント的である可能性があります。
- 画像、フォーマット、レイアウト — ツールはテキストのみを分析します。
- 短いテキスト — 約300語以下の記事は、統計的尺度がボリュームを必要とするため、信頼性の低いスコアを生成します。一部のディメンション(TTR、文のばらつき)は特に短いテキストでノイズが多い。
- トピック単語のインフレーション — 単語の繰り返し検出器は、トピック単語(タイトルと最初の段落から抽出)を除外しようとしていますが、完璧ではありません。記事の主語が一般的な単語を使用している場合、それらは依然としてフラグされる可能性があります。
- スタイルと欠陥 — 意図的にシンプルな語彙を使用する(低いTTR)、質問を避ける(宣言的スタイル)、または均一なサイズの段落を書く執筆者もいます。ツールはこれらをAI出力と相関するため弱点として扱いますが、意図的なスタイル選択かもしれません。判断を使用してください。
- 偽のペア形容詞フラグ — 一部のペア形容詞は自然で効果的です(「fast and powerful」)。ツールは1000語あたりの密度しきい値を適用しますが、良い執筆もフラグできます。
ベンチマーク参考スコア
既知の人間とAIテキスト全体でのテストから:
| テキスト | スコア | 注記 |
|---|---|---|
| Paul Graham essays | 85-86 | 明確で人間らしいプロのゴールドスタンダード |
| Clarido blog post (AI生成、編集済み) | 84 | パーソナリティが備わったよく作られたAI出力 |
| Claude Haiku(デフォルトプロンプト) | 82 avg | 標準的なAIモデルで最高 |
| Claude Sonnet(デフォルトプロンプト) | 77 avg | より高い学年レベル、より多くの名詞化 |
| GPT-4o-mini(デフォルトプロンプト) | 70 avg | 低いパーソナリティ、短縮形なし |
| o3-mini(デフォルトプロンプト) | 68 avg | 短縮形なし、非人格的 |
| GPT-4o(デフォルトプロンプト) | 66 avg | 最悪のパーソナリティ、最少質問 |
| Raw ChatGPT(プロンプトなし) | 40 | すべてのディメンションで明らかなAI音声 |
公開コンテンツの目標: 80以上、HIGH重要度のフラグされた文がゼロ。
技術詳細
依存関係: spacy、textstat(Python、pipenvでインストール済み)。en_core_web_sm spaCyモデルが必要です。
スコアリング方法: 18のディメンション各々が0~100でスコア化されます。全体スコアは、パーソナリティ(0.12)、ヘッジ句(0.10)、エンティティ密度(0.08)、文のばらつき(0.08)、曖昧な動詞(0.07)が最も重み付けされた加重平均です。完全な重みテーブルは scripts/blog/ai_voice_analyzer.py の analyze() 関数にあります。
文フラグしきい値: 2個以上の同時発生する問題を持つ文のみがフラグされます。ノイズを削減するために、単一の問題を持つ文は表示されません。「長さが平均に近い」フラグは、ドキュメント全体の文の長さ標準偏差が6未満の場合のみ発動します(実際の単調性を示す)。
ファイル
| ファイル | 目的 |
|---|---|
scripts/blog/ai_voice_analyzer.py | メインアナライザー — 任意のテキストファイルで実行 |
scripts/blog/benchmark_models.py | ClaudeおよびGPTモデル全体で記事を生成とスコア化 |
tmp/benchmark/ | ベンチマーク実行からのキャッシュされた生成記事とresults.json |
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- majiayu000
- ライセンス
- MIT
- 最終更新
- 2026/5/4
Source: https://github.com/majiayu000/claude-skill-registry / ライセンス: MIT