複雑ネットワーク×自然言語処理

本記事はFUN Advent Calendar 2017の14日目の記事です.

昨日は@n_atmark君でした.

自己紹介

本記事では

最近,複雑ネットワークと何かの分野を組み合わせる研究が注目されています. そこで,本記事では私の研究の話も入れつつ複雑ネットワークがどんなものかを簡単に紹介し,NLPにどう使うのかについて執筆しようと思います.

以下,常体で記述します.

複雑ネットワークとは

複雑ネットワークには2種類ある.

  • スケールフリー・ネットワーク
  • スモールワールド・ネットワーク

スケールフリー・ネットワークは次数分布がベキ則になっているネットワークである.つまり,両対数プロットをすると直線になる.例えばWikipediaでは,記事をノード,他の記事へのリンクをエッジにするとベキ則に従っていることが知られている.

一方,スモールワールド・ネットワークは六次の隔たりのように,小さい平均距離と高いクラスター性*1をもつものである.

キーワード抽出

本記事では,Wikipedia未来大の本文を解析し,キーワード抽出(名詞)を行ってみる.

{tf\cdot idf}

比較手法として,キーワード抽出によく用いられている{tf\cdot idf}を使う.今回は1つの文書しか用いないので,{idf}Wikipediaの記事全てから求めておく.以下の表は値が大きい順に並べている.

{tf} {tf\cdot idf}
1 設計 複雑系
2 領域 公立大学
3 コース 知能
4 学科 山本理顕
5 公立大学 領域
6 複雑系 設計
7 大学院 学長
8 4月 情報アーキテクチャ
9 設置 公立はこだて未来大学
10 知能 学科

複雑ネットワーク

さて,ここから複雑ネットワークを用いてキーワード抽出を行う.ここでは,手法について全て述べると,事前知識がかなり必要になるので簡単に述べる.

ノードは本文中にある名詞でいいのだが,エッジの張り方には工夫がいる.例えば「同一文中に含まれる名詞どうしを共起しているとみなしてエッジを張る」という方法もあるのだが,これは解析する文量によってはエッジが多すぎて解析しにくい.

そこで,Jaccard係数やSimpson係数などの共起指標の登場である(今回はJaccard係数を用いる).これを用いることにより,単語どうしの共起度合いがわかるので,値の高いものにエッジを張ることで,重要な単語どうしにのみエッジが張られる.

そうして得られた共起ネットワークに対して複雑ネットワーク的な解析を行い,ネットワークの中で貢献度(Contribution)が高いノード(名詞)をキーワードとして抽出し,{idf}を掛けてみる.結果は以下のようになった.

{Contribution} {Contribution\cdot idf}
1 システム システム
2 設計 設計
3 学科 学科
4 領域 領域
5 コース 複雑系
6 複雑系 コース
7 知能 知能
8 公立大学 公立大学
9 4月 情報アーキテクチャ
10 函館市 情報科学

選定された名詞は{tf\cdot idf}と比べて良い感じに見えるが,劇的に変わったようには見えない.すると「わざわざ共起ネットワークなんて作らなくてもいいじゃん!計算量も多いし!」っていう話になる.

このキーワード抽出法が{tf\cdot idf}よりも優れている点は,複数文書に対応可能であることである.{tf\cdot idf}は''その文書''のキーワードを抽出する技術なので,複数文書ではそのまま適用できない.

一方,共起ネットワークを作る手法では,Jaccard係数などの共起指標を用いているので,文書が増えれば増えるほど,単語Aと単語Bがどの程度共起するのかが分かってくる.経験としては,共起ネットワークを使った場合は一般的な単語が抽出され,当然であるが{tf\cdot idf}は専門用語が抽出されやすい.

おわりに

複雑ネットワークと自然言語処理をどう組み合わせるのかについて執筆しました.詳しい手法について説明していないのはご容赦願います.こういうことやってるんだよ〜という話がしたかっただけです.
複雑ネットワークに興味が出ましたら,何かの分野と掛け合わせてみると面白い結果が出てくると思います.

明日はTwitterをやめたらしい@ejo090さんです

*1:ネットワークの密な度合い