murawaki の雑記

はてなグループから移転してきました

Wiktionary がうまくいってたまるか

前回に引き続き、わからないという現状認識を書き残しておく。Wiktionary は失敗が約束されていると思ってきた。昔の記録を漁ると、2007 年には某所でそんな発言をしていた。しかし、2014 年現在、そこそこ何とかなってるっぽい。なぜだろうか。

そもそも現状を「そこそこ何とかなっている」と判断して良いのだろうか。そう思ったのは、自然言語処理Wiktionary のデータを利用する研究を頻繁に目にするようになったから。Google Scholar で Wiktionary を検索すると 8K 件以上返ってくる。にわかに信じがたい。自然言語処理業界から見て、Wiktionary は使える資源になっているということだろう。自然言語処理での利用は、あくまで Wiktionary の現状の静的な評価。動的な、活動状態はどうだろうか。English Wiktionary の統計を見ると、記事の増加数は安定している。少なくとも減ってはいない。editor の数も安定している。*1 とりあえず、現状認識を訂正する必要はなさそう。

なぜ Wiktionary に興味を持ったか。正直言って、Wiktionary 自体がこの先どうなろうと知ったことではない。自分の研究に Wiktionary のデータを利用したいとも思わない。興味は辞書を作るという作業そのものにある。辞書作成に関して、Wiktionary から何らかの知見が得られるだろうか。

なぜうまくいかないと予想したのか。辞書は素人が簡単に作れるものではないと考えているから。人間は列挙が苦手。知っている語を列挙しろ、あるいはある語の語義を列挙しろと言われても網羅的にはできない。一旦生成されたテキストから抽出して集約するほかない。語釈文の作成も難しい。語の意味を別の語を使って説明するのは難しい。基本的な語、語義ほど難しい。この手の問題について editor を補助する仕組みを Wiktionary は持たない。おまけに翻訳と同じ問題、つまり作れる人があえて作る動機がとぼしいという問題がある。読み物としての魅力という点で、辞書は事典に劣るだろう。そんな状態でうまくいってたまるかと。

とりあえず先行研究を調べる。Iryna Gurevych という人のグループが Wiktionary をネタに大量の論文を書いている。ただし、自然言語処理のための資源として Wiktionary を評価したものばかり。つまり静的な評価。*2そんな中、Wiktionary: A new rival for expert-built lexicons? Exploring the possibilities of collaborative lexicography という 2012 年の論文はやや広い観点から分析している。著者らは a comprehensive description of Wiktionary とうたう。たいした自信だが、後半のデータの定量的な評価に加えて、前半で Wiktionary の仕様を説明しているだけ。私の疑問にはあまり答えてくれない。それでも得るものもなくはない。

一つは著作権が切れた資料の利用。Webster’s New International Dictionary of the English Language (1913) が出発点として重要な役割を果たしている。つまり、少なくとも英英辞典に関しては、基本的な語、語義の難しさという問題は回避されている。後半の分析を見ると、Wiktionary で追加されているのは、どうやら新語や専門系の語、語義のようである。ただし、繰り返すと、著者らは静的な状態の評価を WordNet との比較によって行っているだけ。どう変化してきたかは調査していない。そこが知りたい。

著者らはドイツ語版とロシア語版*3も調べているが、それらがどうなっているのかはわからない。ドイツ語やロシア語だって、free ではないかもしれないが、すでに充分な辞書資源がある言語。たとえ既存資源を複製しなかったとしても、Wiktionary がやることは車輪の再発明。私の疑問に答えるには、もっと資源のとぼしい言語の状態を調べた方が良い。

ネタ提供はしたので、誰か調べてくれないかな。

*1:それにしても、2011 年後半の記事の大量削除は何だったのだろうか。

*2:Wikipedia なら、動的な評価として、編集合戦を可視化した論文などがあるんだけど。

*3:ややこしいが、説明言語がドイツ語やロシア語ということ。説明の対象は多言語。

翻訳する動機がわからない

良い機会なので翻訳に関する疑問を書いてみる。*1そもそも翻訳を生業としない人間が翻訳する動機がわからない。*2動機がわからないからことには、翻訳に関する生態系の作り方もわからない。

自分で翻訳するのをやめて久しい。だが高校生の頃はやっていた。OSS コミュニティの片隅で。思い返してみる。なぜやめたのか。自分にとって必要なくなったからだ。

なぜそれまで必要だったのか。答えは低い英語力と記憶力の限界だと思う。わからない表現の頻度が一定割合を超えると、辞書を引かないことには文章が理解できない。辞書を引き出すと、文章の内容を記憶しておけなくなる。だから、内容を思い返せるように、途中までで理解した (つもりになっている) 断片を書き出す。それを最後までやると訳文ができあがる。当然質は極めて低い。

必要がなくなった理由はその反対。辞書を引きまくらなくても原文が理解できるようになった。*3そうなると、翻訳なんて手間のかかる作業は時間の無駄。使える時間は有限。読みたい文章は無尽蔵。

ついでなので、なぜ自分にとって必要がなくなったらやめたのかとも問うてみる。結局、私は自分のためにしか、(翻訳を含む) 文章を産出できない。需要にあわせて供給することができない。*4なぜ自分のためになるかというと、翻訳に関しては、上述の通り、記憶力の限界を補って文章を理解する助けになるから。一般の文章については、書き出すことで頭が整理できるから。できた文章は副産物とも言える。その副産物をあえて隠しておく必要もないので公開する。それだけ。

最初の問いを少し修正する必要があるかもしれない。質の高い訳文を作れる人間があえて翻訳する動機がわからない。反対に、(結果的に) 低品質の訳文を作る動機であれば、少なくとも 1 つのサンプルがここにある。しかし、これが他人に当てはまるかは自信がない。

仮に他人に当てはまるとする。低品質の訳文の供給があったとして、それを活用できるだろうか。活用できるとすると、高品質な訳文を生成できる人の作業の省力化だろう。そのためには、低品質の訳文を土台とすることで、1 から訳文を作成するより、あるいは翻訳メモリや機械翻訳を使うよりも省力化できなければならない。直感的には、そうでもない気がする。仮に省力化に使えるとしても、高品質な訳文を生成できる人の供給が 0 に近ければ、1.x を掛けても誤差だろう。

*1:良い機会というのは、かつて同じ時期に同じ研究室にいた人がいま翻訳ネタで話題になっていること。

*2:そもそも論を言い出したら、私にとって他人の価値観はわからないものである。他人が良いと評価するものが良いとは思えないし、自分が良いと思うものを他人は評価しない。なぜそうなってしまったのかわからないが、現状そうなっていることは認識している。

*3:質の良い訳文を作るには、原文を理解することが不可欠だが、それだけでは充分ではない。意味が理解できても、適切な訳文を思いつかないことは多々ある。

*4:ついでに言えば金銭も私を突き動かさない。そうでなければ大学に残るという愚かな選択はしなかっただろう。

方言等語線

時間が経ったが、アイヌ語諸方言の系統樹の話の続き。系統樹の代わりに等語線 (isogloss) を引いてみる。

問題意識。方言群を系統樹で解釈するのは無理がある。接触による語彙伝播で説明するほうが良さそう。ではどうするか。ひとまず簡単に作れる別の表現を試す。ということで出てきたのが等語線。接触となると、とりあえず隣同士の関係を見ればすみそう。

思いつくままに系統樹と等語線の違いを挙げてみる。可視化される情報という点では、等語線は地理的に隣り合う方言同士の関係だけ。離れた方言同士の関係は可視化しない。等語線は隣同士であればすべて可視化する。系統樹は隣り合っていない関係も可視化するが、木を作るために一部だけを採用し、他を切り捨てる。

見ている情報という点では、等語線は隣との関係だけ。方言間に違いにはいろんな要因がある。該当方言だけの局所的な変化だとか、大方言群同士の境界だとか。等語線ではそうした要因はわからない。系統樹は木にそって要因を分割した結果。

御託を並べたところで、結果を見ていく。まずはアイヌ語



original authors: Lee S, Hasegawa T (2013); doi:10.1371/journal.pone.0062243.s001.
バイナリ化された基礎語彙の 0/1 の境界に線を引いている。太さが境界が置かれた数。不明 (?) の扱いがいい加減だが、大きな影響はないだろう。服部・知里論文の第3表 (p.62) にある同源語の一致率にほぼ相当する。表に並んだ数字を眺めていても分からない。こんな風に可視化した方が良い。

線は一部を除いて垂直二等分線。旭川は石狩水系だが、同水系の他の言語のデータがない。道南日本海側のデータもない。おかげで西側の南北境界が実際よりも北に引かれているのではないかという気がする。樺太の落帆と内路の間には無理矢理境界を設定した。Lee の系統樹では最初にくっつけていたので。落帆-美幌、長万部-旭川長万部-宗谷なども無理矢理感がある。

気付いた点を挙げてみる。同じデータをそのまま見ているだけなので、服部・知里とくらべて特に新しい知見があるわけでない。

  • やはり北海道と樺太の断絶が大きい。
  • 樺太はどこをとっても断絶が大きい。南部の多蘭泊-落帆間の断絶が一番大きい。結果的に、この2つが最後に (一番昔に) 結合するような木が推定されている。
  • 北海道は北部、南西部、東部に3分されている印象。北部と東部をひとまとまりにする分類を別文献で見かけたが、両者の差異も大きそう。
  • 八雲-長万部と平取-貫気別-新冠はそれぞれまとまっている。両者の間の幌別が中間的で、木を作る際にも困っている様子。
  • 服部も指摘しているが、日高南部の様似が新冠と似ておらず、むしろ釧路に近い。
  • 系統樹では宗谷が北海道の外れ値となっているが、宗谷と名寄の差はそこまで大きいわけではない。クラスタリングの都合で取り残されたことが確認できる。

あとは可視化には成功していないけど、データを眺めていて気付いた点。

  • 語同士が独立ではない。考えてみれば当たり前。調査票にある意味を表す語を聞いて回って、A を使う群と B を使う群が得られたら、A と B は相補的に分布する。多少の重複はあるけど。同じ調査項目の競合関係を系統モデルは無視する。
  • 全体に広がっているけど穴がある場合、あるいはその反対の局所的な分布は新しい変化と解釈できる。地理的に離れた複数の地点で使われている場合は、周圏論的に古いと解釈できる。分布がきれいに分断されている場合は、いずれが古いか、あるいはいずれも新しいか判断できない。
  • 南北境界はもちろん北海道と樺太の間が一番大きいが、宗谷の南に引かれる例も目立つ。名寄の南に引かれる例もある。樺太南部と北海道北部が共通することがあるが、北海道全土+樺太南部 という分布を持つ語はないみたい。北海道 + 樺太虫食い は樺太内部での局所的な改新だろう。一般には南北どちらが新しいか判断がつかない。
  • 北海道側の改新は複数の拡散パターンの重ねあわせっぽい。単一の中心点がある感じはしない。
  • 系統樹の観点からすると、拡散領域が複数あるとして、重なりがなかったり、包含関係にあるなら木の形になる。複数の拡散領域が部分的に重なり合っていれば木にならない。そう考えるとやはり宗谷は重要。宗谷には劣るけど、幌別も中間的で面白い。

ついでなので日本語も。



original authors: Lee S, Hasegawa T (2011); doi: 10.1098/rspb.2011.0518.
こちらは量が多いので機械的に処理しただけ。個別の語の分布は検討していない。

  • 八丈方言はどことも離れている。系統樹では八丈・静岡が100年ちょっと前に分岐していて変だと思ったが、静岡と特に近いわけではない。もっと昔に分岐したと考える方が自然なくらい違っている。いまの系統樹は、八丈方言ではここ100年ほどで急激な変化が起きたと解釈していることになる。おそらく、静岡に別の方言をくっつけていくと、祖語の内部状態が八丈からさらに離れていく。だから仕方なしにさっさとくっつけている。
  • 八丈方言と近い順に並べると、群馬、鳥取、静岡、東京、和歌山、三重、栃木となる。なぜ鳥取?
  • 個人的には兵庫が京都、大阪とやや離れているのが気になる。採取地点が播州加古川だから中国寄りなのだろう。それにしてもプロットしている点が西に寄り過ぎ。
  • 東西対立でいうと、北の糸魚川はそこそこ明確だけど、南側はぼやけている。
  • 九州は熊本・大分が比較的似ているが、あとは離れている。そんなつながりがあったっけ?
  • 本土で一番離れているのは秋田・鹿児島。
  • 鹿児島・名瀬 (奄美) の差が注目されることが多い。実際、この断絶は秋田・鹿児島よりも大きい。でもよく見ると、沖縄・池間 (宮古)、沖縄・平良 (宮古) の差の方がさらに大きい。琉球というのはあくまで比較言語学が産んだ仮想的な群であって、実体としては存在しないのだろう。
  • それにしても、琉球諸方言の内部の差異は大きすぎる。考古学的な証拠からすると、宮古八重山への日本語話者の移動はあまり遡れない。となると、比較的短期間のうちに急激な変化が起きたことになる。あくまで推測だが、少数の話者が孤立しているとこういうことになる。言語変化を牽引するのはおそらく世代交代だから、通婚圈が狭いとなおさら。沖縄の共同体の慣習を「ゆい」と言って変に理想化する言説も見られるけど、異常なほどの閉鎖社会だったんじゃないか。
  • 地図には載せられなかったが、上代語との距離でソートすると、上位は中古語、東京、北海道、山梨、滋賀、岐阜、栃木の順。本土の下位は、佐賀、鹿児島、秋田、青森の順。同じことを中古語でもやってみる。上位は東京、北海道、山梨、長崎、栃木。下位は佐賀、秋田、宮崎、福岡、青森。辺境が遠いのは分かるが、東京が近いのが謎。現代の関西諸方言が思ったよりも遠い。関西限定の改新が多かったということか。

Linguistic Phylogenies Support Back-Migration from Beringia to Asia

Mark A. Sicoli and Gary Holton. Linguistic Phylogenies Support Back-Migration from Beringia to Asia. PLOS ONE, 2014.

要約。Dene–Yeniseian系統樹を作ってみたら、Na–DeneYeniseian が最初に分岐する木はいまひとつだった。Na–Dene 側が沿岸と内陸に分けられそうで*1、Yeniseian は Na–Dene 沿岸部に近い。とすると、旧大陸から新大陸に一方向に広がっていたとするより、ベーリング地峡あたりから東西に広がったとするほうが説明しやすい。

この雑記を訪れるような奇特な人にとっても未知語だらけではないかと思う。とりあえず英語版 Wikipedia にリンクをはってみた。

Na–Dene は北米先住民の語族。私も全然知らない。名前だけ知っているものですら、Navajo と Tlingit ぐらい。Navajo は米軍が暗号として使ったことで有名。狂ったように複雑だから。Haida も聞いたことがあるが、最近は Na–Dene から除外する方向で落ち着きつつあるらしい。*2

Yeniseian は名前の通りシベリアのエニセイ川流域で話されている (いた) 語族。論文では Ket と Kott の2つを使っている。現存するのは Ket だけ。エニセイ川と言えばモンゴル国の北側。いくら地図で高緯度地域が引き伸ばされているといっても、北米大陸からは相当離れている。

この Na–Dene と Yeniseian との間の系統関係が最近話題になっている。Edward Vajda という人の主張だが、それが (あからさまな) トンデモではないらしい。自分では確認していないけど。ここまでが背景。

この論文は、Dene–Yeniseian の存在をとりあえず仮定して、計算モデルで系統樹を作ってみたというもの。SplitsTree で NeighborNet を作る。MrBayes で木を作る。よくある話。

変わっているのは、類型論データを使っていること。普通は基礎語彙を使う。一応使わない理由を説明してある。Na–Dene に限れば同源語が豊富らしい。でも長期の接触の影響でぐちゃぐちゃ。さらに Yeniseian との対応を考えるのは大変。1 万年近くさかのぼるには、語彙の比較は厳しいよね、とか。

類型論のデータベースというと、私は WALS しか知らない。この論文は独自にデータを作っている。Na–Dene については Sherzer (1976). An areal-typological study of American Indian languages north of Mexico という本を土台にし、他の文献で補っている。Yeniseian はこれにあわせる形で、文法書を見ながら自分たちで作成。偉い。とにかくデータを作る人は偉い。

supporting information 1 (S1) に具体的な特徴量が載っている。116 種類。音韻論と形態論のみ。この部分の説明が謎。例えば特徴量の 2 番は 1-1-1 とあって何のことやら。Sherzer (1976) にあたればわかるのだろうか。

類型論データの利用は以前から疑問に思っている。モデルは個々の要素が独立に生まれて死ぬと仮定している。しかも、生死のパラメータは同じもの。語彙なら独立性と仮定してもそこまでまずくはなさそう。一方、類型論データだと、S1 を見れば要素間に依存があるのは明らか。要素間の依存性がどの程度結果に影響するか調べた方が良さそう。誰かやってないのだろうか。

データが公開されていることだし、グダグダ言ってないで (欠損値対応の) PCA にでもかけてみればいいのだろう。でも、そうすると連続値に変換されてしまう。あるいは、バイナリ化をやめて categorical に表現するということも考えられる。いずれにしても、バイナリ列を仮定する既存のツールでは扱えない。少なくとも、依存関係を直接モデル化するよりは現実的。

問題はモデル化の都合だけではない。直感的にも分からない。語であれば生死は自然に了解できる。語が作られ、やがて使われなくなる。あるいは、意味が変化して調査対象の意味で使われるようになったり、使われなくなったり。一方、類型論的特徴が発生したり、消滅するのはいったいどういうことなのか。松本克己あたりの主張も、一部の類型論的特徴が歴史的変化に対して抵抗力が強いということだけ。モデルが変化に着目している以上、どういう仕組みで変化するかを一般化した形で知っておきたい。でもそういう説明を見たことがない。

考えてみると、同じ問題は morphology (生物学用語の方で、例えば、羽を持っているか) を使った系統樹にもありそう。そっちでは何か議論はないのだろうか。

*1:この切り分けは少々強引。よく見ると North Pacific Coast Athabascan が少し離れている。

*2:日本でもこのあたりの言語を研究している人が何人かいる気がして、宮岡伯人『「語」とはなにか』を確認してみた。そこに登場する人は、どうやらみんな微妙に外しているみたい。

Evolution of the Ainu Language in Space and Time

Sean Lee, Toshikazu Hasegawa. Evolution of the Ainu Language in Space and Time, PLOS ONE, 2013.

著者は以前日本語諸方言に系統樹モデルを適用していた人。論文公開直後に見つけてつぶやいた。

その後忘れて 1 年以上が過ぎていた。最近 arch74324 氏のブログ記事を見て思い出した。

モデル自体は印欧語への適用例と同様なので省略。データと結果に焦点をしぼって気付いたことを箇条書きしてみる。

  • 誰が偉いかというとデータを作った服部四郎が圧倒的に偉い。先見の明がありすぎ。glottochronology への着目もさることながら、1950 年代に危機言語の問題に気付いてデータを採取したことが驚異的。いま同じことをやろうと思っても不可能だろう。
  • データは 1955/56 年時点でのアイヌ語 19 方言の基礎語彙。樺太が 6 方言で残りは北海道方言。
  • データとくらべてツールにオーバースペック感がある。ツールがあるから動かしてみた、みたいな。おそらくもっといい加減なクラスタリング手法でも同じ形の木が得られる。単に子供の間を取る形で内部ノードの geolocation を決めても、祖語は北海道北部に落ち着きそう。
  • 現代語だけでは絶対年代を推定できない。どうしているかというと、裏技を使っている。アイヌは 15 世紀に樺太に入ったと想定し、樺太祖語が2つに分岐する時点に対して、500 BP を平均とするガウス分布をソフトな制約として与えている。この仮定の妥当性が一つの焦点。*1
  • calibration を 1 点でしか行っていないので、この時刻に関する仮定を変更しても、同じ比率のまま伸び縮みするだけだろう。
  • 祖語の年代はかなりぶれている。本文によると、中央値は 1323 BP だが、95% 区間で 820-1862 BP。*2手がかりが乏しいので仕方がない。
  • 宗谷方言の位置付けが鍵。服部・知里の原論文で指摘されているように、宗谷方言は北海道方言の中では外れ値。全体的には北海道方言だが、樺太方言に比較的近いとのこと。こういう中間的なデータが存在するときに木構造を仮定して大丈夫なのか。
  • 著者は一応先回りしている。いわく、tree-likeness を測ったら良い値だったとのこと。とは言え、推定結果では宗谷方言は早くに枝分かれしているので、祖語の位置への影響が大きい。
  • Figure 3 を見ると、北海道祖語は、宗谷と宗谷以外 (旭川近辺) とのほぼ中間に位置している。大雑把に言って、北海道祖語の語彙は、宗谷と宗谷以外から等距離。つまり、宗谷は保守的だと推定されいるみたい。推定された北海道祖語には宗谷の樺太的要素が反映されていそう。北海道祖語の語彙の状態を確認したいところ。
  • 共通祖語の位置は、北海道と樺太を結ぶ線上のどこかだと思うが、Figure 3 では判別できない。
  • これも服部・知里の論文で言及されているように、方言周圏論というか波状説の方が系統樹よりも説明しやすそう。北海道方言と樺太方言が分岐した後、北海道方言で広く多く改新が起きたけど、樺太方言が (一部については宗谷方言も) その影響をまぬがれたする。このデータを系統モデルで説明すると、論文のように樺太寄りの故地を設定せざるを得ない。
  • やはりこの規模のデータに系統モデルを適用するのは無理があるんじゃないか。系統モデルの成功例は印欧語とオーストロネシア語族。印欧語は過去のデータが豊富で地理的広がりがある。オーストロネシア語族は過去のデータはないけど、地理的広がりがあるうえ、洋上なので相互の接触が限定的。これらに比べるといかにも厳しい。
  • 論文はテンプレート通りの展開。二重構造モデルが適切か、いわゆるオホーツク人の影響を加味すべきかという問いを立て、モデルの推定をもとに後者を支持する。祖語の年代と位置がオホーツク人のそれと一致するから。日本語方言を扱っていたときは年代だけで農耕の開始を論じていた。いずれにしても危うい。もっと堅実に議論すればいいのにと思う。でも、それだと注目されにくいのだろう。

2014 年 9 月 1 日追記: 同じ著者の 2014 年の論文では、アイヌ語のデータとして千島と千歳が追加されている。ただしデータは載っていない。

*1:calibration を 1 点でしか行っていないので、分岐の中央値はほぼ 500 BP になるはず。なのに、Figure 2 では 目測で 460 BP あたりに中央値がある。supporting information の XML ファイルを見ると、平均は 460 になっている。40 年のずれは何なのか。1955 年に 40 を足しても 1995 年にしかならない。謎。計算時には謎補正を行っておきながら、結果を図にするときに戻していないのではないか。

*2:やっぱり Figure 3 は 40 年ずれている。

「戦犯旗」はいつ使われだしたか

世の中のいろんなものがネット上に移行して記録されるようになった結果、何がどう起きたかを後から*1分析できる場合が増えてきた。今回はそういう話。これから色々御託を並べる。けど結局やったことはローテク。ちゃんとした話ならちゃんとした場所で発表する。微妙な政治ネタだし、結論的には新しい情報はない。*2雑記に投げ捨てるのが適当。

お題は、「戦犯旗」(전범기) なる語はいつ使われだしたか。技術屋なので技術を使って何とかしたいところ。しかし韓国語。まずこの時点で、私が自然言語処理を活用するのは厳しい。

以前、Baidu の n-gram を使って、新語 (新用法) の出現時期を求めてみたことがある。しかし、2010年7月までのデータなので、いい加減賞味期限切れ。前にいた研究室では、学生に頼んで、自前で時系列コーパスを作ろうとしてみた。クローラを運用していたので。しかし駄目だった。取得するページは最近のものに偏りすぎていた。非力なクローラでは、ほとんど無尽蔵にあるページの一部しか取得できない。新しめのページの取得で精一杯で、古いページまでたどり着かない。もちろん韓国語は対象外。

Twitter は駄目。中の人だったり、契約してデータを貰っていれば良いかもしれない。部外者だから、streaming のデータを貯めこまないといけない。膨大な量だけど、それでも sampling されたデータ。しかも全世界のデータだから、言語を限定するとデータが一気に減る。後で思いついた語を検索しても全然ヒットしない。事前に決めた語を track するぐらいしか使い道はないのではないか。

Google Trends はいまひとつ信用できない。低頻度語の切り捨てが激しい。

Google N-gram は対象言語が限られている。日本語も韓国語もない。

結局、新聞サイトで記事を検索してみる。朝鮮日報は過去1年しか出てこない。東亜日報も古いのが出てこない。

ということで、中央日報を使う。単純マッチングを使っているようで、전범기 (戦犯旗) に対して전범기업 (戦犯企業) も引っかかる。それを除くと初出は2012年8月16日。今ではさも当たり前のように使われているが、ごく最近の造語であることが確認できる。

古い記事は本文が読めない。スニペットから、朴鍾佑のサッカーの試合における政治宣伝と関連付けていることがわかる。試合は2012年8月10日だから、少し時間がたっている。

次は욱일기 (旭日旗) で検索してみる。あまりヒットしない。最初が2004年2月12日。例によってスニペットしか見れない。李丞涓というタレントが慰安婦のコスプレでヌード映像を作ったという話題。炎上マーケティングっぽい。同年同月20日まで計6記事。

その次は2011年1月26日。7年も飛んでいる。またもやサッカー。奇誠庸が2011年1月25日の試合で人種差別パフォーマンスを行って騒ぎになったあとの Twitter での発言を取り上げたもの。Wikipedia がソースなので怪しいが、「Twitterで「観客席の旭日旗を見て涙が出た。私も選手の前に大韓民国国民です…」と発言、旭日旗に腹が立ったことを理由に故意に上記のパフォーマンスを行ったことを主張した。」とのこと。これが計2記事。

次が2011年8月26日に1件、その次が2011年12月24日。その次が2012年8月15日。オリンピックの日本体操チームが使用したユニホームに難癖をつけているっぽい。「戦犯旗」の初出が2012年8月16日だからその前日。2012年11月7日に、かの有名な VANK が反旭日旗の活動を国連前で行ったという記事。ここでようやく具体的な活動がはじまり、年が明けて2013年になると記事の数が爆発的に増える。

事前の予想よりはるかにわかりやすい結果。新聞記事の検索だけで、かなりの程度目的が達成できた。要するに、韓国人はもともと旭日旗に何の関心もなかった。2011年1月にサッカーの試合で人種差別パフォーマンスを行った選手が、言い訳のために旭日旗を持ちだしたのがはじまり。2012年8月にサッカーの試合で別の選手が政治的パフォーマンスを行って世界的に批難をあび、少し経ってから、腹いせのために旭日旗を批難することを思いついたのが次の展開。この段階で「戦犯旗」なる語が発明された。これに VANK が目をつけ、2013年以降大々的な反対活動が行われるようになった。逆に言えば、今の反対活動は、もとはといえば、サッカーにおける逆切れが発端。そんなことをしていると韓国に対する好感度も下がるわけである。

ここまであからさまなら、反旭日旗の活動家 = racist という図式を作るのは難しくなさそう。特に奇誠庸の件は都合が良い。他には、VANK が「디스카운트 재팬」 (discount Japan) という運動をしていたように記憶していたがみつからない。さすがにヤバいと思って消したのだろうか。*3 この図式を補強するために、旭日旗に目をつけてから反対活動を始めるまでの展開が詳細に分析できると良い。時系列データと自然言語処理のツールがあればできるかもしれない。あと、米国籍の人間の活動が目立つが、彼らと韓国との連動具合も分析できるかもしれない。でもデータもツールも持ち合わせていないので私には無理。

2014年6月12日追記: takeda25 氏が詳しい補足を書いてくれているので、そちらも参照してほしい。

2015年7月3日追記: NAVER Trend で上記の結論が再確認できた。このサービスは Googld Trends の韓国版。전범기 (戦犯旗)、욱일기 (旭日旗)、욱일승천기 (旭日昇天旗) をくらべてみた。2007 年 1 月から 2015 年 6 月までの検索語の「検索推移」(?) が週単位で得られる。ちゃんとした凡例がないので推測だが、下部の時間幅を調整できる部分が検索量を表しているみたい。これを見ると、2012 年 8 月頃から旭日旗に関する検索が増えたようである。「戦犯旗」という語がこの 2012 年 8 月に出現したことも確かめられる。期間内で最大の burst は 2011 年 1 月、奇誠庸の事件当時。それ以前は、2007 年 9 月と 2008 年 8 月に小さな burst があるだけ。

2015年11月6日追記: 英語版を書いた。ちょっと情報を追加して。改めて少し調べてみたけど、最近またひどいことになっているみたい。

*1:後からのんびりというわけにはいかない場合もある。例えば、中国のネット検閲の検証などは、リアルタイムでデータを集めないといけない。

*2:私がスポーツニュースを一切追いかけていないのが敗因らしい。私が得た結論はよく知られているみたい。

*3:「4月から始める」という予告であれば Internet Archive に残っていた。

JUMAN メモ

黒橋研究室で開発している日本語形態素解析JUMAN についてのメモ。

以前は研究室のページに置いていたもの。長く放置していて内容的に古くなっていたが、最近になって突然晒された。*1文書に日付を入れていなかったのが敗因。この機会に雑記に移すことにした。古くなっても日付を言い訳に使えるし。

以前は中の人だった。どこを直すかという問題意識があった。今は所属も変わって、しばらくはそういうのはいいかなという気分。かわりに、使っている人向けにぼちぼち書き換えようかと考えている。論文には書きにくい小ネタなども。

タスク: 日本語の形態素解析

形態素解析と言っているのは、以下の3つのタスクの同時処理。

  • 分割 (segmentation)
  • 品詞タグ付け (POS tagging)
  • 見出し語化 (lemmatization)

分割は、テキストを形態素に区切ること。形態素というとおっかないが、単語だと思っておけば良い。品詞は「名詞」や「動詞」など。見出し語化という表現は聞き慣れないが、「走れ」のように活用変化した形を基本形の「走る」に戻すこと。

世の中一般的には、形態素解析は分割 + 品詞タグ付け と説明されることが多いが、見出し語化にも触れた方が良いと思う。ここが語形変化のない中国語の処理と決定的に違うところ。中国語の処理と違って辞書ベースの手法が主流なのも、これが大きい。

「X分割」という表現は混乱している。word segmentation の場合、X は分割後の状態だが、text segmentation や query segmentation だと分割対象。

入出力フォーマット

  • 入力は1行1文
  • 出力は1行1形態素
    • 最後の行は EOS (end of sentence)

子ども こども 子ども 名詞 6 普通名詞 1 * 0 * 0 "カテゴリ:人 代表表記:子供/こども"
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
リンゴ りんご リンゴ 名詞 6 普通名詞 1 * 0 * 0 "カテゴリ:植物:人工物-食べ物 ドメイン:料理・食事 代表表記:林檎/りんご"
が が が 助詞 9 格助詞 1 * 0 * 0 NIL
すきだ すきだ すきだ 形容詞 3 * 0 ナ形容詞 21 基本形 2 "代表表記:好きだ/すきだ"
EOS

形態素解析は非常に局所的な文脈しか見ないので、別に複数文を一度に入れてもあまり問題にならない。構文解析でそれをやると、計算量が爆発するし、結果が気持ち悪いことになる。

英数字記号は全角で入力されることを期待している。UTF-8 化 (後述) にあわせて半角入力でもそれなりに処理するようになった。しかし全角に変換しておくことを勧める。出力時のエスケーピングをちゃんとやっていないので、特に記号がらみで事故が起きやすい。

エンコーディング

長らく EUC-JP だった。外部の人が UTF-8 版を作ってくれた。しばらく放置されていたが、時代の流れに逆らえず正式に UTF-8 に移行した。

速度

MeCab とくらべると圧倒的に遅い。しかし中の人には「cat 状態」と認識されている。一般に、形態素解析の結果を受けて何かをしようとすると、後段の処理の方が比較にならないほど遅い。だから JUMAN の速度を改善する動機はとぼしい。

というか MeCab が頑張りすぎである。下手な英語の tokenizer よりもよっぽど速い。気合が違う。

解析結果をルールでゴリゴリ処理するようなアプリケーションを作っている人なら、JUMAN の速度は気にならないはず。でも、KNP で構文解析までやると遅い思う場合は、

juman | knp -tab -assignf

がお勧め。文節まとめあげ + 各種 feature 付与までで打ち切って構文解析をやらない。KNP が吐く feature をうまく使えば、解析結果に対するルールの再発明が減るはず。

内容物

  • プログラム
  • デフォルトの文法辞書
  • デフォルトの形態素辞書

プログラムは古色蒼然としてる。C で書いてある。辞書のデータ構造は、パトリシア木を ChaSen から借りてきたり、double array を MeCab から借りてきたり。

連濁対応などでプログラムの更新もたまにあるが、実質的に辞書のみの更新。

文法辞書と形態素辞書は利用者が自由に定義できるとマニュアルではうたっている。しかしデフォルト以外の辞書が配布されている例を知らない。

ChaSenMeCab は配布のレベルで、プログラムと辞書を分離している。それらに対する辞書としては IPADIC, NAIST jdic, UniDicなどがある。

ライセンス

マニュアルには3条項BSDライセンスが書いてある。このライセンスがプログラムだけでなく辞書に及んでいるかなどはよく分からない。中の人もあまりちゃんと決めていない。

よく分からない問題はいろいろある。最近 Wikipedia を加工して辞書を作っているんだけど、この辞書のライセンスはどうなるのか。テキストの解析結果には辞書の情報が大量に埋め込まれているけど、解析結果を配布するときどうなのかとか。頼まれて以前調べたけど、法律の専門家でも何でもないので私には正解が分からない。詳しい人に教えてほしい。

品詞体系

  • いわゆる益岡・田窪文法
    • 基礎日本語文法』の記述に結構忠実
    • 学校文法 (橋本文法) 系の ipadic の IPA 品詞体系も異なる
      • 相互の変換は困難
    • unidic は unidic で IPA 品詞体系とも違うらしい
      • KyTea のデフォルトモデルは、unidic の品詞の大分類 & 「語尾」(活用語の変化する部分を切り出したもの)

益岡・田窪文法に慣れると IPA 品詞体系には拒否反応が出る。ただ、ナ形容詞と判定詞の区別は微妙。活用変化がほとんど同じなので。

つべこべ言わずに統一してくれよという声はよく聞く。

処理内容

  1. 入力に対して、形態素辞書を引いて出力 (形態素列) の候補を列挙
  2. コストにより最適な候補を選択

候補の列挙

  • 辞書を引く
  • 未知語候補をその場で生成
  • 連濁候補は基本形に戻して辞書を引く
  • 反復型オノマトペはパターンにマッチするものをその場で生成
  • 非標準表記を標準表記に戻して引く

ChaSenMeCab は最初の2つしかやっていない。残りは JUMAN でも比較的新しく入った機能。MeCab だとチューニングしすぎていて入れにくそうな機能。そのうちちゃんと説明するかも。

候補の選択

  • 形態素辞書と連接辞書により、形態素と、形態素同士の連接にコストを付与
  • コスト最小のパスを選択

パラメータ (コスト)

このご時世に人手で設定している。まさに職人芸。単語の生起コストはいい加減でもわりと大丈夫。連接コストは頑張って調整してある。

ChaSen/MeCab はそれぞれ隠れマルコフモデル (HMM)、条件付き確率場 (CRF) により訓練データからコストを学習する。単語の長さがいろいろなので、hidden semi-Markov model や semi-CRF と言ったほうが正確かもしれない。

JUMAN、ChaSenMeCab とも、解候補は同じ構造 (lattice) で表現できる。解探索のアルゴリズムも同じ。コストの決め方に関する考え方が違うだけ。KyTea はまったく異なる。

精度は完全に MeCab に負けている。

ちなみに日本語版 Wikipedia は、長い間、JUMAN は「隠れマルコフモデル」を使っているという誤った説明をしていた。生暖かく見守っていたら、中の人によって修正されてしまった。

人手による連接コストには利点もある。ありえない連接が候補から除外できる。そもそも付属語の連接にはかなりの程度文法的な制約があって、可能な連接は限られている。

一方、MeCab は完全にコーパスから学習するので、あらゆる連接が可能。もちろん変な連接には大きなコストが設定されるので、普段は問題が顕在化しない。しかし、未知語が入ってきたときなどに、どう考えてもありえない解析結果を吐いたりする。MeCab も連接制約のホワイトリストブラックリストを作って入れたらいいのに。

ただ、特に文頭の連接制約はきつすぎて、くだけたテキストの解析がつらい。

同形

  • コストが同じ複数の候補は同形として出力
  • @ から始まる出力行があるもの
    • 出力は単に辞書引きの順番なので、どちらが正しいというわけでもない
    • 方針として、JUMAN は曖昧性の候補を列挙するのみ; 選択は KNP で行う

かぜ かぜ かぜ 名詞 6 普通名詞 1 * 0 * 0 "漢字読み:訓 カテゴリ:抽象物 代表表記:風/かぜ"
@ かぜ かぜ かぜ 名詞 6 普通名詞 1 * 0 * 0 "カテゴリ:抽象物 ドメイン:健康・医学 代表表記:風邪/かぜ"
で で で 助詞 9 格助詞 1 * 0 * 0 NIL
おくれた おくれた おくれる 動詞 2 * 0 母音動詞 1 タ形 10 "可能動詞:送る/おくる 代表表記:送れる/おくれる"
@ おくれた おくれた おくれる 動詞 2 * 0 母音動詞 1 タ形 10 "付属動詞候補(基本) 自他動詞:他:遅らせる/おくらせる 自他動詞:他:遅らす/おくらす 代表表記:遅れる/おくれる"
EOS

  • 同形が出力されるのは分割とコストが同じ場合のみという微妙仕様 (e.g., おさない == 幼い != 押さない) だが、結構使える
  • 同じコストになるのはコストを人手で調整しているから
  • くる:子音動詞ラ行 (繰る) と くる:カ変動詞 (来る) のように品詞が一部違っても同形になる

MeCab は同形の曖昧性を考慮せずにパラメータを推定しているので、どちらとも言えないような場合でも、とにかく一つの解に決めてしまう。N-best にすれば複数の解を出力するが、N をいくつにすれば良いかは事前にはわからない。 そもそも同形の曖昧性解消を N-gram の情報で行うのが適当とも思えないから、JUMAN/KNP の方針は妥当だろう 「おくれた」のような用言の曖昧性解消は、KNP が格フレームを使って行う。修士論文の成果だったと思う。最近の格フレームでどれぐらい正しく曖昧性解消できているかは誰もちゃんと調べていないはず。

辞書の整備方針

  • 形態素数は削減する方向
    • 基本語彙のみを人手で整備し、残りは自動獲得したい
    • 基本語彙には人手で様々な意味情報を付与
      • 意味情報: 形態素解析そのものでは使わないが、係り受け解析や応用処理で使う知識
      • e.g. 代表表記, カテゴリ, ドメイン, 可能動詞, 付属動詞候補(基本) など
  • 新聞記事に出てこない難しい単語や固有名詞などは、IPADIC の方が豊富
    • JUMAN/KNP を用いた日本語固有表現認識の論文でも、精度を上げるために MeCab の解析結果を参照するという変態的な処理をやっている
  • それ以外にも、なぜ登録されているのか不思議な形態素が辞書に残っていたりする

大人が読むテキストには普通出てこないようなひらがな表記も結構登録されている。「かぐ」(家具) とか。おそらく、小学生向けの辞書からの情報抽出を昔やっていたなごり。副作用も結構あって、「茄子」に対する「な子」のような変な混ぜ書きが悪さする。

代表表記

  • 基本語彙に付与されている
  • 表記ゆれをある程度吸収する
    • 風邪, かぜ -> 代表表記:風邪/かぜ
      • 代表表記は単なるキー
      • これが標準的な表記と主張しているわけではない

形態素よりも長いキーフレーズレベルでの表現の揺れの吸収は『キーワード蒸留型クラスタリングによる大規模ウェブ情報の俯瞰』が詳しい (ヒューリスティクスの塊)。解析に使う分には代表表記は便利。ユーザがいる問題設定だと、こんなものをユーザに見せるわけにはいかないので、処理中に、標準的な表記を代表表記といっしょに保持しておかないといけない。

カテゴリ・ドメイン

  • カテゴリは荒っぽい抽象化の単位
  • 付与されたカテゴリの半分ぐらいが「抽象物」
    • 卒論の成果
    • 設計ミスまがいだが、細分化しても取り分がなさそうだから放置してある

カテゴリ・ドメインは言葉の大雑把な分類。この2軸を組み合わせれば、大雑把な分類としては十分ではないかという見通しだったらしい。 他には、シソーラスを使うと権利の問題がややこしいから、独自に作ったとか。

カテゴリは省略解析などで実際に使われている。

かつて、カテゴリ (のサブセット) を自動分類しようとしてひどい目にあった。いまでもトラウマ。そもそも意味的な情報を形態素という単位に与えるところに無理がある。人間の作業者が、直感に基づいて適当に割り当てる分には良いかもしれないが、データに基づいて決めさせようとすると、そのいい加減さに計算機が耐えられない。

その他の意味情報

  • 付属動詞候補(基本)
  • 可能動詞
    • 元の動詞 (戻せる -> 戻す)
  • 自他動詞などの対応関係
    • 自動詞や他動詞、形容詞派生など

「可能動詞」ラベルは、可能で使われる可能性があることを示すだけで、文中の個々の形態素が可能動詞の用法で使われているとは主張していない。これに限らず、JUMAN/KNP では、可能性があるために付与されている情報と、解析の結果 (いくつかの可能性の中から選択された結果) 付与された情報があまり整理されないまま混在している。

自他の対応などは、構文レベルの表現のゆれの吸収を目的に付与してある。

読み

辞書に代表的な読みが書いてある。解析時には辞書引きした結果を表示しているだけ。テキスト中での正しい読みを当てる気はない。数字の読み、音・訓の区別、表記に反映されない連濁の区別は間違っている可能性が高い。

だから転写や音声合成には使えない。UniDic はこのあたりもちゃんとやる方針らしい。いまの形態素解析器が使っている手がかりだけで正しく判別できるのか疑問だけど。

形態素の単位

以前辞書を整理した際に、構成的な語を削除しまくったらしい。それでも単位の不統一は残っている。

テキストの分割方法として、これが正しい単位だという基準が設定できない。辞書に載っているということが一種の基準になってしまっている。

「揺れの少ない斉一な単位」をうたう UniDic でも、直感に反して、「寿司屋」と「家具屋」で分割が違うらしい (未確認)。漢語と和語で扱いが違うとのこと。UniDic は踏み込みたくない領域に踏み込んでいる。

可能性に基づく品詞体系

「可能性に基づく品詞体系」という用語は IPADIC で使われているもの。JUMAN のデフォルトの品詞体系はこうは説明されない。しかし実質的に同じことをやっている。

例えば、「今年」は「今年の目標」であれば名詞として振舞っているが、「今年起きた事件」では連用修飾を行っており副詞的。辞書は「今年」に「名詞 - 時相名詞」という品詞を割り振っている。どちらの文の「今年」に対しても、この品詞を割り振っておしまい。IPADic は、その点を明確にしていて「名詞 - 副詞可能」という品詞が割り当ててある。名詞としても振る舞うし、副詞としても振る舞うということ。

文中でどのような振る舞いをしているかを当てに行くのをはなから放棄している。要するにインチキ。英語の品詞タグ付けとは大違い。

誰が名詞用法と副詞用法を区別しているかというと、文節まとめあげや係り受け解析で暗黙的に行っている。

一応区別はしているものの精度が悲惨な例もある。「で」の曖昧性問題。「京都は大学の町で観光地でもあります。」という例文では、「町で」の「で」は判定詞だが、「大学の街で観光した。」だと格助詞。いまの形態素解析器が見ているような局所的な手がかりでは区別しようがない。

動詞の連用名詞化

動詞の連用名詞化は、IPADIC では「可能性に基づく品詞」を採用していないけど、JUMAN では採用している。例えば動詞「遊ぶ」の連用形「遊び」。「外で遊び家に帰る」だと動詞用法だけど、「遊びを楽しむ」だと名詞用法。IPADIC では、動詞と名詞の両方が辞書登録してある。しかし MeCab の解析結果は不安定。「買いに行く」の「買い」をいろんな動詞に入れ替えてみると、名詞と解析されたり、動詞と解析されたり。

JUMAN はいずれの用法でも動詞の「基本連用形」とする。名詞用法のものは KNP が名詞に変換するという運用。この変換はちょっと面倒。名詞にすると活用しない扱いなので、見出し語 (JUMAN 用語では原形) もあわせて「遊ぶ」から「遊び」に変更しないといけないとか。こういう変換処理がプログラム内にベタ書きしてある。

JUMAN 的には KNP の担当になっているが、名詞用法の判定は難しい。上記の「外で遊び家に帰る」なら「遊び家」という複合名詞はありえない。「彼を操り人形にした」なら「操り人形」という複合名詞を採用する解釈が自然。「彼を操って人形にした」という解釈も可能だけど。KNP はどう処理しているかというと、明らかなものはルールで決め、残りはウェブコーパスから作った共起の統計量をもとに判定している。

京大テキストコーパスは KNP 仕様で、名詞と動詞の用法を区別している。MeCab のもととなった CRF モデルの論文の比較実験が、このあたりをどう処理したのか、いまだに把握していない。

その他の雑多な問題

悩ましい問題はいろいろあって、京大テキストコーパスアノテーションガイドで言及されている。形態素関連は3節。

コーパスアノテーションガイドはいろんな知見がつまっていて面白い。みんなもっと読んだらいいのにと思う。

*1:Internet Archive によると2009年1月には移設前の状態だったみたい。