AI活用編

第5章「言語編」

AI03-04

文章の意味をとらえるにはⅢ~共起ネットワークで言葉のつながりを見てみよう~

共起ネットワークとは

このスライドでは 「共起ネットワーク」について学びます

共起ネットワークの見方と 単語間の関連性を算出する方法を このスライドで確認しましょう

「共起ネットワーク」とは?

「共起ネットワーク」とは、文書の中に出現する単語同士の関連性を、視覚的に表現する技術です。

共起ネットワークは、円や線などで表現されていて、それぞれ意味があります。

上の図は スポーツに関してのアンケートの回答を テキストデータの前処理であるクリーニングを行い 「名詞」「動詞」「形容詞」を抽出したテキストデータを元に作成した共起ネットワークです

この例を見ながら 共起ネットワークの見方を学び どのようなことを表しているのか一緒に考えてみましょう



【ノード(円)の大きさ】

ノードには、文章中に出現する単語が書かれてあります。ノードの大きさは、単語の出現頻度を表し、大きいほど単語の出現回数が高くなります。

図を見ると「サッカー」「バスケットボール」「野球」などのノードが大きく表示されているので 出現頻度が高いことが分かりますね



【ノード(円)の色】

同じ色のノードは、そのノードが属するグループを示し、似た性質を持つ単語同士でグループ分けされます。

グループ分けの方法は、分析を行う目的や、算出方法などにより異なります。

水色のグループは「サッカー」 赤のグループは「バスケットボール」 みたいに 似た性質を持つ単語同士でグループ分けされてるように見えるな



【線(エッジ)】

単語が書かれてあるノード同士をつなぐエッジは、つないだ単語同士が同時に出現する、関連性が高いことを表しています。

線が太くなっている場合、つないだ単語同士の関連性が、より高いことを表しています。

紫のグループを見ると 「ラグビー」「危ない」「不安」「力強い」「魅力」などがエッジでつながれていますね

ラグビーに対して 危ないや不安などの思いがある人もいれば 力強くて魅力という風に 様々な意見があることが分かります

例えば 真ん中のノードとつながるエッジを見ると「サッカー」「選手」や「選手」「憧れる」

左の赤いグループは「バスケットボール」「身長」「高い」などが太いエッジでつながれていることが分かるな

共起ネットワークの見方について理解できましたか?

次のコラムでは共起ネットワークを作成する際の 単語同士の関連性の算出方法について説明します

少し難しく感じるかもしれませんが 気軽な気持ちで読み進めてくださいね

【コラム】共起ネットワークの作り方 ~数値化の方法~

すでに前処理のレッスンで学習した通り、テキストデータのクリーニングを行ったら、次はテキストの数値化をしてコンピュータが理解できる形式にします。

ここまでのレッスンでは、ワンホットエンコーディングやBag of Wordsによる数値化を行ってきましたが、共起ネットワークでは「共起頻度」や「Jaccard係数(じゃっかーど けいすう)」という手法で数値化を行います。


「共起頻度」や「Jaccard係数」って 難しそうな用語ですが 私でも理解できるんでしょうか…

確かに「数値化」は少し難しい部分もありますし 特に「Jaccard係数」は 数学的な思考が必要になります

ですが ここから先は「こんな風に数値化するんだ」という雰囲気をつかめればそれで問題ありません

【共起頻度による数値化】

共起頻度とは、テキスト内で2つの単語がどのくらいの頻度で一緒に出現するかを表す指標です。

例えば、単語Aと単語Bの共起頻度を計算する場合、テキスト内で単語Aと単語Bが一緒に出現する回数をカウントします。


以下の表にある「肉」「魚」を含んだ文章5件をもとに考えてみましょう。



上記のデータでは5つの文章のうち「肉」と「魚」が一緒に出現した文章は「肉、魚好き。」「魚も肉も食べたい。」の2件です。

このことから「肉」と「魚」の共起頻度は「2回」だと分かります。

このように共起頻度による数値化は、直感的に理解しやすいため、このあとのアクティビティでは、この手法を用いて数値化を行った後に、共起ネットワークを作成します。


【Jaccard係数による数値化】

今回のアクティビティでは使用しませんが、共起ネットワークの生成の際によく利用される数値化の手法に「Jaccard係数」があります。


Jaccard係数とは、ある二つの単語の集合がどれくらい似ているのか、その度合いを表すことで、単語と単語の関連性を導きだす算出方法です。

「集合」とは、その言葉の通り「集まり」を表し、データの集まりを円を使って表します。


さきほどの「肉」「魚」を含んだ文章が仮に100件に増えたとして、この「集合」について考えてみましょう。


・「肉」だけが出現した文章:60件

・「魚」だけが出現した文章:40件

・「肉」「魚」が一緒に出現した文章:10件


上記の条件を元に、「肉」と「魚」の割合を、「集合」で表すと以下のようになります。



以下の計算式で、Jaccard係数を求めることができます。


「肉」「魚」が一緒に出現した件数 ÷ (「肉」だけが出現した件数 + 「魚」だけが出現した件数 - 「肉」「魚」が一緒に出現した件数)


値を当てはめると、10件 ÷ (60件 + 40件 - 10件)=0.1111… となり、Jaccard係数は約0.1となります。


Jaccard係数の範囲は、「0」~「1」です。0に近いほど関連性が低く、1に近いほど関連性が高いことを表します。

そのため、Jaccard係数が1に近いほど、「肉」と「魚」の関連性が高いと判断することができます。


今回の値は約0.1となり、0に近い値なので「肉」と「魚」の関連性は低いことが分かります。

例えば ある単語がとても高い頻度で出現する場合 共起頻度では ある単語との関連性が過大評価されてしまう可能性がありますが Jaccard係数では 過大評価を抑えることができます

以下の例で「肉」「おいしい」と「肉」「魚」について 共起頻度とJaccard係数を求めて確認してみましょう


共起頻度だけで見れば「肉」「魚」の組み合わせの方が関連度が高いけど Jaccard係数では「肉」「おいしい」の組み合わせの方が関連度が高くなってるな

このように 共起頻度と比べると Jaccard係数は単語の出現頻度による偏りを考慮できる という利点があります

しかし どちらの方が良いのか とかいう問題ではなく 分析するテキストの特徴や 分析の目的によって どの数値化の手法を使うのか よく考えて選ぶことが大切です


Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる