# 単語クラスタリングによって文書情報を整理する手法の改良

符 家俊*1 村田 真樹*1,2 馬 青*3
*1 鳥取大学大学院 工学研究科情報エレクトロニクス専攻
*2 鳥取大学工学部付属クロス情報科学研究センター
$* 3$ 龍谷大学 先端理工学部 数理・情報科学課程
${ }^{* 1,2}\{$ m20j4046h@edu. ,murata@ \}tottori-u.ac.jp
*3 qma@math.ryukoku.ac.jp

## 1 はじめに

近年,インターネットの発展と伴い, ネット上の情報 が急速的に増えている.これらの情報を上手く利用す るために, ネット上の文書の情報を利用して, 重要な情報を表に整理する研究が考えられている.このような 研究では重要な情報を表に整理して, 重要な情報を見 やすいようにする. 作文の際に書き漏らしの部分を検出することもできる. 赤野ら [1] の研究では, 文書を単語単位で整理する. まずは人手でクラスタ数を 1000 と 決定して, Wikipedia でのデータと Word2vec を用いて， クラスタリングする. そして,このクラスタリングの結果を用いて, 電子文書に出現するクラスタの単語を該当する行と列の箇所に埋めて, 表を作る. 岡崎ら [2] の 研究では, 情報を文単位で抽出して,これらの情報をク ラスタリングする際, 自動的に最適なクラスタ数や列 の重要度を決めて, 情報を表に整理する。

岡崎ら [2] の研究では文で情報を整理するので, 単語のように細かく情報を整理することはできない。一方, 赤野ら [1] の研究では重要な列が見つからない場合がある. 本研究ではこの欠点を改善するため, 単語レ ベルで情報を抽出しつつ, 岡崎らの研究を使って, 表の 埋まり具合と情報の密集度を用いて, クラスタリング の際の最適なクラスタ数を推定して, 重要な列を自動的に選択する. 本研究での主張点は以下の 3 点である.

## 新規性

赤野ら [1] の研究は人手でクラスタ数 1000 で設定し て, 人手で重要な列を選択する. 本研究では自動でクラ スタ数を決定して, 重要度の順に列を自動的に並べ替 える.

## 有用性

赤野ら [1] の研究では人手で重要な列を選択する必要 がある. 本研究では手作業がなくても, 自動的に重要な 列を選択することができる.

## 性能

本研究で整理した表の性能を $\mathrm{F}$ 值で評価すると, 平均值は 0.82 である. 異なるデータでの実験であるが $\mathrm{F}$ 值 で赤野ら [1] の研究を評価すると, その平均値は 0.75 である.

## 2 徒来手法

赤野ら [1] の研究では文書に含まれる情報を単語ご とに分割し, 種類ごとに分類し, 表に整理する手法を提案した. 表に整理する手順を以下に示す.

## 2.1 従来手法の手順

手順 1 抽出したい事柄を決定する. Wikipedia から, 抽出 したい事柄を含む文書を抽出する.

手順 2 Wikipedia の全データを用いて, Word2vec で単語 をクラスタリングする. 各クラスタにはクラスタ 番号をふる。

手順 3 クラスタリング結果に基づく単語のクラスタを 表の列とし, 文章を表の行とし, 文書に出現するク ラスタの単語を該当する行と列の箇所に埋める。

手順 4 表の各列にある単語の頻度を求める.この頻度 を用いて, 頻度の大きい列を左の方にするように ソートする. 頻度の少ないクラスタ番号の列を削除する.

手順 5 表のソート結果を基に人手で表の列を選択する.

## 2.2 従来手法の問題点

従来手法では Wikipedia の全データを使って, 人手 でクラスタ数を 1000 に設定してクラスタリングし,こ のクラスタリングの結果と整理したい文書を比較し 表を作るので, 列の数が多すぎて単語の頻度でソート しても重要な列を選択するのが難しいという問題が ある.

## 3 提案手法

従来手法では Wikipedia 全データを使って, 人手で クラスタ数を 1000 で設定してクラスタリングする. 本研究では岡崎ら [2] の研究を使って, 表の埋まり具合 と情報の密集度のバランスを最適にする方法でクラス 久数を推定し,クラスタリングする. 赤野ら [1] の研究 では人手で重要な列を選択する. 本研究では岡崎ら [2] が提案した情報を自動的に重要度で整理する方法を 使って, 文書中の重要な単語レベルの情報を自動的に 選択し, 表に整理する. 提案手法の手順を以下に示す.

## 3.1 提案手法の手順

複数文書に含まれる単語の情報を表に整理する手順 を以下に示す。

手順 1 文書に含まれる単語を MeCabで分割して, 品詞 が名詞かつ連続している単語を一つの単語として 扱う.このような単語は連続単語と呼ぶ. 名詞では ない単語を削除する。

手順 2 各文について, 文中の単語のベクトルを求め, 連続単語のベクトルはこの連続単語に含まれる単一 の単語のベクトルの和をこの連続単語のベクトル とする.

手順 3 単語ベクトルを基に単語を Ward 法による階層ク ラスタリングでクラスタリングする.

手順 4 階層クラスタリングによって得られた各クラス タ数でのクラスタリング結果を基に, 表を作る. 表 の埋まり具合と情報の密集度を使って, 最適なク ラスタ数を推定し, 最適な表を選択する。

手順 5 手順 4 で採用されたクラスタ数でのクラスタリ ングの結果を, 行を文書, 列をクラスタとする, 表 に整理する。

手順 6 表の各列について, 重要度を計算して, 重要度で 並べ替える。

## 3.2 文から単語への分割方法

手順 1 における複数文書を単語単位に分割する方法を説明する．文書を MeCabで単語ごとに分割する。例えば「本体の前後に 400 万画素 CMOS センサー内蔵カメラをそれぞれ搭載し、全方位撮影できるモデ ル。」のような文が存在する．この文を MeCabで分割 すると「本体の前後に 400 万 画素 CMOS セン サー内蔵カメラをそれぞれ搭載し、全方位撮影 できる モデル。」になるが, 分割しすぎる場合が
ある. 例えば「400」と「万」である.この問題を解決 するため連続した名詞を一つの名詞として扱う.この 方法で文を処理すると「本体 の 前後に 400 万画素 CMOS センサー内蔵カメラをそれぞれ搭載し、全 方位撮影 できるモデル。」となる. その後で, 名詞 ではない単語を全部削除する. 以下に手順を示す. 図 1 に例を示す.

手順 1 文を MeCabを用いて分割する。

手順 2 連続の名詞を一つの名詞として扱う.

手順 3 名詞ではない単語を削除する.

処理前

本体の前後に 400 万画素 CMOS センサー内蔵カメラを それぞれ搭載し、全方位撮影できるモデル。

分割して名詞のみ抽出

本体 前後 400 万画素 CMOS センサー内藏カメラそ れぞれ 搭載 方位撮影 モデル

図 1 処理結果の例

## 3.3 単語ベクトルの計算

連続の名詞を一つの名詞として扱うので, 連続の名詞ではない単語はそのまま Fasttext[3] を用いて, 単語 ベクトルを計算する. 連続名詞の場合では以下の手順 で単語ベクトルを計算する。

手順 1 連続の単語を $\mathrm{MeCab}$ で分割する。

手順 2 分割した単語を Fasttext[3] で単語ベクトルを求 める. 連続単語に含まれる単語のベクトルの和を その連続単語のベクトルとして扱う。

## 3.4 単語ベクトルモデル

単語ベクトルを求めるとき使ったモデルは Fasttext[3] によって Wikipedia 全データを学習させた ものである. Fasttext[3] は隠扎層と出力層からなる 2 層のニューラルネットワークで, CBOW や Skip-gram を用いて, 単語をベクトル化する。

## 3.5Ward 法による階層クラスタリング

階層クラスタリング [4] は最初一つのデータを一つ のクラスタとして扱う.そして距離が最も近いクラス タを統合する.この統合をそのまま設定したクラスタ 数になるまで繰り返す. Ward 法は二つのクラスタ間の 距離を推定する方法の一つである.

## 3.6 クラスタリング結果の score の計算方法

から求める. 情報の密集度 (density $k$ )を式 (2) からそれ ぞれ求める.クラスタ数 $\mathrm{k}$ での score $_{k}$ はこの 2 つの値 を掛け算して求めた值である.これらの数式に現れる 変数について説明する. $\mathrm{C}_{k}$ はクラスタ数 $\mathrm{k} て ゙ の$ 表で列 の総数である. $\mathrm{C}_{k i}$ はクラスタ数 $\mathrm{k}$ での表に $\mathrm{i}$ 番目の列 に含まれる単語の数である. $\mathrm{W}_{k i j}$ はクラスタ数 $\mathrm{k}$ での 表の $\mathrm{i}$ 番目の列で $\mathrm{j}$ 番目の単語のベクトルである. 単語の間の類似度は $\cos$ 類似度で求める。

$
\begin{gathered}
\text { cover }_{k}=\frac{\text { クラスタ数 } k \text { での表の空でないセルの数 }}{\text { クラスタ数 } k \text { での表のセルの総数 }} \\
\text { density }_{k}=\min \left(\cos \left(W_{k i j}, W_{k i h}\right)\right) \\
i=1,2, \ldots \ldots, C_{k} \quad j, h=1, \ldots \ldots, C_{k i}
\end{gathered}
$

ここで, cover と density のスケールが異なるため,ク ラスタ数 $\mathrm{k} て ゙ の$ 表の score を計算するとき影響を与え ないように,この二つの値の正規化した値を掛け算し たものをクラスタ数 $\mathrm{k}$ での表の score として扱う. そし て score が最も大きいクラスタリング結果を選択する.数式にある $\max (\mathrm{x}), \min (\mathrm{x})$ は $\mathrm{x}$ の最大值, 最小値を意味 する.

$
\begin{aligned}
& \text { norm }\left(\text { cover }_{k}\right)=\frac{\text { cover }_{k}-\min (\text { Cover })}{\max (\text { Cover })-\min (\text { Cover })}
\end{aligned}
$

$
\begin{aligned}
& \operatorname{score}_{k}=\operatorname{norm}\left(\text { cover }_{k}\right) * \operatorname{norm}\left(\text { density }_{k}\right)
\end{aligned}
$

## 3.7 列に重要度をつける方法

列の重要度の計算は score の計算と似ている. 列の 密集度と列のカバー率を掛け算した值をその列の重要度として扱う. 列の密集度は実際その列にある単語間 の最小類似度である.この値が高いほど, 列にある単語 の関連性が高い.この列の関連性と列のカバー率を掛 け算した結果の値が大きいと,この列の重要度も高い と思われる.数式は以下で示す.

$
\begin{gathered}
\text { cover }_{i}=\frac{\text { 表の } i \text { 番目の列の空でないセルの数 }}{\text { 表の } i \text { 番目の列のセルの総数 }} \\
\text { density }_{i}=\min \left(\cos \left(W_{i j}, W_{i h}\right)\right) \\
i=1,2, \ldots \ldots, C \quad j, h=1, \ldots \ldots, C_{i}
\end{gathered}
$
再現率 $=\frac{\text { 正解の表の列と実験結果の表の列に共通する文の数 }}{\text { 正解の表の列に含まれる文の数 }}$

$
F \text { 值 }=\frac{2 \times \text { 適合率 } \times \text { 再現率 }}{\text { 適合率 再現率 }}
$

列の重要度を評価することも重要なことである. 強盗 に関する記事で作成した表の最初の 48 列を人手で重要かどうかを評価した結果を表 5 に示す. 列名は列に 出現する頻度が最も高い単語とする。

表 3 強盗に関する記事の評価結果の精度

表 4 城に関する評価結果の精度

## 4.4 考察

表 3,4 のように, 強盗に関する記事の中で加害者, 被害者, 犯罪時間, 犯罪場所, 犯罪者の特徵などの重要な 情報を抽出できた。これらの情報の重要度が高いと思 われる. 城に関する記事の中で城の場所, 城が建てられ る時間などを抽出できたが, 有益ではない情報（例え ば, 指定, 国など）も多く抽出された. 有益ではない情報が抽出された原因はこれらの単語は何も有用な情報 を持っていないが, 出現する頻度か高かったからであ る. 強盗に関する事件で, 抽出された情報が重要かど うかを人手で評価した結果を表 5 に示す. 人手で重要 と判断したものに○を, 重要でないと判断したものに
×をつけている.列の重要度が高いほど, 重要と思わ れる確率が高いと見える. 表 5 を見ると, 最初の 48 列 について 12 列ごとに人が重要と思う列の比率を計算

果を見ると, 重要度が高いほど, 人が重要と思う比率 も高いことが確認できるが, 城に関する記事を使って，得られた表の列は少ないので, 8 列ごとに計算すると， 0.375,0.375,0.142,0.285である. 重要順になっていない.

## 5 終わりに

本研究の提案手法では文を単語レベルで分割して,名詞だけ残して, Fasttext を用いて, 単語をべクトル化 して, 階層クラスタリングを用いて, 表のカバー率と密集度のバランスによって, 最適なクラスタ数を推定し て, 最適なクラスタ数で単語をクラスタリングする.ク ラスタリングした結果の表の列の重要度を計算して，重要な列を自動的に選択する. 城に関する記事と強盗 に関する記事を用いて実験を行った. $\mathrm{F}$ 值で提案手法 の性能を計算すると, 平均值は 0.82 であった. 提案手法ではクラスタ数を自動的に推定することができる. さらに, 自動的に重要な列を選択することができる. 実験結果では列の重要度が高いほど, 人が重要と思う比率が高いことを強盗に関する記事を使った実験で確認 し, 提案手法の有効性を確認できた. 城に関する記事で の実験では抽出された列が少なく, 一部の結果は重要順になっていないという問題がある.これは今後の課題である.

## 参考文献

[1]Hokuto Akano, Masaki Murata, and Qing Ma. Detection of inadequate descriptions in Wikipedia using information extraction based on word clustering. IFSA-SCIS 2017, pp. 1-6, 2017.

[2]岡崎健介, 村田真樹, 馬青. 複数文書からの文レベルの情報の書き漏らしの検出. 言語処理学会第 25 回年次大会,
pp. 359-362, 2019.

[3]Piotr Bojanowski, Edouard Grave, Armand Joulin, and Tomas Mikolov. Enriching word vectors with subword information. In Transactions of the Association for Computational Linguistics, Vol. 5, pp. 135-146, 2017.

[4]Trevor Hastie, Robert Tibshirani, and Jerome Friedman. The Elements of Statistical Learning. Springer, 2009.
 符 家俊*1 村田 真樹*1,2 馬 青*3 *1 鳥取大学大学院 工学研究科情報エレクトロニクス専攻 *2 鳥取大学工学部付属クロス情報科学研究センター $* 3$ 龍谷大学 先端理工学部 数理・情報科学課程 ${ }^{* 1,2}\{$ m20j4046h@edu. ,murata@ \}tottori-u.ac.jp *3 qma@math.ryukoku.ac.jp  