豪鬼メモ

一瞬千撃

和英辞書EDict2の統合

「だらしない」って英語でなんて言えばいいかわかるだろうか。文脈に応じた適切な語を選択するには、辞書になるべく多くの訳語を収録しておく必要がある。そこで、WordNetWiktionaryの統合英語辞書に、フリーの和英辞書EDict2をさらに統合してカバレッジを向上させた。
f:id:fridaynight:20211220121453p:plain


何度も書いていることだが、WordNet英語版とWiktionary英語版を統合して英英辞書を作り、その上に日本語WordNetWiktionary日本語版に訳語をつけることで、十分な利便性の「英英和辞書」を構築し、検索することができる。それからKindle用の辞書データも生成できる。WordNetが基本語彙を確実に押さえ、Wiktionaryロングテイルを拾うので、単語や熟語のカバー率については市販の中辞典クラスを上回っている。和訳の速読性と英文語義説明の情報量を併せ持つので、英文読解に使うのには最適な辞書に仕上がっている。

さて、英和方向のカバー率を考えれば既に十分なのだが、和英方向で考えると不満が少しあった。和英辞書は主に英作文に使うことになるが、その際には日本語の慣用句を英語に翻訳したくなることが多い。もともと英語脳で文を組み立てる人にはそのステップは存在しないのだが、和英辞書を使うということはそうではない。脳内にある日本語の文を英語に翻訳するという作業を行うことになる。そして、我々普通の日本人は、「外れる」みたいな基本的な動詞ですら、その訳語「come off」がすぐには脳内に出てこないので、辞書を引く羽目になる。
f:id:fridaynight:20211219161801p:plain

「外れる」のような基本語は検索しやすいのでまだ良い。英和辞書を構築する際に「come off」の訳語として基本語である「外れる」がつけられることは高い確率で期待できる。それを転置すれば和英辞書として十分に機能する。一方で、いわゆる慣用句についてはそうはいかない。例えば「水を差す」に相当する英語の表現として、「rain on one's parade」とか「pour cold water on ...」とかがあるが、英和辞書としてのそれらの訳語に「水を差す」が採用される確率はそれほど高くない。「台無しにする」「白けさせる」とか訳されていても英和辞書としては全く問題ないし、より直訳調に「雨を降らせる」「冷水をかける」と書いてあってもおかしくはない。英和辞書は国語辞典ではなく、訳語として関連しそうな日本語の慣用句を列挙していたら分量が多くなりすぎるので、WordNetWiktionaryであっても和英方向のカバー率は期待できない。対訳コーパスからそれっぽい訳語を拾ってみても、慣用句は複数語からなるので難しい。

そこで、オープンなライセンスで使えるJMDict/Edictというデータを使わせてもらう。具体的にはその中のEDict2という和英辞書のデータを利用する。Edict2は日本語の語彙に対して英語の訳語を割り当てるという方法で生成されているので、慣用句にも強い。「水を差す」に対して「hinder」「hamper」「estrange」などの「邪魔をする」という意味の単語を教えてくれるだけでなく、「dilute with water」「pur water」「put a damper on」「throw cold water on」といった英語の類似慣用句も教えてくれる。素晴らしい仕事だ。和英辞書は単なる英和辞書の転置ではないということを教えてくれる。それとWordNetWiktionaryを組み合わせれば、和英方向のカバレッジが上がり、英作文にもより使いやすくなるはずだ。

さらに、Wiktionaryから和英方向の語義も取得するようにした。今までは英語の見出し語の記事のみを処理して英英辞書の語義説明を取り出していた。最新版からは、日本語の見出し語の記事を別途処理して、和英方向の翻訳情報を抽出する。例えば「水を差す」という見出し語の記事にはは「[verb] to pour water (into); to dilute with water」「[verb] (idiomatic) to hinder; to hamper; to throw cold water on; to put a damper on; to estrange (people)​」という語義説明が書いてあるので。それらを処理して"pour water" -> "水を差す", "dilute with water" -> "水を差す", "hinder" -> "水を差す" などの翻訳情報を得ることができる。

Edict2やWiktionaryから多くの慣用句が取得できたとして、それをWordNetに適用するのにまた苦労がある。WordNetは単語に対しての辞書ではなく、synsetと呼ばれる「意味」を単位とする辞書である。synsetに対して、その語義説明と、それに属する語句のリストが結び付けられている。よって、語句を単位とする一般的な和英辞書を構築する際には、語句のそれぞれが複数のsynsetを持ち、そのそれぞれのsynsetが訳語のリストを持つという階層構造を扱うことになる。しかし、Edict2などから取得した訳語は、語句に結び付けられているが、synsetには結び付けられていない。なので、個々の語句の訳語をうまいことsynset毎に分類せねばならない。

例えば「beat」という単語は、31個ものsynsetに属する。「心臓の鼓動」「心拍」といった意味のsynsetもあれば、「音楽の拍子」「ビート」といったsynsetもあれば、それらの動詞表現のsynsetもある。「倒す」「打ち破る」といった意味のsynsetもあるし、「泡立てる」「撹拌する」といった意味のsynsetもある。

Edict2からは、「beat」に相当する日本語訳として以下の語が得られる。

しばく, どやす, なぎ倒す, 薙ぎ倒す, タクト, ビート, 一巡, 一本取る,
殴り付ける, 殴りつける, 撲る, 殴る, 擲る, 降す, 下す, 割解す, 割り解す,
駆り立てる, 狩り立てる, 駆りたてる, 駆立てる, 遣っつける, やっ付ける,
遣っ付ける, 鼓す, 鼓する, 鼓動, 参らせる, 手を出す, 手をだす, 切れる,
掻き立てる, 掻きたてる, 搔き立てる, かき立てる, 打つ, 打つ, 撲つ, 撃つ,
敲く, 叩く, 倒す, 殪す, 仆す, 斃す, 破る, 敗る, 拍, 拍子, 泡立てる, 鳴らす

それぞれの訳語を採用するかどうか判定し、採用するならばどのsynsetに属させるかを決めねばならない。まず考えたのは、日本語WordNetの類義語データを使う方法だ。日本語WordNetの訳語やsynsetに対してつけられている。また、おそらく同一のsynsetに属しやすい語句を判定することで作られたのであろう類義語データベースが付属している。日本語WordNet由来で既に個々のsynsetに割り当てられた語の類義語をそのsynsetに割り当てていけば、それなりの数の訳語が拾える。しかし、日本語WordNetの訳語も、一部の重要語のもの以外は機械的に抽出されているので、基本語に偏る傾向があり、「水を差す」のような慣用句は類義語データベースにも現れにくい。

次に考えたのが、synsetのネットワーク構造を使うことだ。具体的には、上位語と同義語を使う。例えばbeatにおいて「倒す」「打ち破る」という意味のsynsetにはその上位語として「defeat」「overcome」といった語が登録されている。同義語としては「shell」「crush」「beat out」などが得られる。それらに共通して現れる訳語としてまさに「倒す」「打ち破る」得られる。日本語WordNetの訳語を生成する際に既に同じようなアルゴリズムが適用されているっぽいが、さらにEdict2等のデータも含めて伝搬させると、より多くの共通語彙が拾える。そうして得られた「倒す」という上位語または同位語の共通語彙を使って、自身の訳語候補を拾っていく。完全一致で拾えないものは、類義語や部分一致で拾う。「倒す」の部分一致として「なぎ倒す」などが得られる。「殴る」の部分一致として「殴りつける」を得るには活用や語尾の問題などを処理する必要があるが、それについては今後の課題だ。

以上の工夫をしても、どのsynsetにも割り当てられない訳語は残る。「水を差す」はやはり無理だった。仕方ないので、「どのsynsetに属すかはわからないが、とりあえずその語の訳語としては妥当な語のリスト」という属性を用意して、各語に持たせることにした。辞書の検索結果を表示する際には、各synsetの訳語を抽出するとともに、synsetに帰属しない訳語も参加させて、投票によって代表的な訳語を決める。和英辞書検索の索引を作る際にも同様の手順を用いる。
f:id:fridaynight:20211220122232p:plain

結果として、「水を差す」でも一応検索できるようにはなった。しかし、まだ不満がある。EDict2の訳語をWordNet+Wiktionaryのエントリに紐付けるという方法だと、EDict2の語彙とWordNet+Wiktionaryの語彙の共通集合を取る形になるために、日本語ベースでEDict2ほどのカバレッジが得られないということだ。例えば、EDict2には「駄菓子」の訳語が「cheap sweets」だと書いてあるが、WordNetにもWiktionaryにも「cheap sweets」のエントリは存在しないため。このままだと使えない。ならば、「cheap sweets」というエントリを作ってしまえば良いことになる。それはEDict2を完全に転置して英和辞書を構築するのと同義になる。しかし、さすがにノイズが多すぎる。「8月」の訳語に「eighth month of the lunar calendar」なんてのもあるが、そんな誰も使わないようなフレーズまで辞書に入れていたら肥大化しすぎてしまう。よって、EDict2を転置してエントリを作りつつも、言語モデルで訳語の出現確率を求めて、それが一定以上のもののみを収録することにした。
f:id:fridaynight:20211221141911p:plain


まとめ。WordNet+Wiktionaryの統合辞書にEdict2を加えたことにより、特に和英辞書検索のカバレッジが向上した。日本語の慣用句の英訳を検索をする際には簡単な語句に言い換えるのがコツだが、EDict2由来のデータはその負担をだいぶ軽減してくれる。「紛れもない」「しどけない」「いざこざ」「うざい」「しょぼい」「お決まり」とかでも検索できるようになったのは嬉しい。