豪鬼メモ

一瞬千撃

Wiktionaryの語義を使ったルールベースの訳語伝搬

Wiktionary英語版の語義説明を利用してWiktionary日本語版と日本語WordNetの訳語を伝搬させてカバー率を向上させる方法について述べる。これを行うと、新たに1万語くらいに訳語を付与することができ、かなりの難解語にも訳語が割り当てられることになる。これで統合英和辞書の語彙数は246299語になり、語彙力年齢診断の問題数も81871語になった。難解語の多様性が増したことで上位年齢の精度が向上したように思う。


英英辞書を引いていてムカつくことの一つが、二重引きを前提とした、たらい回しの語義説明に当たることである。「draconianly」を調べて「in a draconian manner」と言われてしまうやつである。読者をなめてんのかよ。今まで作ってきた統合辞書には「draconian」の訳語として「厳格な」「厳しい」などが収録されているが、それよりも出現頻度が劣る「draconianly」には訳語が収録されていない。その場合にはWiktionary英語版の語義説明で補ってくれということになるのだが、それがたらい回しの説明になっている場合、利便性が著しく損なわれてしまう。

たらい回しであると分かっているならば、その参照先の訳語を引っ張ってきて収録してしまえばいい。「in a xxx manner」というような言い回しは副詞の派生語の語義説明として頻出するので、簡単な正規表現のルールを書けば「xxx」の部分が取得できる。そして、その「xxx」の訳語を拝借してくれば良い。他にもいくつかパターンを列挙すれば、訳語のカバー率が目に見えて上がるだろう。で、いろいろ検討した結果、以下のようなルールを見出した。

  • in xxx (manner|fashion) : 形容詞または名詞を参照して、「xxxの方法で」「xxxように」「xxxらしく」という意味を示す
    • 例: uxorially = in an uxorial manner
  • (of|in|at|from|relating to|related to|associated with|characterized by|pertaining to|derived from) xxx : 名詞を参照して、「xxxの」「xxxに関する」という意味を示す。
    • 例: reminiscent = relating to reminiscence
  • xxx : 単体で単語のみが書いてある場合、その単語を言い換えとみなす。
    • 例: sublate = negate

実際には、単に正規表現では済まずに、もうちょい複雑なルールが必要になる。

  • "of, related to, or characterized by xxx" といったor連結の接頭辞を適切に認識する。
  • "to negate" のような動詞の語義説明のto不定詞を原型に直す。
  • "a", "an", "the" が名詞の前についた場合には無視する。
  • "negate, deny, or contradict" のようなor連結の言い換えを個々で処理する。
  • "negate; deny; contradict" のようなセミコロン連結の言い換えを個々で処理する。

これだけのルールで、1万語もカバーできるのだ。もうちょいカバー率を上げるなら「out of」とか「typical of」とかも拾いたいところだが、切りがない。また、「a xxx person」「a person of xxx」を「〜の人」と訳すとか、「a xxx place」「a place of xxx」を「〜の場所」と訳すとかいうように名詞に紐づけて訳語を伝搬させるようなルールも考えられるが、それをやりだすとルールベースの翻訳システムを実装するのと同義になるので、それも今は控えておく。既存の機械翻訳のサービスを使ってWiktionaryの語義を訳すという方法も考えられるが、新たな精度の問題が発生するので簡単ではない。

ついでに、"loudness" が "loud" から派生するなど、接尾辞から品詞と語幹が明白で、かつ品詞が変更される以外の付加的な意味変化がない場合には、訳語の伝搬を行う。語幹はWiktionaryの語源情報かWordNetの派生語から取得できる。

  • 名詞であり、接尾辞が "ness", "cy", "ity" である場合
    • 形容詞を優先参照して、「xxxであること」という意味を示す。
  • 名詞であり、接尾辞が "ment", "tion", "sion" である場合
    • 動詞を優先参照して、「xxxすること」という意味を示す。
  • 形容詞であり、接尾辞が "ic", "ical", "ish", "ly" である場合
    • 名詞を優先参照して、「xxxの」という意味を示す。
  • 副詞であり、接尾辞が "ly" である場合
    • 形容詞を優先参照して、「xxxに」という意味を示す。

この接尾辞のルールもかなり強力で、語義のルールと同じく1万語くらいをカバーできるが、その多くの部分は語義のルールの適用範囲と被っているので、実質的には5000語に届かないくらいだ。しかし、接尾辞のルールの方が語義説明のルールよりは単純明快なので、実装する価値はある。接尾辞の種類はもっとたくさんあって、例えば、 "er" や "or" で人を表したり "ism" で主義を表したりといったものを拾うこともできるが、やはり切りがないのでやらない。

ルールで特定した参照先の単語から訳語を取得する際には、同じ品詞の訳語を優先して選択する。しかし、必ずしも想定した品詞の訳語がとれるわけではない。また、参照先の英語の品詞が同じだったとしても、その訳語の品詞が同じとは限らない。したがって、その訳語をそのまま採用すると不自然になることがある。そこで、訳語を適当なルールで変換しておきたい。例えば「aerial」には名詞「アンテナ」と形容詞「空中の」という意味があるが、形容詞から参照される場合には「空中の」を選択すべきだ。副詞「aerially」の「in an aerial manner」を経由して参照される場合、副詞ではなく形容詞を優先する。さらに、「aerially」は副詞なので「空中の」でなく「空中で」にした方が自然だ。「draconinanly」は副詞なので「厳しい」でなく「厳しく」にした方が自然だ。その変換も、Mecab形態素情報を得てから簡単なルールで処理すれば、だいたいうまくいく。

  • 名詞の場合
    • 以下の接尾辞を消す
      • "する", "される", "された", "ような"
      • 例: "脱却する"->"脱却"
    • 最後の形態素が形容動詞語幹とそれに伴う "な" の場合、その語幹にする
      • 例: "豪快な"->"豪快"
    • 最後の形態素が形容詞で "い" で終わる場合、それを "さ" に変える
      • 例: "美しい"->"美しさ"
    • 最後の形態素が動詞か形容詞の場合、"こと" をつける
      • 例: "走る"->"走ること"
  • 動詞の場合
    • 最後の形態素がサ変動詞語幹の場合、"する" をつける
      • 例: "跳躍"->"跳躍する"
  • 形容詞の場合
    • 以下の接尾辞を消す
      • "する", "される", "された", "ような"
      • 例: "脱却する"->"脱却"
    • 最後の形態素が名詞の場合、"の" をつける
      • 例: "脱却"->"脱却の"
    • 最後の形態素が動詞の場合、"ような" をつける
      • 例: "走る"->"走るような"
  • 副詞の場合
    • 以下の接尾辞の変換ルールを適用する。
      • "する"->"して", "される"->"されて", "ような"->"ように", "らしい"->"らしく", "とした"->"として"
      • 例: "運動する"->"運動して", "妻らしい"->"妻らしく"
    • 最後の形態素が形容詞で "い" で終わっている場合、それを "く" にする
      • 例: "美しい"->"美しく", "素早い"->"素早く"
    • 最後の形態素がサ変動詞語幹の場合、"して" をつける
      • 例: "運動"->"運動して"
    • 最後の形態素が形容動詞語幹の場合、"に" をつける
      • 例: "静か"->"静かに"
    • 最後の形態素が名詞の場合、"で" をつける
      • 例: "空中"->"空中で"
    • 最後の形態素が助動詞の "た" の場合、それを"て" にする
      • 例: "間に合った"->"間に合って"
    • それ以外で、"て" や "で" で終わらない場合、"ように" をつける
      • 例: "走る"->"走るように"

このあたりのルールも、コーナーケースをつき始めると切りがないので、適当なところで諦める。辞書としては品詞も表示されるので、元々の意味さえきちんと取れていれば、表記に多少のぶれがあっても問題はない。

こうした地道な努力をすると1万語に対する訳語を新たに獲得できるのだが、実用的な意味がどれほどあるのかと疑問に思われるかもしれない。しかし、確実に意味がある。そもそも私がこの辞書の改良を思い立つのは、英語の小説を読みながら実際に使う中で、適切な訳語が出なくて苛つく事態が起きた時なのだ。"papally" の正確な意味が知りたいとして、その時点で「papalな感じで」っていうような意味であることは予想がつくわけだが、辞書を引いてみたら "in papal fashion" って表示された時にガッカリしない奴はいない。私はそのような経験を何度もした。この伝搬アルゴリズムを導入すると、"papal" は「ローマ法王の」という意味なので、"papally" の訳語として「ローマ法王で」というのが表示されるようになる。理想的には「ローマ法王のように」「ローマ法王のような方法で」とかにしたいところだが、翻訳システムを作っているわけではないので、流暢さは大した問題ではない。今読んでいる小説でよく現れる「on the double」にも訳語が付与されていなかったが、「rapidly」から「直ちに」という和訳を借用して付与することができた。

「ly」による副詞化とか「ness」による名詞化とかで作られた派生語は、意外に簡単な言葉でも訳語がついていないことがある。簡単な言葉であればそもそも辞書を引く必要がないと思われるかもしれないが、簡単な語を知らなかった時にこそ辞書を引くべきなので、その際に二重引きを強いられてやる気が削がれるのは避けたい。もちろん、難解語であれば未知語である可能性も高いので、それはそれで辞書を引きたくなる。そして難解語ほど、単なる言い換え表現で説明をすませる傾向があるので、今回のアルゴリズムが有効に機能する。単なる言い換えでない長い説明文がある場合は訳語が取得できないが、説明的な場合は難しい単語を含まないことが多いので、訳語がなくても二重引きの必要はない。

取得できたものを無作為抽出して並べてみよう。そこそこちゃんとした訳語になっていることがわかるだろう。参照先が多義語であることで齟齬のある語義を拾うリスクもあると覚悟していたのだが、ざっと見る限り明白に不相応なのはなかった。

circinately : 環状で
baronially : 堂々たる
gunky : 脂ぎった
soleal : ヒラメ筋の
hemiplegia : 片麻痺
recurvate : 反り返った
help desk : ヘルプデスク
spay : 卵巣を除去する
hysterically : ヒステリックに
grandparental : 祖父母の
melasma : 肝斑
paltrily : つまらなく
calligraphist : 書道家
primogenitureship : 長子であること
mannerless : 不躾の
head doctor : 精神科医
adsuki bean : あずき豆
unfoldingly : 展開して
Wassermann : ワッセルマン反応
prayerish : 信心深い
fancy house : 売春宿
preemptively : 先制して
common meter : 普通律
amphoion : 両性イオン
hincty : うぬぼれた
paleozoology : 古動物学


まとめ。Wiktionaryの語義説明にルールを適用して、言い換え表現の参照先である語を特定し、そこから訳語を引っ張ってくれば、英和辞書のカバー率を引き上げることができる。それによって二重引きをしなければいけない確率が下がるので、利便性が向上する。この統合辞書は、自分で普通に実用しているし、そんじょそこらの無料辞書よりも使える品質に至っていると思うが、欲を出すと切りがないな。これで完成と思ってしばらく使っていると、ちょっとした改良案を思いついてしまうので、いつまでも完成しない。