LoginSignup
104
99

More than 5 years have passed since last update.

ヴォイニッチ手稿について

Last updated at Posted at 2016-04-21

ヴォイニッチ手稿ハッカソンという謎のイベントが開催されるので主催でもなんでもないけど勝手にそれ向けの資料をまとめていく。

計算言語学の論文を書いた時に、ネタでVoynich manuscriptとRongorongoも一緒に計算対象にしたりして、サーベイをしたのでその時の知見をまとめて行く。書いた論文は別に未解決文字にフォーカスした論文ではなく面白いかどうかはわからないけどかなり真面目な内容の奴なのであしからず。

voynich maniscriptとは

謎の文字と気持ち悪い絵がいっぱい書かれた変な本。何らかの未知言語で書かれているかもしれないし、適当にそれっぽく作って詐欺に使われた道具かもしれない。個人的には、アラビア語系の言語で書かれたなんらかの文書をもとに適当に作ってそれっぽい絵を付けた美術品だと思ってる。

以下のページが、これまでの歴史的経緯について詳しい

既存研究とか

サーベイ論文としては以下の物がよくまとまっている。ラストオーサーはなんと元Association for Computational Linguistics会長のProf. Kevin Knight.。

最近の研究等

Voynich Manuscriptについて分かっていること

単語

分かち書きされており、単語的なものの並びになっている。

(おそらく)6つのセクションからなっている

記載されている絵が異なることから, 以下の6つのセクション(テーマ?)から構成されていると考えられている

  • Herbal
  • Astronomical
  • Biological
  • Cosmological
  • Pharmaceutical
  • Stars

(おそらく)2つの言語的な物で記述されている

Currier (1976)は, 文字や部分文字列の出現頻度の違いから, 2つの異なった言語で記載されているのではという仮説を立てている. 2状態のbigram HMMを用いても, 単語レベルで2つの単語クラスに分割できる.

前述のセクションでは、BiologicalとStarsのセクションが主に言語Bで記述されており、残りは言語Aで記述されている。一部記述言語が不明なページもある。

母音と子音があるか

HMMで分析すると、英語だと母音と子音はきれいに分かれるらしいが、Voynich Manuscriptでは母音が単語の最後にのみ出現するという結果になったらしい。それは果たして母音なのか。adjab系の言語だと母音は基本記載されないので、adjab系の言語という風に考えることができる。表示文字・表語文字の可能性もある。全然適当な何かかもしれない

単語に含まれる文字長の分布がアラビア語等と似ている

文字数の分布はアラビア語と似ている。つまり、単語には前置詞がついて格変化(ついでに性別の文字)的なものが付いている可能性がある。

単語分布はべき分布する

単語の出現頻度がZipf分布するかというのは単語頻度・ランクの両対数プロットを目で見れば分かるんだけど数値的にZipf分布の計数を推定するのは難しい. ある文書長の時点での単語の異なり数(0次エントロピー)と2次のRenyiエントロピーで両対数グラフにプロットすると、出現分布のzipf exponentを1.3にしてランダムに生成した系列と同程度の位置にプロットされ、ちょうどタイ語とアラビア語の中間程度(abugidaやabjad系言語の周辺)に位置している。

エントロピーとか

bigramのエントロピーを見ると、完全にランダムな記号の列ではない様子。ただ繰り返しが多い事から、bigramのシャノンエントロピーは他の言語に比べ低い値となっている

共起について

有意に共起する単語集合や、テーマに有意に出現する単語は存在するらしい。隠れ変数モデルを用いてトピック的な物を抽出することもやられている。

word2vecを用いて単語埋め込みを行ったところ、2つの大きなクラスタが観測できたり(2つの言語を含んでいることの傍証)、t-SNEでの次元削減を行って、二次元空間にマップしたところ、絵の注釈から星名と考えられる単語群が、空間上で近傍に配置された等の報告もある。 

文法について

....

コーパス

voynich maniscriptの文字をアルファベットと記号で記述したtranscriptionが公開されいている。

http://www.ic.unicamp.br/~stolfi/voynich//98-12-28-interln16e6/text16e6.evt.gzをダウンロードして、解答して出てきたtext16e6.evtがtransctiptionが記載されたテキストファイル。

複数のtranscriptionが書かれているが、とりあえずFを利用すると良さそう。

適当にparseする

parse.py
# -*- coding: utf-8 -*-
import sys
import re

LANG_B = ["<f26", "<f31", "<f33", "<f34", "<f39", "<f40", "<f41", "<f43", "<f46", "<f48",
          "<f50", "<f55", "<f57", "<f66", "<f75", "<f76", "<f77", "<f78", "<f79", "<f80",
          "<f81", "<f82", "<f83", "<f84", "<f85", "<f86", "<f94", "<f95", "<f103", "<f104",
          "<f105", "<f106", "<f107", "<f108", "<f111", "<f112", "<f113", "<f114", "<f115", "<f115"]

LANG_UNK = ["<f12", "<f59", "<f60", "<f61", "<f62", "<f63", "<f64", "<f65", "<f67", "<f68",
            "<f69", "<f70", "<f71", "<f72", "<f73", "<f74", "<f91", "<f92", "<f97", "<f98",
            "<f101", "<f109", "<f110", "<f116"]


PIC_PATTERN = re.compile(r"-{[^{}]+}")

"""memo
-: 行末(画像が挟まれた場合も-を入れる)
=: 段落終了
.: 単語境界
,: 単語境界

-と=の直後に出る{[^{}]+}は文の途中もしくは前後に挿入されている画像を表す

"""


if __name__ == "__main__":
    for line in sys.stdin:
        line = line.strip()
        if line.startswith('#'):
            continue
        else:
            lang = ""
            # 言語B
            if any([line.startswith(x) for x in LANG_B]):
                lang = "B"
            # 言語?
            elif any([line.startswith(x) for x in LANG_UNK]):
                lang = "UNK"
            else:  # 言語A
                lang = "A"
            ret = re.match(r'^<(\w\d+\w\.\w\.\d+;F)>(.+)$', line)
            if ret:
                meta = ret.group(1).strip()
                sentence = ret.group(2).strip()
                pics = [re.sub("[-{}]", "", x) for x in PIC_PATTERN.findall(sentence)]
                print(meta, lang, sentence, pics)

こんなんで適当にパース出来る。

cat text16e6.evt| python parse.py

単語への分割は, "-"、"="、","、"."でsplitすれば良い。"{}"で囲われているものは全て削除するのがよいかもしれない。ページ毎のテーマに関する情報が抜けているのでそこも抽出すると良いかもしれない。ダルいけど。

スキャンされたPDFの物も存在する。入手は以下から

計算言語学的な見地でのハッカソンのテーマ

とりあえず掛けて見た系でもなんか面白い結果が出るかもしれない。ここ3年ほどこの業界から離れているのでだいぶ進歩があるかもしれないけれど、基本baysian系の教師なし学習がハマりそうという考えがある。

pos tagging

単語に品詞的な文法範疇的なものがあるかどうか。baysian pos taggingに掛けて見るであったり、latent word language modelのような、可変長文脈において出現が類似する語の列挙などをしてみる。問題は行・段落の境界やトピック、ページの境界はわかっているが、文境界がわからないことなのでエイヤになる。web上にはword2vecに掛けてt-SNEでプロットした人もいた。

いけてる教師なしpos taggerはなんかあるんだろうか。ベイジアン単語分割をガリガリやってたSharon Goldwaterが結構前に論文書いてた気がするしどっかに転がっていてもおかしくない。

parsing

文法構造的なものがあるかどうか見てみる。Mark Johnsonの教師なしPCFGコードなんかは普通に転がっていて、そのアルゴリズムの評価もコーパスがない少数話者言語の小規模データの分析で評価していたのでちょうどよいかも。時間中に収束しないかもしれない。これも文境界の問題がある。

PCFGじゃなくてTree-adjoining grammarだったりCombinatory categorial grammarの教師なしパーザを探すのもよいだろう。non-projectiveだったらどうするんだろう。non-projectiveな依存文法の教師なし奴の良い実装とか有るんだろうか。

topic modeling

トピックモデリングに掛けてトピックを可視化してみる。6テーマに関するトピックが現れるかどうかを、gensimのHDPにかけてpyLDAvizで可視化してみるとかはお手軽でよいかも。現実の文書群でもトピックモデルがそんなにきれいに収束はしないので、面白い結果が出るかどうかは微妙だと思う。出力がキャッチーなのでよいかも程度。

word segmentation

文境界の問題はあるけれど、これが一番の面白いテーマかも。もともとのvoynich manuscriptは、おそらく分かち書きされた言語であると見た目からは考えられるが、そこをすべてつなげたうえで、教師なし単語分割に掛ける。もし、元の単語の並びが意味のあるものであった場合、もとの単語境界と類似する結果が出ると思われる。アラビア語系の言語なのだとしたら冠詞や接尾辞の分割などが観測できるかもしれない。(HPYLMのアラビア語単語分割の報告では、冠詞や接尾辞は分割されてなかったけど。)

その他

画像とテキスト両方を扱うなどもネタとしてはよいかもしれない。はやりのCNNとRNN(+LSTM)で画像とテキストの学習など。データ作るの大変だけど。もっとぶっとんで、voynich manuscriptから音楽を生成するとかそういうメディアアートっぽいことやってほしい。

おまけ

rongorong関係のスクリプト

インダス文字も、結構論文出てる。ワシントン大学の人がPNASやらPLoS Oneに出したりしてる。自分の論文でもインダス文字のコーパスゲットしようとインドのどっかの研究センターにコンタクトとったけど普通に断られたのでまだデータを見れていない。

終わりに

結局言語らしいという統計的なエビデンスはどんどん出てきて、よしんば何らかの人間が理解できる情報が記載されていたとしても、既存の言語と結びつけて翻訳するにはロゼッタストーンが必要なんやで。あと線文字Aもいろいろ遊んでみたいけどtranscriptがなさそうだったんであきらめてる。ある場所知ってるとかあれば教えてください。

104
99
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
104
99