読者です 読者をやめる 読者になる 読者になる

tf-idfを使ったDbpediaの型推定

卒論が上手く行かないので逃避していたらまぁまぁ良さそうなので公開しておく。

前提

DbpediaとはWikipediaを元に半自動で変換したLODである。

各リソース(記事)にはclass(人とか政治家とか虫とか)が定義されたりされなかったりする。

全リソースの3割ほどにclassが定義されておらず、これを推定する需要がある。

この前のISWCのデモセッションでDbpediaの型(class)推定をしようとしている研究があったのが心に残っていた(全然手法違うけど)。

卒論でデータを眺めていたらふとtf-idfで上手く行くように見えたので試してみた。
というかこれをもっと筋良くした研究が既にあると思うけどパッと出てこなかった。Dbpediaの自動変換の過程で似たようなことをやっている気がする。詳しい人教えてください。

イデア

基本的なアイデアとしては
「A is writer of B」
という関係があれば、Aはおそらく作家だろうしBはおそらく本だろうという推定が出来るというところ。

つまり、リソース(Wikipediaの記事1つに該当)間のプロパティ(Wikipedia間のリンクに相当、ただのリンクではなく種類がある)
を特徴量として扱う。

tf-idfについては無限に資料があるので詳しく語らないが
「リソースを文書とする」
「(方向、プロパティ)の組を語彙とする」
というアイデアをtf-idfに適用した。

また、2つの文書間の類似度はcos類似度によって表される。
そこで、あるリソースAと他の任意のリソースBのcos類似度を計算して、Bにclassが定義されていれば類似度をclassの推定値として重畳する。

この時、足し合わせたあとにそもそもそのclassを持つリソースがいくつあるかで除したり、推移的なtype定義を用いたりするとよい。

最終的に、最も推定値の大きなclassが推定結果である。

所感

簡単な割に結構上手く行ってくれる。
例えばバラク・オバマにはclassが定義されていない。これを推定するときちんとpolitician - Wikidataと出てきた。

ただ、当然だがプロパティ関係が殆ど存在していないようなリソースは推定を誤る。恐竜が「虫」に推定されたりしていた。
他には、1735年などの年度シリーズが殆ど「場所」として推定されていた。
これは日本語版Dbpediaのデータが悪いようで、birthPlaceとして人との間に関係が定義されていた(birthTime?的なものにしてくれ……)。

これを発展させるとすればプロパティの種類だけではなく、その先に存在しているリソースのclassなども推定すべきだろう。
「A is writer of <instance of Movie>」であれば、Aは作家は作家でも監督?とかそういった推定が出来るかもしれない。

結局これは辺に種類が付いた有向グラフのクラスタリング問題に帰着できそうで、何か機械学習で上手く出来たりするのかなぁというところ。

コードはこれです。
GitHub - aki33524/typeprediction