今回の話でお披露目する何かはない。読んで損するってことでもないとは思うけれど。
jumandic 相手に貧乏性大爆発を、あと二週間くらいかなぁと言ったけれど、いろいろあってまだ先が長そうなんである。そもそも出来上がるものは「本気で作った役に立たないゴミ」にしかならんので、不出来でも見せちゃう手も本来はあってもいいんだけれど、ちょっとなんなら「GIST でそれを」てのがね、今の状態だとやりにくいのだわ。つまり、既に「世界一美しいスパゲッティ」と化していて、GIST で閲覧するのはかなり苦痛なレベル、しかも GIST だとパッケージを作るとかモジュールに分離するとかしての公開ってしにくいからさ、どーしたもんかなと。
という状況なんで、とりあえず今回は、作業の中で色々わかったこととか気付いたこととか思ったこと、そんなことをつらつらと雑然と書こうと思う。
ひとまず「jumandic の独特な活用の考え方」について、少しわかったことがあったんで、それから書こうと思う。おそらくこの話では高校くらいの授業を思い出す人は多いと思う。
jumandic の定義を初見で理解しようとするとまず「なにそれ聞いたことない」という用語が多発する。たとえば「母音動詞」「子音動詞」なんて私は人生で一度として聞いたことがなく、して、まだこれについて調べてもいない。そういう「なにそれ聞いたことない」のいくつかは、由来がわかった。
件の「桃井はるこだったろう」については jumandic で「ナ形容詞・ナル形容詞」として定義されるのだが、これについても根拠は一応あるのだが、今回取り立てて言おうと思ったのはこれではなくて「タル形容詞」というヤツ:
1 はつらつたる,はつらつたる,はつらつ,1291,1291,10522,形容詞,*,タル形容詞,語幹,ハツラツ,
2 はつらつたる,はつらつたる,はつらつたる,1289,1289,10522,形容詞,*,タル形容詞,基本形,ハツラツタル,
3 はつらつたる,はつらつたる,はつらつと,1290,1290,10522,形容詞,*,タル形容詞,基本連用形,ハツラツト,
学校で習っている絶賛真っ最中時も混乱してたしいまだに混乱する「形容動詞」を調べてたら、まさにこれに対応するのが出てきた。wikipedia;形容動詞の説明内の「タルト活用」が、ほぼそのまんまである。しかも、「学校文法の口語文法では、連用形は副詞、連体形は連体詞として扱われる。」と説明されるそれを、ipadic はほぼ忠実に行なおうとしているらしく、例えば「殺伐」を grep すると:
1 Adnominal.csv:殺伐たる,1315,1315,4349,連体詞,*,*,*,*,*,殺伐たる,サツバツタル,サツバツタル
2 Adverb.csv:殺伐と,1281,1281,5202,副詞,一般,*,*,*,*,殺伐と,サツバツト,サツバツト
3 Noun.adjv.csv:殺伐,1287,1287,4845,名詞,形容動詞語幹,*,*,*,*,殺伐,サツバツ,サツバツ
4 Noun.csv:殺伐,1285,1285,5622,名詞,一般,*,*,*,*,殺伐,サツバツ,サツバツ
一般名詞にも必要な理由はいまひとつ理解は出来ないけれど、「連体詞」「副詞」「形容動詞語幹」に対応させている。なので「タル形容詞ぃ? 知らんわそんなん」ではなく、これはストレートにマッピング出来る、のね。
なお「ナ形容詞」だのについても、wikipedia の形容動詞の中で出てくる。また、「高校以下で絶賛教わり中に大混乱」の理由についても、そこ読むとわかるので、読んだらいいと思うよ。積年の恨み…じゃなくて、長年の疑問が解けた、と思う人は結構多いのではないかと思う。
なお、そのページを読む読まないによらず、ワタシの「スクリプトっぺー何か」はナ形容詞を「形容動詞語幹」にマッピングしようとしてたりしたんで、実際「正確な理解をしてなくても、なんとなく感覚的には理解できている」ということなんだろうな、と思った。
「それ、システム辞書でやることなのか?」問題について。
neologd から抽出を試みた際にも強く感じたことなのだが、どうにも「無難なデフォルト」と「ドメイン適用」に意識的でないのが困る。
どんなに MeCab の仕組みが「訓練(mecab-cost-train)によって育てることが出来る」ものだとしても、これはいわゆる「伝統的な」ものであって、今大流行中の人工知能とは違う。少なくとも「逐次的漸近的に自動で育ち続ける」ことはない。システム辞書を置き換えるものとしての場合は、配布辞書作成者が「作成者自身がよしとするまで」訓練してから配布するわけである。
そうした場合に、「まともな」エンジニアは何を考えるかといえば当然こういうことである:
- 広く、汎用で、無難なもの、異論の少ないものを厳選したものがシステム辞書である。
- これを超えるものは「ドメイン適用」として、個々のユーザが自身で拡張すべきである。
こうしないと、「サイエンス論文」の解析を「AV女優人名」が汚しまくる、といったことが避けられない。残念だがこういう「伝統的なシステム」は、「ドメインに適した辞書」を使わないと、エントリの多さは邪魔にしかならないわけである。
neologd に関しては、ワタシが無視した「本題」の方は、「育て続ける辞書」ということらしいので、そこだけみればそんなに外してはいないのだが、ただ「2007年」を「2(数字)/ゼロゼロセブン(固有名詞,人名)/年(名詞,接尾)」と分解して平気だ、というのはね、もう「システム辞書としてのありよう」について何も考えてない、ということは明々白々なわけだよ。なぜ ipadic が「そうしていないのか」を考えなかったんだろうか。つまりは、「そういうニーズはあってもいいし、あなたのドメインがそうするのに相応しいならそうすればいい、けれどもそれはシステム辞書の範疇ではない」ということである。
jumandic についてのそれは、「因果応報」のヘンチクリン変種については既に書いた。それ以外でも妙なものは非常に多い。例えば「国名」としてこんなエントリがある:
1 マーシャル諸島,マーシャル,マーシャル,1129,1129,7580,名詞,地名,*,*,マーシャル,地名:国
2 マーシャル諸島,マーシャル諸島,マーシャル諸島,1129,1129,5377,名詞,地名,*,*,マーシャルショトウ,地名:国
3 アラブ,アラブ,アラブ,1129,1129,4198,名詞,地名,*,*,アラブ,地名:地域
4 アラブ首長国連邦,アラブ,アラブ,1129,1129,4198,名詞,地名,*,*,アラブ,地名:国
5 アラブ首長国連邦,アラブ首長国連邦,アラブ首長国連邦,1129,1129,6724,名詞,地名,*,*,アラブシュチョウコクレンポウ,地名:国
6 バチカン市国,バチカン,バチカン,1129,1129,4858,名詞,地名,*,*,バチカン,地名:国
7 バチカン市国,バチカン市国,バチカン市国,1129,1129,6724,名詞,地名,*,*,バチカンシコク,地名:国
8 コンゴ共和国,コンゴ,コンゴ,1129,1129,6324,名詞,地名,*,*,コンゴ,地名:国
9 コンゴ共和国,コンゴ共和国,コンゴ共和国,1129,1129,6724,名詞,地名,*,*,コンゴキョウワコク,地名:国
10 コンゴ民主共和国,コンゴ,コンゴ,1129,1129,6324,名詞,地名,*,*,コンゴ,地名:国
11 コンゴ民主共和国,コンゴ民主共和国,コンゴ民主共和国,1129,1129,6724,名詞,地名,*,*,コンゴミンシュキョウワコク,地名:国
「「マーシャル」言うたら国のことに決まってるっしょ」となるかどうかは、まさに「ドメイン固有」。そういうテキストも多いだろうから、そう思うことそのものは無論否定されるべきことではない。けれどもこれが「広く、汎用で、無難なもの、異論の少ないもの」に当てはまらないことだけは確かである。しかも jumandic エントリを全部入れようとするとこれが「コ(接尾)-マーシャル(国)」となりかねないのも、拍車をかけてイラつく要因となりうる。
「コンゴ」は一般的にこれだけで多くの人が国名だと認識するだろう。バチカンもそうである。けれども「アラブ」は違う。少なくとも「アラブ」だけで国名だと認識出来るのは、「略称が許容される文脈」においてだけである。多くの文脈ではこれは、地域全体もしくは民族だと判断される。というか「略称が許容される文脈」ですらこれは疑わしい。国名としてのアラブ首長国連邦を略したいならUAEであろう。たとえばスポーツの国際大会でUAEを「アラブ」と表記されたら、慣れている人はむしろ「なんのこっちゃ」となる。きっと「なんか新しい国が知らんうちに出来たのかな?」と思うであろう。
というわけで、思うのは、ipadic も jumandic も、「こんとらばーしー」として「オプショナルな追加辞書」というのを考えれなかったもんだろうか、と。増やしたほうがいい問題領域もあれば、そうしない方が良い問題領域もある、これは自明のことなんだから、ちょっとアヤシゲなものは外に追い出して欲しかったなぁと。(そう、ipadic にだってそういうのはある。)
ただね、jumandic に関しては、neologd に対する反感とは全然違っていて。そもそもが「非推奨」扱いにされているわけなんだけれど、そして「何を考えて作ったのか」は書かれてるテキストを見つけてないのでわからないんだけれど、中身を知れば知るほど「MeCab 自身のテスト用」とか、何かしらの実験目的だったのではないのかな、ということがわかってくるのである。「ナ形容詞」について突っ込んだけれど、上述の wikipeaia を読むと「母国語を日本語としていない非日本人向けの教育」ではこれで説明されるらしいのね。つまり、ipadic が(おそらく)採用する「橋本文法(学校文法)」以外も扱えまっせということを実際にやってみようと思った、ということなのかなぁと。そもそも MeCab の作者自身の手による辞書だからね、そうしたことをなんにも理解しないでやってるとは到底思えない。
「列がも少し欲しかった」問題。
これは jumandic 作業前から思ってたことなのだけれど、「ユーザ設定列を追加できます」として丸投げされている「定義済み以外のものたち」の扱いで、やっぱり少し思うこともあって。
ipadic での列は以下が全てである:
1 fieldnames_all = [
2 "表層形",
3 "左文脈ID", "右文脈ID",
4 "コスト",
5 "品詞", "品詞細分類1", "品詞細分類2", "品詞細分類3",
6 "活用形1", "活用形2",
7 "原形", "読み", "発音"
8 ]
jumandic から移送しようとしてると特に強く感じる。「もっと列を!」。
真っ先に感じるのはやはり名詞、特に固有名詞についてである。固有名詞は、文脈IDとしては:
1 1288 名詞,固有名詞,一般,*,*,*,*
2 1289 名詞,固有名詞,人名,一般,*,*,*
3 1290 名詞,固有名詞,人名,姓,*,*,*
4 1291 名詞,固有名詞,人名,名,*,*,*
5 1292 名詞,固有名詞,組織,*,*,*,*
6 1293 名詞,固有名詞,地域,一般,*,*,*
7 1294 名詞,固有名詞,地域,国,*,*,*
の8種類しかなくて、これそのものについても「もっと文脈IDを!」とは思うんだけれど、仮にこの8種類しかないことを受け容れるとした場合に、「もっと列があれば!」と思うわけである。たとえばこれである:
1 ホワイトハウス,ホワイトハウス,ホワイトハウス,1129,1129,8029,名詞,地名,*,*,ホワイトハウス,地名:国:米国:施設
「ホワイトハウスは国じゃなかろう」はこの補足列の解釈の仕方のせいなので無視するとして、この「:施設」という補助情報が、時として役に立ちうるのではないのか、と思ったりするわけね。実際これを「ユーザ設定列」として入れておけば、MeCab で解析させたときにこの情報も得ることが出来る。たださ、こうしたことが「全部ユーザ設定列使えば出来るぜっ」と完全に丸投げせずに、何か最小限のものはなかったもんだろうか、と。だいたいにして、こうやって丸投げされちゃうと、「人によってユーザ設定列1の意味が違う」ので、異なる辞書のユーザ同士での交換がしにくかろう。
まぁこれを整理するのは難しいとは思うのだけれどもね、ただね、少なくとも ipadic には「備考欄」が必要だったのではないか、とは思ってる。ここで補えたことって、結構あるんじゃないのかなと。
んでさ、jumandic にまさに備考欄があるのだけどね。こっちはこっちで…。まず、一貫性がなくて使いやすくはないというのが一つ。もう一つは、「それこそ文法の方で解決できるんでねーの」てのがいくつか。事実、ipadic では専用の文脈ID(と列)を与えているようなものを備考欄で済ませている。まさしくその「国名」がそう。jumandic の方はそもそも列はこうなの:
1 fieldnames_all_juman = [
2 "表層形",
3 "左文脈ID", "右文脈ID",
4 "コスト",
5 "品詞", "品詞細分類1", "品詞細分類2", "品詞細分類3",
6 "原形",
7 "読み", "備考欄"
8 ]
ipadic の「活用形1」「活用形2」は「品詞細分類2」「品詞細分類3」を使う。そんな関係で、文脈IDを細分化しきれない、てことなのかしらね。形容詞のいらん活用で大量の文脈IDを消費してるくせに、なんなら「文脈IDが足りない」。
経緯はわからないけれど、もしかしたら「jumandic による実験での失敗をちゃんと踏まえました、ipadic!」てことなのかもしらんなぁ。なんというかこういうの、設計はかなり繊細で大変だろうなと思うもの。(一応 kakasi だの wnn だの茶筅だのといった先達あってのこれ、なので、超絶に難しいということでもないとは思うけれども。)
書きたいことはまだある気がするけれど、「スクリプトっぺーそれらしきなんとやら」をお披露目すればそこに全部書いてあったりするからね、ひとまず取り立てて言いたかったことだけ書いてみた。とりあえず本日はこれでおしまい。