類似文書を検索してネットワーク図を生成する

研究(修士):サムネイル画像最終 IT研究(修士)

イイ感じに研究が完了したので、白々しく「あらすじ」を説明した上で、提案法として開発した可視化ブラウジングツールを解説します。

あらすじ

訳あって「ゆるキャラ」に関する文書を探していました。

その結果、1件の文書を発見。

ゆるキャラ、ネクストジェネレーション独女のココロを優しく癒すゆるキャラたち。ド
アラ、ひこにゃん、せんとくんなどなど、そのクオリティの如何に関わらず、なぜか「大
ブレイク」してしまうところもゆるキャラの魅力。一度火がつけばその人気は一気に全国
区となり、関連商品は飛ぶように売れまくる。
そのゆるキャラ界で新たなスターとなりそうな 1 匹(?)こそ、ダイハツ自動車「ムー
ヴコンテ」の CM に登場している「カクカクシカジカ」だろう。コミカルな声にあわせ
「カクカクシカジカ」と軽妙な動きを見せるシカ――、といえば、一度は目にしたことも
あるはず。

(中略)

初登場は、新車ムーヴコンテが発表された 08 年 8 月の CM で、「このカクカクしたク
ルマ、いいところがシカジカ。ゆえにカクカクシカジカ」と、クルマの説明なのか、自己
紹介なのかすらも不明なセリフで登場。以降、自分がシカであるくせに、干支の牛や虎に
なるために気ぐるみを着てみたり、ムーヴコンテに搭載されている新技術の「CVT」を
「ちょっと ヴぃっくりな 低燃費」と解説するなど、ちょっとひねくれた辛口評論家という
設定を無視するかのごとく、キャラが独走を続けている。

他にも似たような文書が幾つか欲しいので、探してみます。

類似文書検索する

カクカクシカジカ.txtと内容が似ている文書を検索します。

今回は、7000件以上の文書が格納されている livedoor ニュースコーパスの文書データセットから探そうと思います。

類似文書検索の概要
類似文書検索の概要

類似文書検索には、クエリ文書との類似度が高い文書を何件か取得する方法を採用します。

クエリ文書とは?

検索対象の文書であることを示す用語。

この文書と類似度が高い文書を何件か検索することになります。

今回は「カクカクシカジカ.txt」がクエリ文書です。

類似度の算出にはコサイン類似度を少し改良した式を用いていますが、ここら辺の計算式は複雑なので、CiNii の論文に詳細を載せます。

とりあえずはコサイン類似度みたいなものだと思っていただければ大丈夫です。

(クエリ文書,他の文書)とのコサイン類似度を算出する方法は下記で説明しています。

実際に文書検索すると、しっかりと類似文書が検索されます。

左から順番に下記を表示しています。

  1. カテゴリーID
  2. カテゴリー名
  3. 文書ID
  4. 文書名
  5. 文書内容
類似文書を検索した結果
類似文書を検索した結果

スライドに書いてあるとおりですが、類似度が高い順に上から並べているだけなので、すごく見づらいです…

今回は100件検索しているのですが、探す気にもなりません()

せっかくイイ感じに類似文書が得られても、確認できないんじゃ元も子もないです。

ただ羅列するだけではこうなってしまうので、もっと見やすく工夫する必要があります。

そこで、上記の問題を解消し、見やすくなるように改良した研究成果を紹介します。

ネットワーク図を生成する

蜘蛛の巣みたいなネットワークを形成して、検索結果文書の全体把握を容易にしました。

可視化ネットワーク図の例
可視化ネットワーク図の例

〇は検索された文書を表しています。

一つだけ大きな〇がありますが、これがクエリ文書(カクカクシカジカ.txt)です。

それぞれの〇に配色を施していますが、左上のカテゴリーのいずれかに属しています。

例えば、黄色は「cm」,オレンジ色は「クルマ」,ミント色は「店」に関する文書であることを示しています。

また、各カテゴリーに属する文書数も明記しています。

例えば、cmに関する文書数は46個です。

他のカテゴリーも同様の見方をします。

今回の可視化結果から、カクカクシカジカ.txtに似ている文書Top100は、

  1. cm
  2. クルマ
  3. ゆるキャラ

に関連する文書であることが分かります。

特に、「ゆるキャラ」に関する文書はクエリ文書「カクカクシカジカ.txt」と近い位置にプロットされているため、上記の4カテゴリーの中で最も似ている文書群であり、その文書数は全5件であると判断できます。

実際に文書内容を確認してみます。

(全文転載は禁止されてるらしいので、他の執筆者と同様に一部のみを抜粋)

可視化ブラウジングツール:最類似文書との比較
最類似文書との比較

「ゆるキャラ」という観点で類似している面が強く出ています。

このように、2000文字以上ある膨大な長文読解に対しても高い精度を発揮するので、手作業で目を凝らしながら探すよりは何十倍も効率がいいです。

今回は長文を対象としましたが、短い文章を検索対象にしても普通に本領発揮できます。

他にも、文書(〇)をクリックすると文書内容を閲覧できる機能がありますが、ここら辺は仕様説明にて紹介しようと思います。

生成手順

上記のネットワーク図は下記技術を用いて生成しています。

  1. 文書検索
  2. 文書分類
  3. グラフ理論
  4. ネットワーク生成

生成までの手順は4ステップです。

  1. 類似文書検索
  2. 1での検索結果文書を分類
  3. 2の分類結果からグラフ構築
  4. ネットワーク図を生成
可視化ブラウジングツールの発案
可視化ブラウジングツールの発案

「ネットワーク図」だとネーミングがダサいので、論文での呼び方は「可視化ブラウジングツール」としています。

各ステップをそれぞれ解説します。

1. 類似文書検索

冒頭で説明した検索方法です。

クエリ文書に類似している文書を100件検索します。

類似文書検索の概要
類似文書検索の概要

なお、キリがいい数字なので100件にしているだけです。

検索数に下限や上限はありません。

ただ、検索数に比例して検索時間もかかるようになります。

2. 検索結果文書の分類

検索した100件の類似文書を、カテゴリーごとに分類します。

文書分類の概要
文書分類の概要

分類にはコサイン類似度を用いた教師なし学習を採用しています。

また、各分類グループに適切なカテゴリー名を付与する処理も追加しました。

3. グラフ構築

ステップ2で求めた類似度とカテゴリー情報から、ネットワーク図での配置設計をします。

グラフ構築の概要
グラフ構築の概要

スライドではネットワーク図を描画しているみたいな表現をしていますが、この段階では描画していません。

あくまで、スライドのようなネットワーク図が描画されるように、描画位置を設計するだけです。

グラフ設計書
グラフ設計書

各文書(〇)を繋ぐ線が幾つあって、どの文書と繋がっているかを示しています。

この設計書のとおりに次のステップでネットワーク図を生成することで、スライドに示したようなネットワーク図が生成されます。

グラフ構築方法は、MST法やK最近傍グラフが有名です。

今回はK最近傍グラフを用いて構築しています。

ちなみに、このグラフ構築をせずに手順4のネットワーク生成を実行すると、超微妙な可視化グラフになってしまいます。

グラフ構築をせずにネットワーク図にした失敗例
グラフ構築をせずにネットワーク図にした失敗例

4. ネットワーク生成

ステップ3で作成したグラフ設計書のとおりにネットワーク図を描画します。

これで、冒頭で紹介した類似文書ネットワークが完成します。

可視化ネットワーク図の例
可視化ネットワーク図の例

基本的にはグラフ設計書に基づいてネットワーク図を生成するのですが、

  • 〇の間隔
  • 線の長さ
  • 配置バランス

等、重視するポイントが異なる複数の可視化手法があります。

下記手法が有名です。

  1. スペクトル法
  2. 多次元尺度法
  3. クロスエントロピー法
  4. バネモデル法

今回の可視化手法にはバネモデル法を採用しています。

バネモデル法の概要
バネモデル法の概要

〇を繋ぐ線のことを「エッジ」と呼びます。

仕様説明

ネットワーク図を生成する「可視化ブラウジングツール」の仕様を説明します。

初期画面

下記機能を搭載しました。

  • クエリ文書アップロード
  • ネットワーク生成手法
  • グラフ構築手法
  • 検索文書数
  • 生成リクエストボタン
可視化ブラウジングツール:初期画面
初期画面

アップロードファイルの形式は、txt, csv, tsv を想定しています。

ロード画面

ネットワーク図の生成には10秒程の時間が必要なので、その間にロード画面を表示します。

アップロードしたクエリ文書は「なめこ」に関する文書です。

可視化ブラウジングツール:ロード画面
ロード画面

先ほどと同様、livedoor 記事は転載禁止なので、「なめこ」のクエリ文書は ChatGPT で生成しました。

ネットワーク可視化画面

ロード画面の後に表示される画面です。

検索された類似文書をネットワーク図に変換して表示します。

可視化ブラウジングツール:ネットワーク可視化画面
ネットワーク可視化画面

カテゴリー一覧には全てのカテゴリーを列挙している訳ではなく、属するノード数が3以上であるカテゴリーのみを表示しています。

無数のカテゴリーが列挙されると返って視認性が悪くなり、 結果的に検索結果文書の全体像把握に時間が掛かってしまうからです。

ノードの機能

各文書をホバーすると、下記が表示されます。

  1. カテゴリーID
  2. カテゴリー名
  3. 文書ID
  4. 文書名
  5. 文書内容
可視化ブラウジングツール:ホバー時に表示される文書概要タイル
ホバー時に表示される文書概要タイル

ホバーとは、マウスカーソルを対象物(ノード)に重ねることです。

この検索結果文書だけは ChatGPT で生成しています。

他に検索されている99件の文書はしっかり livedoor 記事です。

なお、論文では livedoor 記事のみを用いています。

文書内容詳細画面

各文書をクリックすると、文書の全内容を文書詳細画面に表示します。

可視化ブラウジングツール:クリック時に表示される文書内容詳細画面
クリック時に表示される文書内容詳細画面

左側のクエリ文書は固定表示しています。

右側の検索結果文書は、他の文書をクリックすると内容も切り替わります。

このように配置することで、クエリ文書と任意の検索文書を容易に比較できます。

説明語(カテゴリーとして用いている単語)に配色を施しています。

説明語に着目することで、クエリ文書とどんな観点で似ているのか判断できます。

今回の例では、「なめこ」「シンプル」に関する話題がある文書という共通性があります。

システム構成

当ツールのシステム構成図を示します。

可視化ブラウジングツール:システム構成図
システム構成図

可視化ネットワークを描画するクライアント側では JavaScript を用い、各画面コンポーネントのレイアウト構成には formantic-UI を使用しています。

Fomantic-UI
Fomantic-UI - The official community fork of Semantic-UI

なお、アップロードされるクエリ文書の形態素解析がなされていない可能性を考慮し、事前に MeCabで形態素解析を実行してからサーバーサイド側へリクエストを送信します。

これら環境は Docker 上で構築しました。

また、可視化グラフの描画に必要なデータを生成するサーバーサイド側の実装に関しては、既存の研究で用いられていた C 言語のコードを本研究の趣旨に適する処理へ改良し、Apache 上に構築した CGI(Common GatewayInterface)を仲介する形で、ネットワーク生成に必要なデータをクライアント側へレスポンス可能な構成にしました。

まとめ

既存の文書検索システムを改良し、類似文書ネットワークを生成する可視化ブラウジングツールを開発しました。

成果自体は結構いいと思うのですが、合否を決めるのは教授なので、修論発表まではスライドや論文の作成に着手しようと思います。

来年あたりには本研究の論文が CiNii に掲載されると思うので、それまでには仕上げておきます。

ぶっちゃけウルトラ疲れたので、この研究には二度と携わりたくないです()

タイトルとURLをコピーしました