(最後の方に、Word2Vec Word Embeddingを追加しました。)
現代の自然言語処理は、機械学習(Deep Learningを含む)が重要な役割を担っているようです。しかし、この記事は、難しいことを言うのではなく、楽しんでみようというつもりで書きます。ここでは、MATLABを使います。というのも、その最新版(R2018b)のText Analytics Toolboxでは日本語対応の機械学習機能も提供されているからです。もとのテキストの前処理や、解析結果のビジュアル化なども含んでいます。
何か実際のまとまった日本語のテキストデータを対象としたいですね。ここでは、以下のWebサイトを利用させていただきました。
植物の名前を探しやすい デジタル植物写真集(作成:渡辺 坦 氏)
http://plantidentifier.ec-net.jp
植物の名前を探し出して、その説明を見つけるためのサイトです。「大まかな特徴から細かな特徴へと段階的に見て探す」、「花の色によって探す」、「葉の形状によって探す」等々などが提供されています。豊富な写真も掲載されています。また、「植物の名前で探す」のセクションには、約2,500の植物それぞれについて、その特徴が1行で簡潔に記述されています。葉の形状や花の色などを含めて、特徴が自由形式で書かれています。JsonやXmlなどのフォーマットではなく、まさに自然言語の様式なのです。具体的には、以下のような記述が約2,500行あります。
... 前省略
ムキュウギク: ゲンペイコギク の別名
ムギワラギク: 葉は被針形で、花茎先に盛り上がった総苞片が開く。
ムクゲ: 先が3浅裂した葉が互生し、紅紫色の5弁花が咲く。
ムクノキ: 葉は長楕円形で、丸い核果が黒紫色に熟す。
ムクロジ: 偶数羽状複葉、花は黄緑色で、飴色の袋に黒い核がある。
ムサシアブミ: 3出複葉が2枚あり、あぶみ状の仏炎苞が出る。
ムシクサ: 葉は狭被針形で、葉腋に白い4弁花が単生し、蒴果がつく。
ムシトリナデシコ: 葉は長卵形で花は薄紅色で萼筒が長く花下の茎が粘る。
ムシトリビランジ: 根生葉は線形で、紅紫色で花筒の長い5弁花が咲き蒴果がつく。
ムシヨケギク: 葉は羽状に細裂し、舌状花は白く筒状花は黄色い。
ムスカリ: 葉は細長く、ブドウの房のように青く丸い花がぶら下がる。
ムツオレグサ: 淡緑色の小穂のついた枝が花茎に密着し細長い花序となる。
ムニンノボタン: 葉は長楕円形で3脈明瞭で、白い花が咲き丸い蒴果がつく。
ムベ: 葉は革質の掌状複葉で、楕円形の液果は割れない。
ムユウジュ: 羽状複葉の小葉は長楕円形で、赤橙色の花が散形状に咲く。
ムラサキ: 根は暗紫色で太く葉は被針形で、花冠の5裂した白い花が咲く。
... 後省略
MATLABのText Analytics Toolboxでこのテキスト全体を解析してみます。まず、単語の出現頻度解析です。原文を一定の前処理を行って整形したあと、形態素解析して単語を切り出し、単語をベクトル化し、と言う手順を含みます。その結果として得られた
Word Cloudが以下の図です。この結果は、単語間の相互関係には関知せず、単に単語の出現頻度の高いものを大きく表示しただけです。しかし、これだけでも、このテキスト全体の概要をよく表していると思います。
|
2,500の植物の特徴記述における単語出現状況 - Word Cloud |
上の左図からは、
「花」や「葉」や「...状」を主題として書かれたテキストであることが分かります。また、右図には、左図に項目に関する色や大きさについての形容詞が示されています。これらの図だけでも、約2,500行の文書に対するある種の要約になっていると言えるのではないでしょうか。
次に、もう一歩踏み込んで、この文書全体を解析します。
トピックモデルというやつです。難しそうですが、
LDA(Latent Dirichlet Allocation)という手法が、関数呼び出し一発で使えるようになっています。これは、文書のなかから自動的にトピックスを見つける(潜在的な意味を見つける)というものです。MATLABでは、"An LDA model discovers underlying topics in a collection of documents and infers word probabilities in topics"と書かれています。 さっそくやってみます。もちろん、トピックスのキーとなる単語などは全く指定していません。結果は以下の通りでした。(幾つかのパラメータにより変動します。)
|
LDAにより自動的に発見(抽出)された3つのトピックス |
先に示したWord Cloudで出現頻度の高かった「花」、「葉」、「...状」を中心としたトピックスが示され、それぞれを形成する単語の出現頻度(確率)が示されています。例えば、「花」と「葉」のトピックスはちょっと微妙ではありますが、花の色や葉の形状がおぼろげながら纏められているようです。また、「...状」のトピックでは、葉や枝の付き方などの状況がある程度示されているように思われます。応用としては、これらのトピックスにある値(特性を表す単語)を手がかりに、特定の植物の特徴を与えて検索することに繋がるかも知れません。
さらに奥へ進んでみます。Word2VecによるWord Embeddingです。だんだん、混沌とした未知の領域に入って行く感がありますが、可能性は感じ取れます。下図のように、形態素解析後の有効な単語(word)をベクトル空間へ埋め込みます。この場合のベクトル空間の次元は、形態素解析後の語彙の数になり、単語のベクトル成分は、その単語の周りにくる他の単語の出現確率を反映しているはずです。埋め込み結果の一例を以下に示します。(拡大してご覧下さい。)
100次元ベクトルを、t-SNEによる2次元scatteringでプロットした図なので、近くに見える単語のベクトルが必ずしも近い(良く似ている)とは言えませんが、それらのベクトルの成分(単語の出現確率)のいくつかは近いはずです。一例として、図の赤枠内にある、近くにある3つの単語に関して、その出現元の文を示します。
マルバアオダモ: 奇数羽状複葉の小葉は卵形で鋸歯不明瞭、花は白く果実は披針形。
ハマクサギ: 葉は広卵形で、花は白→淡黄と変わり、丸い核果が黒紫に熟す。
ギンバイカ: 葉は卵形で芳香があり、長い雄しべが多数ある白い5弁花が咲く。
確かに、3つの植物の葉の形状(卵形)と花の色(白)に共通的な記述がありました!とりあえずGoodですね。
これら3者の写真(Wikipediaより引用)も確認します。主観的にも、上記の結果は納得できそうです!