2026年10月8日にscikit-learnのCountVectorizerとNetworkXの公式ドキュメントを再確認した。共起は文書、文、または定義した近接ウィンドウの単位で二語が一緒に現れることとして定義でき、CountVectorizerは語彙・前処理・トークン出現数を、NetworkXはノード・辺・属性・数値重みを扱う。共起行列やネットワークの太い辺・中心性は計算構造であり、意味の近さ、重要度、顧客の意向、因果を自動で証明しない。分母、閾値、低頻度処理、期間、形態素解析を記録して原文へ戻る。
30秒で要点
共起ネットワークは、語をノード、同じ単位での出現をエッジとして、文書のまとまりを探索します。線が太いから意味的に近い、因果がある、重要であると決める道具ではありません。
- 共起単位(文書・文・ウィンドウ)と前処理を先に固定する
- 共起行列のセルは、語の組が同じ単位に現れた回数として定義する
- 頻度、PMIなどの重み、分母、低頻度の除外を分けて記録する
- NetworkXではノード・辺・重みを明示し、配置を解釈と混同しない
- ネットワークは仮説生成に使い、原文と別データで確かめる
1. 何を一緒と数えるかを決める
「一緒に現れる」は一つの定義ではありません。
表が収まらない場合は、横にスクロールできます
| 単位 | 数えていること | 向いている問い |
|---|---|---|
| 文書 | 同じ文書に一度でも出る | 文書テーマの大きなまとまり |
| 文 | 同じ文に出る | 一文内の主題と評価 |
| ウィンドウ | kトークン以内に出る | 近接した修飾・要望 |
| 段落 | 同じ段落に出る | セクションの論点 |
文書単位で「価格」と「高い」が一度だけ共起しても、長い文書と短い文書を同じ一票にするかで解釈は変わります。対象期間、重複文書、引用文、タイトルを含めるかも台帳に残します。
2. 前処理と共起行列
scikit-learnのCountVectorizerは、文書をトークンの出現数へ変換するための設定を提供します。日本語では形態素解析器などで語を分ける方法を先に選び、表記揺れ、品詞、ストップワード、固有名詞を記録します。from collections import Counter
from itertools import combinations
docs = [
['価格', '高い', '性能'],
['価格', '性能', '十分'],
['操作', '使いやすい', '性能'],
]
cooc = Counter()
for tokens in docs:
for left, right in combinations(sorted(set(tokens)), 2):
cooc[(left, right)] += 1
print(cooc[('価格', '性能')]) # 2
この例は文書単位で同じ語を一度だけ数えています。重複回数を数える実装やウィンドウ実装へ変えたら、行列の定義と分母を更新します。
3. 頻度とPMIを分けて読む
共起数は「何件の単位で一緒に出たか」を表します。頻出語は多くの語とつながり、希少な組は少ない共起でも目立ちます。PMIを使う場合は、二語が一緒に出る確率と、それぞれが独立に出るときの確率の比の対数として、期待より強い組を探索します。
表が収まらない場合は、横にスクロールできます
| 指標 | 強み | 注意 |
|---|---|---|
| 共起数 | 件数を説明しやすい | 頻出語に引っ張られる |
| 共起率 | 文書数や窓数を分母にできる | 分母・単位の説明が必要 |
| PMI | 予想より特別な組を見つける | 低頻度の偶然が大きく見える |
| PPMI | 負の関連を0にして扱う | 0にした意味と閾値を残す |
低頻度のペアへPMIをそのまま適用せず、最低件数、平滑化、信頼性の確認を事前に決めます。数字の大小だけで「顧客が本当に連想している」とは言いません。
4. NetworkXで表現する
NetworkXの公式ドキュメントは、ノードと辺に任意の属性を持たせられ、数値データを重みとして扱えると説明します。共起数をweight属性へ置くと、描画・中心性・コミュニティ検出の入力を同じ構造で管理できます。
import networkx as nx
G = nx.Graph()
for (left, right), weight in cooc.items():
if weight >= 2:
G.add_edge(left, right, weight=weight)
for node, degree in G.degree():
print(node, degree)
weight >= 2は説明用の規則です。記事や調査ごとに、語彙数、文書数、除外件数、重み、レイアウト、乱数seedを保存します。レイアウトで近くに見えることは、統計的な意味の近さとは別です。
5. 合成ケースで原文へ戻る
合成の問い合わせ20件を、料金、操作、速度、サポートのトークンへ分けたとします。料金と高いの共起が多くても、値上げへの不満、比較検討、説明文の引用が混ざっているかもしれません。上位の辺から原文を数件読み、語の向き、否定、話者、重複を確認してから、質問票やログで仮説を確かめます。この件数は実在データではありません。
6. よくある失敗
- 文書・文・ウィンドウを混ぜ、共起数を同じ意味で比較する
- 形態素解析、表記揺れ、ストップワードの変更を記録しない
- PMIの高い低頻度ペアを、重要な顧客テーマと断定する
- ノードの大きさやレイアウトを、意味の重要度や因果と混同する
- ネットワークだけを見て原文・分母・期間を確認しない
7. 可視化で終わらせず、原文へ戻る
共起ネットワークは、前処理と単位を固定したうえで、文書の関係を探索する可視化です。頻度とPMIを分け、重み・閾値・分母を残し、上位の辺から原文へ戻って次の調査を設計します。
語の特徴量は特徴語抽出の実務入門、不確実性を含む読み方は小規模データ分析ガイドも参照してください。