言語・語族データをPoincareEmbeddingsして日本語にもっとも近い語族を見つける

土曜日, 10月 19, 2019

機械学習 言語学

t f B! P L
昨日、dbpediaで遊んでいた私はオントロジーに語族(language family)があることに気づきました。

http://dbpedia.org/ontology/languageFamily

こんなマイナーな情報まで紐付いているのか!と感動。


DBpedia

DBpediaは、Linked Open Data (LOD)のひとつで、Wikipediaの情報を知識グラフ(Knowledge Graph)の形式で提供しています。

http://ja.dbpedia.org/sparql
こちらのサイトで試すと、例えばこんな感じの戻り値がきます。


langfamily
http://ja.dbpedia.org/resource/イリュリア語http://ja.dbpedia.org/resource/インド・ヨーロッパ語族
http://ja.dbpedia.org/resource/カマス語http://ja.dbpedia.org/resource/サモエード語派
http://ja.dbpedia.org/resource/官話http://ja.dbpedia.org/resource/中国語
http://ja.dbpedia.org/resource/ダルマチア語http://ja.dbpedia.org/resource/イタロ・ダルマチア語
http://ja.dbpedia.org/resource/ダルマチア語http://ja.dbpedia.org/resource/ロマンス語


みんな大好きインド・ヨーロッパ語族ですね。

SPARQLというSQLライクな言語でクエリを投げます。

select ?lang ?family where {
    <http://ja.dbpedia.org/resource/言語の一覧> <http://dbpedia.org/ontology/wikiPageWikiLink> ?lang .
    ?lang <http://dbpedia.org/ontology/languageFamily> ?family .
}

というか待てよ、このデータ構造…。

Poincare Embeddings

Word EmbeddingsのEmbeddingsですね。

sparseな離散データを、denseな連続データに変換してくれるアレです。

WEでは、単語の共起関係をユークリッド空間に埋め込みますが、Poincare Embeddingsでは、双曲空間という、ぐにゃっと歪んだ何かやばい空間に埋め込みます。

そして、双曲空間のうち、ポワンカレの円板モデルという種類のものを使うので、ポアンカレEmbeddingsというようです。

Wikipediaで画像を見てみましょう。
円状の空間で、外側にいくほどデータが密になっているのがわかります。
これがポアンカレ円板モデルの特徴です。

こういう空間にデータ点をマッピングするんだ〜というイメージができればOKです(つっこんだ解説は優秀なサイトがいっぱいあるのでそちらを見てくれ〜)。

さて、一般にEmbeddingsは、ペアデータを近づけるように、適当にとってきた2つのデータを遠ざける(ネガティブサンプリング)よう学習するので、正例のペアデータだけあれば、どんな種類のデータでもいけます。


WEの場合は、このペアデータ=共起単語ペアになります。
他にもWordNetから上位語/下位語の組をとってきてもペアになりますね。

今回はこれに言語/語族のペアをぶち込みます。

PE自体はPythonの有名なNLPライブラリであるgensimに実装されているので、簡単に利用できます。

その前に語族って何


世の中には似てる言語も結構ありますよね。
例えば、ヨーロッパの言語ってみんなよく似ています。
アルファベットを使うところや、SVOの語順をしているところなど。
特に、スペイン語とポルトガル語は、別の言語なのにほぼそのまま意思疎通が可能だとか。

実は、これらの言語はずっと昔(数千年前)は、ひとつの同じ言語であり、そこから個別に進化していった、とされています。

Ω ΩΩ< ナ、ナンダッテー!!

日本語でも方言がありますよね。
最初は方言程度の違い(お互いに意思疎通できるレベル)であったものが、長い時間を経て別々の言語に分岐していくイメージです。

さて、そのため、現存する英語、フランス語、ドイツ語、スペイン語などなどは、みんな共通の祖先をもつ親戚関係にある言語とされています。

また、このように親戚関係にある言語同士をまとめて語族(Language Family)と呼びます。

そして、音(音韻論)や単語(形態論)や文法(統語論)を手がかりに、似ている言語を分類していく学問を比較言語学と呼びます。

私は、これの専門家ではないですが、言語の進化の系統図を作成することを目的としている学問というように理解しています。
系統図というのは生物の進化の図でお馴染みのアレですね。

では、他の言語はどうなっているのかというと、一応の分類はされているものの、インド・ヨーロッパ語族ほど多くのことが明らかになっていません。

というか、印欧語族が比較言語学のほぼ唯一の成功例といっていいでしょう。
ヨーロッパという狭い地形に留まっていたことや、文献を残す文化があったことなど、有利な条件が整っていたといえます。

ちなみに日本語はというと、系統不明、孤立した言語という扱いです。
言われてみれば日本語って、世界中のどの言語とも似ていませんよね。

今回のデータでは、琉球語やいくつかの日本語方言をまとめて「日本語族」と呼ばれています。
となると、日本語族と一番近い語族は何語族なのか、気になりますね。


結果は…




まず、インド・ヨーロッパ語族の3大グループである、ロマンス語派・スラブ語派・ゲルマン語派は見事にバラけてますね。
超有名な印欧語族ですが、全言語に占める割合はそれほど高くないです。

上のほうには、ニジェール・コンゴ語族、アフリカで多く話されている言語が入ります。
左のかたまりはオーストロアジア語族。
そして、左下〜下のあたりには、日本語をはじめとしたアルタイ系の言語、系統不明の言語が密集しているように見えます。

そして、「日本語族」にもっとも近い語族は…。

_人人人人人人人人人人人人_
> パマ・ニュンガン語族 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄


誰。。。笑

パマ=ニュンガン語族は、アボリジニの言語の中で最も広汎な言語で、300言語含まれていると推測される。


これは日本語南方起源説

冗談ですよ。

言語オタクの私は眺めているだけで楽しいですが、これはあくまでもお遊びなので真に受けないでください(笑)

ネタばらしをしておくと、入力がWordNetのような、あるノードを頂点とした1つの木構造データでは真っ当な結果が得られますが、今回使用した言語/語族のペアのような、複数の木構造データに分かれているデータは、PEにとってよろしくありません。

例えば、印欧語族と日本語族の間に関連がない(正例としての情報がない)ため、これらが相対的にどのようにマッピングされるかは、ネガティブサンプリングの結果でしかありません。

そのため、ネガティブサンプリングの値を変えると、可視化結果もけっこう変わってしまいます。

つまり、言語の完全な系統図がわかった場合のみ、各言語を意味のある数値データに変換できるようになるわけです。

厳密にひとつの木構造データである必要はありませんが、今回使用したデータのような粒度で複数の木に分かれているのはよくないでしょう。

言語の系統図を作るために距離情報が利用できるのでは!?と思いたいところですが、そのためには完全な系統図が必要という、不条理にはまってしまいます。

眺めて楽しむだけにとどめておくのが良さそうです。

今日のベストプラクティス

何だかんだSPARQLとPEの勉強になった。

QooQ