豪鬼メモ

一瞬千撃

ChatGPTで日本語WordNetモドキを作る

WordNetの語義説明をChatGPTに解釈させて日本語WordNetモドキを作った。見出し語と語義と翻訳のTSVデータはこちらである。その他のメタデータも含めたTSVデータはこちらである。また、その結果を統合英和辞書に組み込んで、語義と訳語の対応の精度を向上させた。最新版の検索サイトはこちらで利用でき、Kindle版の英和辞書はこちらでダウンロードできる。


WordNetは英語の言葉を意味ごと20万個ほどのクラスタに分類してそれぞれに語義説明をつけたものだ。また、日本語WordNetというプロジェクトがあり、それはWordNetの個々の語義に簡潔な日本語訳をつけてくれるものだ。双方を組み合わせると簡潔な英和時点を作ることができ、私の統合英和辞書でもそのデータを使っている。

日本語WordNetを作る作業はChatGPTでもできそうだと思って、実際にやってみた。以前の記事でやったように見出し語毎の訳語を自動生成するのではなく、見出し語の語義毎の訳語を自動生成するというのが要点だ。例えば、「top」は「頂上」「蓋」「超える」「上着」「コマ」などを意味する別個の語義を持つ。その全部の訳語を分類したまま網羅したい。よく使う日常語ほど多義語であることが多く、多義語を理解するには語義毎の訳語を見るのは有用だ。

ChatGPTに投げるプロンプトには三つの種類が考えられる。一つ目は、直接アプローチと呼ぼう。語義の英文だけを与えて、その日本語訳を生成させるものだ。二つ目は、間接アプローチと呼ぼう。語義の英文を与えてそれに該当する英語の言葉を推測させて、さらにその日本語訳を生成させるものだ。三つ目は、分離アプローチと呼ぼう。語義の英文と該当する英語の語彙を与えて、その日本語訳を生成させるものだ。いずれの場合も、品詞情報も指示する。

直接アプローチでは、語義と品詞のみを指定し、直接的に訳語を生成させる。こんな感じだ。「one-word Japanese translations」という指示が試行錯誤の賜物で、辞書に載せられるような完結な訳語が欲しい場合にはこれが最適だ。

Generate five one-word Japanese translations of an English word whose meaning is "a successful ending of a struggle or contest" and its part of speech is noun.
- 勝利
- 成功
- 完遂
- 終結
- 達成

間接アプローチでは、語義と品詞のみを指定し、それが示す英語の語彙を推定させた上で、その訳語を生成させる。こんな感じだ。

Speculate three English words which mean "a successful ending of a struggle or contest" and its part of speech is noun. Then, generate five one-word Japanese translations for each of them.
Victory
- 勝利
- 征服
- 輝煌
- 成し遂げること
- 究極の結果

Triumph
- 大勝利
- 優勝
- 成功の極地
- 活力の勝利
- 誇示

Conquest
- 征服
- 制圧
- 攻略
- 占領
- 鎮圧

分離アプローチでは、語と語義と品詞を指定して、その訳語を生成させる。こんな感じだ。同一語義を共有する語の分だけ複数回に分けて呼び出す。

Generate five one-word Japanese translations of an English word "triumph" which means "a successful ending of a struggle or contest" and its part of speech is noun.
- 大勝利
- 勝利
- 成功の極地
- 活力の勝利
- 誇示

個々のsynset(語義=意味のクラスタ)に訳語をつけたいならば、直接アプローチが最も率直な方法であり、入出力のデータも小さいのでコスパが良い。英和辞書として個々の英語の語彙に訳語をつけたいならば、分離アプローチが最も率直な方法である。しかし、語彙数の分だけ実行する必要があってコスパが悪い。間接アプローチは両者の折衷のようだが、synsetに含まれない語彙を推測するリスクがあって、コスパが良いかどうかはやってみないと分からない。

いろいろ悩んだが、金に糸目をつけず、直接アプローチと分離アプローチの両方をやってみることにした。直接アプローチの結果は、意味の把握には便利だが訳語としては最適でないことが多い。分離アプローチの結果は、訳語としては適切だが同一語の別語義の間での差別化ができないことが多い。よって、両者の結果を併用することが最善だと考えた。結果として、見出し語とsynsetのペアに対して訳語の候補のリストが紐付けられた結果が得られた。以下に例を示す。

triumph 07473441-n 大勝利, 勝利, 成功の極地, 活力の勝利, 誇示, 成功, 完遂, ...
triumph 01101734-v 勝利を収める, 勝利する, 勝つ, 打ち勝つ, ...
victory 07473441-n 勝利, 征服, 輝煌, 成し遂げること, 究極の結果, 成功, 完遂, ...

ChatGPTが生成した訳語が必ずしも正解とは限らない。「成功の極地」とか「輝煌」とか、普通使わないような訳語も生成されてしまう。よって、既存データと照合して、それっぽい訳語だけを選抜することにした。既存のデータとは、Wiktionaryや日本語WordNetなどから抽出した訳語のリストと、DeepLに生成させた訳語のリストと、自前の対訳コーパスから抽出した訳語のリストである。

直接アプローチと分離アプローチで同じ訳語が生成された場合も、それを採用する。例えば「a state of danger involving risk」の訳語として「危機」があり、またその語義を持つ「peril」の訳語としても「危機」が生成されたならば、それは信頼できるので採用する。さらに、同一語義の同義語である「riskiness」や上位語である「danger」や下位語である「speculativeness」の訳語に「危機」があった場合にも、採用する。別室で取り調べた容疑者二人が同じ供述をしたならば、その内容は信頼できるだろう。

結果として、約20万個のsynsetの中で約18万個に訳語をつけることができた。見出し語に着目すると、約15万語の中で約13万語には訳語をつけることができた。主要13万語をカバーしているならば、日常使いの英和辞書として十分だろう。訳語の精度もまずまずだと思う。「この訳語全然違うじゃん」みたいなのはほとんどなく、悪くとも「最適な訳語とは言えないけど、まあ気持ちはわかる」というものが混じる程度だ。典型的な例として「bank」の結果を見てみよう。

  • [noun]: a financial institution that accepts deposits and channels the money into lending activities
    • 銀行, バンク, 銭荘, 預金金融機関
  • [noun]: a building in which the business of banking transacted
    • 銀行, バンク, 貯蔵所, 倉庫
  • [noun]: sloping land (especially the slope beside a body of water)
    • バンク, 土手, 岸, 坂, 岸辺, 斜面, 岸べ, 傾斜
  • [noun]: a supply or stock held in reserve for future use (especially in emergencies)
    • 銀行, 預金, 貯金, 貯蓄, 貯蔵, 蓄え
  • [noun]: the funds held by a gambling house or the dealer in some gambling games
    • 銀行, 手元金, 元手, 持ち金, 現金
  • [noun]: a long ridge or pile
    • バンク, 土手, 堤, 堤防, 堆, 岸, 州
  • [noun]: a container (usually with a slot in the top) for keeping money at home
    • 銀行, 貯金箱
  • [noun]: an arrangement of similar objects in a row or in tiers
    • バンク, 列, 並び
  • [verb]: put into a bank account
    • 預金する, 預ける, 貯金する, 入金する, 預託する, 供託する, 預け入れる, 銀行に預ける
  • [noun]: a flight maneuver; aircraft tips laterally about its longitudinal axis (especially in turning)
    • バンク
  • [verb]: have confidence or faith in
    • 信頼する, 頼る, 見込む, 信用する, 委託する, 信憑する, 頼む, 任せる
  • [verb]: tip laterally
    • バンク, 傾く, 傾ける, 傾斜する, 横に傾く, 横に傾ける
  • [noun]: a slope in the turn of a road or track; the outside is higher than the inside in order to reduce the effects of centrifugal force
    • 傾斜, 斜面, 傾斜面, 傾き
  • [verb]: enclose with a bank
    • 堤防, 土手で囲む
  • [verb]: act as the banker in a game or in gambling
    • 銀行業務を行う
  • [verb]: be in the banking business
    • 銀行業に従事する
  • [verb]: cover with ashes so to control the rate of burning
    • 灰で覆う
  • [verb]: do business with a bank or keep an account at a bank
    • 取引する, 銀行業を営む, 銀行する, 築堤する, 銀行を経営する, 銀行に預ける, 銀行に預金する

やはり訳語があると理解しやすい。英英辞書に訳語がつくことで、内容の正確性と理解の効率性が両立できる。プログレッシブ英和辞書でもラーナーズ英和辞書でも英辞郎でも、ここまで親切には語義説明をしてくれない。このデータを統合することで、統合英和辞書ならではの利便性が増した。稀な語のカバレッジWiktionaryが強いが、頻出多義語の稀な語義の用例のカバレッジWordNetが強い。そこで、双方の良いとこ取りをするのだ。

まとめ。ChatGPTに語義の英文を翻訳させることで、日本語WordNetのように、意味のクラスタ毎に適切かつ簡潔な日本語訳をつけることができた。やっぱ英語の語彙のデータソースとしての利便性はWordNetが最強であり、その日本語訳の精度が上がるのは嬉しい。辞書を作らなくても毎回ChatGPTに聞けばいいという話もあるが、辞書データとして抽出しておいた方が素早く一覧できて便利だ。大量のデータ処理をしたので作るのに金はかかったが、一度作っておけばそれ以上はかからない。

余談。最近driving 4 answersというYoutubeチャンネルをよく見ている。エンジンの仕組みについて素人が持ちそうな素朴な疑問に明快に答えてくれる内容だ。ちょっと訛りのある解説者なのだが、語彙や文法が教科書的でとてもわかりやすいし、話が論理的なので自分が理解しているかどうかの判断がつきやすい。図解も非常に優れていて、魅力のある講義の好例だ。とはいえ、エンジンの排気量のことを「displacement」と言うのとかは私は知らなかったので、ちょこちょこ辞書を引く羽目にはなった。日本語だとMoto-Ace VLOGというチャンネルも面白い。これはバイクのエンジニアリング周りやその他の四方山話を丁寧に解説してくれる内容なのだが。やはり論理的で明快な解説をしてくれるので、見終わった後に自分がひとつ賢くなった気分になれる。あと、テーマに沿って漫画やアニメを紹介する「まんが未知」って番組もめっちゃ楽しい。紹介されるタイトルの魅力に関してMCの二人が的を射た表現をしてくれるのが痛快だ。とかやってエンタメ漬けになってると、英語勉強する時間なんて全然とれねー。