イイ感じに研究が完了したので、白々しく「あらすじ」を説明した上で、提案法として開発した可視化ブラウジングツールを解説します。
あらすじ
訳あって「ゆるキャラ」に関する文書を探していました。
その結果、1件の文書を発見。
ゆるキャラ、ネクストジェネレーション独女のココロを優しく癒すゆるキャラたち。ド
アラ、ひこにゃん、せんとくんなどなど、そのクオリティの如何に関わらず、なぜか「大
ブレイク」してしまうところもゆるキャラの魅力。一度火がつけばその人気は一気に全国
区となり、関連商品は飛ぶように売れまくる。
そのゆるキャラ界で新たなスターとなりそうな 1 匹(?)こそ、ダイハツ自動車「ムー
ヴコンテ」の CM に登場している「カクカクシカジカ」だろう。コミカルな声にあわせ
「カクカクシカジカ」と軽妙な動きを見せるシカ――、といえば、一度は目にしたことも
あるはず。
(中略)
初登場は、新車ムーヴコンテが発表された 08 年 8 月の CM で、「このカクカクしたク
ルマ、いいところがシカジカ。ゆえにカクカクシカジカ」と、クルマの説明なのか、自己
紹介なのかすらも不明なセリフで登場。以降、自分がシカであるくせに、干支の牛や虎に
なるために気ぐるみを着てみたり、ムーヴコンテに搭載されている新技術の「CVT」を
「ちょっと ヴぃっくりな 低燃費」と解説するなど、ちょっとひねくれた辛口評論家という
設定を無視するかのごとく、キャラが独走を続けている。
他にも似たような文書が幾つか欲しいので、探してみます。
類似文書検索する
カクカクシカジカ.txtと内容が似ている文書を検索します。
今回は、7000件以上の文書が格納されている livedoor ニュースコーパスの文書データセットから探そうと思います。

類似文書検索には、クエリ文書との類似度が高い文書を何件か取得する方法を採用します。
検索対象の文書であることを示す用語。
この文書と類似度が高い文書を何件か検索することになります。
今回は「カクカクシカジカ.txt」がクエリ文書です。
類似度の算出にはコサイン類似度を少し改良した式を用いていますが、ここら辺の計算式は複雑なので、CiNii の論文に詳細を載せます。
とりあえずはコサイン類似度みたいなものだと思っていただければ大丈夫です。
(クエリ文書,他の文書)とのコサイン類似度を算出する方法は下記で説明しています。
実際に文書検索すると、しっかりと類似文書が検索されます。
左から順番に下記を表示しています。
- カテゴリーID
- カテゴリー名
- 文書ID
- 文書名
- 文書内容

スライドに書いてあるとおりですが、類似度が高い順に上から並べているだけなので、すごく見づらいです…
今回は100件検索しているのですが、探す気にもなりません()
そこで、上記の問題を解消し、見やすくなるように改良した研究成果を紹介します。
ネットワーク図を生成する
蜘蛛の巣みたいなネットワークを形成して、検索結果文書の全体把握を容易にしました。

〇は検索された文書を表しています。
一つだけ大きな〇がありますが、これがクエリ文書(カクカクシカジカ.txt)です。
それぞれの〇に配色を施していますが、左上のカテゴリーのいずれかに属しています。
例えば、黄色は「cm」,オレンジ色は「クルマ」,ミント色は「店」に関する文書であることを示しています。
また、各カテゴリーに属する文書数も明記しています。
例えば、cmに関する文書数は46個です。
他のカテゴリーも同様の見方をします。
今回の可視化結果から、カクカクシカジカ.txtに似ている文書Top100は、
- cm
- クルマ
- 店
- ゆるキャラ
に関連する文書であることが分かります。
特に、「ゆるキャラ」に関する文書はクエリ文書「カクカクシカジカ.txt」と近い位置にプロットされているため、上記の4カテゴリーの中で最も似ている文書群であり、その文書数は全5件であると判断できます。
実際に文書内容を確認してみます。
(全文転載は禁止されてるらしいので、他の執筆者と同様に一部のみを抜粋)

「ゆるキャラ」という観点で類似している面が強く出ています。
他にも、文書(〇)をクリックすると文書内容を閲覧できる機能がありますが、ここら辺は仕様説明にて紹介しようと思います。
生成手順
上記のネットワーク図は下記技術を用いて生成しています。
- 文書検索
- 文書分類
- グラフ理論
- ネットワーク生成
生成までの手順は4ステップです。
- 類似文書検索
- 1での検索結果文書を分類
- 2の分類結果からグラフ構築
- ネットワーク図を生成

各ステップをそれぞれ解説します。
1. 類似文書検索
冒頭で説明した検索方法です。
クエリ文書に類似している文書を100件検索します。

なお、キリがいい数字なので100件にしているだけです。
検索数に下限や上限はありません。
ただ、検索数に比例して検索時間もかかるようになります。
2. 検索結果文書の分類
検索した100件の類似文書を、カテゴリーごとに分類します。

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

スライドではネットワーク図を描画しているみたいな表現をしていますが、この段階では描画していません。
あくまで、スライドのようなネットワーク図が描画されるように、描画位置を設計するだけです。

各文書(〇)を繋ぐ線が幾つあって、どの文書と繋がっているかを示しています。
この設計書のとおりに次のステップでネットワーク図を生成することで、スライドに示したようなネットワーク図が生成されます。
グラフ構築方法は、MST法やK最近傍グラフが有名です。
今回はK最近傍グラフを用いて構築しています。
ちなみに、このグラフ構築をせずに手順4のネットワーク生成を実行すると、超微妙な可視化グラフになってしまいます。

4. ネットワーク生成
ステップ3で作成したグラフ設計書のとおりにネットワーク図を描画します。
これで、冒頭で紹介した類似文書ネットワークが完成します。

基本的にはグラフ設計書に基づいてネットワーク図を生成するのですが、
- 〇の間隔
- 線の長さ
- 配置バランス
等、重視するポイントが異なる複数の可視化手法があります。
下記手法が有名です。
- スペクトル法
- 多次元尺度法
- クロスエントロピー法
- バネモデル法
今回の可視化手法にはバネモデル法を採用しています。

仕様説明
ネットワーク図を生成する「可視化ブラウジングツール」の仕様を説明します。
初期画面
下記機能を搭載しました。
- クエリ文書アップロード
- ネットワーク生成手法
- グラフ構築手法
- 検索文書数
- 生成リクエストボタン

ロード画面
ネットワーク図の生成には10秒程の時間が必要なので、その間にロード画面を表示します。
アップロードしたクエリ文書は「なめこ」に関する文書です。

ネットワーク可視化画面
ロード画面の後に表示される画面です。
検索された類似文書をネットワーク図に変換して表示します。

カテゴリー一覧には全てのカテゴリーを列挙している訳ではなく、属するノード数が3以上であるカテゴリーのみを表示しています。
無数のカテゴリーが列挙されると返って視認性が悪くなり、 結果的に検索結果文書の全体像把握に時間が掛かってしまうからです。
ノードの機能
各文書をホバーすると、下記が表示されます。
- カテゴリーID
- カテゴリー名
- 文書ID
- 文書名
- 文書内容

ホバーとは、マウスカーソルを対象物(ノード)に重ねることです。
文書内容詳細画面
各文書をクリックすると、文書の全内容を文書詳細画面に表示します。

左側のクエリ文書は固定表示しています。
右側の検索結果文書は、他の文書をクリックすると内容も切り替わります。
このように配置することで、クエリ文書と任意の検索文書を容易に比較できます。
説明語(カテゴリーとして用いている単語)に配色を施しています。
説明語に着目することで、クエリ文書とどんな観点で似ているのか判断できます。
今回の例では、「なめこ」「シンプル」に関する話題がある文書という共通性があります。
システム構成
当ツールのシステム構成図を示します。

可視化ネットワークを描画するクライアント側では JavaScript を用い、各画面コンポーネントのレイアウト構成には formantic-UI を使用しています。
なお、アップロードされるクエリ文書の形態素解析がなされていない可能性を考慮し、事前に MeCabで形態素解析を実行してからサーバーサイド側へリクエストを送信します。
これら環境は Docker 上で構築しました。
また、可視化グラフの描画に必要なデータを生成するサーバーサイド側の実装に関しては、既存の研究で用いられていた C 言語のコードを本研究の趣旨に適する処理へ改良し、Apache 上に構築した CGI(Common GatewayInterface)を仲介する形で、ネットワーク生成に必要なデータをクライアント側へレスポンス可能な構成にしました。
まとめ
既存の文書検索システムを改良し、類似文書ネットワークを生成する可視化ブラウジングツールを開発しました。
成果自体は結構いいと思うのですが、合否を決めるのは教授なので、修論発表まではスライドや論文の作成に着手しようと思います。
来年あたりには本研究の論文が CiNii に掲載されると思うので、それまでには仕上げておきます。
ぶっちゃけウルトラ疲れたので、この研究には二度と携わりたくないです()