豪鬼メモ

一瞬千撃

ChatGPTで英語の類義語を生成して英和辞書を鍛える

ChatGPTに英語の重要語彙12万語の類義語を生成させた。結果はこちらのTSVファイルとして置いておく。このデータを使って英和辞書の利便性を向上させる手法についても述べる。


ChatGPTのプロンプトに「12 shortest synonyms of "dash"」とか入力すると、「dash」の12個の類義語を教えてくれる。結果は以下のようになる。

  • Sprint
  • Rush
  • Bolt
  • Scamper
  • Dart
  • Gallop
  • Hasten
  • Charge
  • Zip
  • Flash
  • Whisk
  • Fly

「shortest」は付けなくてもいいが、付けないとたまにやたら長いフレーズが出力されるので、付けておいた方が無難だ。また、「synonyms」の代わりに「paraphrases」と書いてもよいが、「synonyms」の方が精度が高い気がする。12個より多くの結果を取得しても良いが、多く出しても下位の方は精度が下がるので、12個くらいが実用的だろう。重量課金のAPIを使ってデータを集めるので、出力が大きすぎると金が勿体ないというのもある。APIの使い方は以前に例文を生成した記事で説明した。

同様に、「run」の類義語を生成させると、以下のリストが得られる。「run」の類義語に「dash」が含まれるが、「dash」の類義語に「run」は含まれない。このような非対称性があるのが類義語の面白いところだ。

  • Sprint
  • Dash
  • Jog
  • Trot
  • Gallop
  • Scamper
  • Hurtle
  • Bolt
  • Rush
  • Zoom
  • Dart
  • Skip

今回は逆方向の参照を転置したデータも結合して、再現率を向上させる。結果として「dash」の類義語として「run」やその他の類義語も拾えることになる。転置部分の要素は語の重要度でソートしてある。結合したデータはこのTSVファイルである。以下に例を示そう。

Republican GOP, conservative, right-wing, red, elephant, ...
unique rare, singular, uncommon, distinctive, exceptional, ...
border edge, boundary, limit, perimeter, frontier, ...
safety security, protection, shelter, sanctuary, refuge, ...
shop store, boutique, market, outlet, emporium, ...
attend go, show up, be present, participate, join, ...
traditional conventional, classic, time-honored, old-fashioned, established, ...
dry arid, parched, dehydrated, withered, desiccated, ...
label tag, sticker, marker, tab, badge, ...
normal regular, typical, standard, average, common, ...
convert shift, alter, transform, change, modify, ...
officer cop, agent, guard, marshal, warden, ...
brand mark, logo, label, trademark, emblem, ...
Red scarlet, ruby, crimson, cherry, Burgundy, ...
Britain UK, England, Albion, Great Britain, Britannia, ...

ちなみに、ChatGPTに英単語のリストを生成させると、先頭の文字を大文字にするキャピタライズ処理が行われることがほとんどだ。「Do not capitalize them.」とか指示すると抑制できるが、そうすると「Japan」や「USA」も「japan」や「usa」にしてしまう。「Keep the natural letter case.」とかの指示は無視してくる。学習データにない指示は、簡単なタスクでも遂行できないっぽい。仕方ないので、自前の言語モデルでどの形が最頻出するのかを調べて標準化している。「polish」(磨く)と「Polish」(ポーランドの)みたいにどちらも妥当な場合にはうまく行かないが、大抵のケースではうまくいく。

この類義語データベースは、以下の4つの用途で使う。

  • WordNetの語義の順位付け
  • WordNetの和訳の順位付け
  • 辞書の内容として表示
  • 類義語検索の順位付け

WordNetにおいては、各々の見出し語の語義は順不同である。例えば、「dash」の語義として、「run quickly」と「a punctuation mark」があるとして、それらに順序はない。しかし、辞書に収録する際には、重要な語義から先に提示したい。ところで、「run quickly」という語義の類義語には「sprint」、上位語には「run」、下位語には「break」がある。「a punctuation mark」という語義の類義語には「hyphen」がある。さて、ChatGPTは「dash」の代表的な類義語として「sprint」「rush」「run」等があると教えてくれている。ならば、代表的な類義語を含む語義を優先させれば、代表的な語義が選べる。それはおそらく重要な語義だ。

日本語WordNetは、WordNetの個々の語義について和訳の候補を教えてくれる。候補の数は多数あるが、その中から最も適切なものを選びたい。従来から、機械翻訳の結果や対訳コーパス内の共起確率を使って、それっぽいものを選ぶ処理を実装していた。例えば「dash」の「run quickly」の語義の和訳候補に「疾走する」「疾駆する」「走る」「突進する」等があるとして、その中で最も平易な「疾走する」と「走る」を得たい。「疾走する」は「dash」の翻訳と一致するので簡単に抽出できたとして、「走る」は抽出できないとする。その場合でも、同義語の「run」の翻訳と一致するものを探せば、「走る」が救える。

類義語は辞書の内容としてそのまま表示するのにも有用だ。WordNetの類義語は精度重視で人間が選択しているので、再現率は低い傾向がある。ChatGPTの類義語は機械的に作っているので精度は低いかもしれないが、再現率は高い。なので、双方を併記すれば、相互補完的に働くと期待できる。また、WordNetに収録されていないWikitionary経由の見出し語で類義語の情報を得るには、ChatGPTが有用だ。というか、ChatGPTが生成する類義語(synonym)として生成するデータは、どちらかと言えば言い換え表現(paraphrase)であり、意味や品詞が微妙にずれていても、同じような文脈で使えれば提示される。それはそれで知っておくと勉強になる。従来の方法で取得した類義語は「関連」として表示し、今回の方法で生成した類義語は「換言」として表示するようにした。例えば、「triunph」という見出し語には以下のメタデータが付くことになる。

最後に、ChatGPTの類義語はそのまま類義語検索にも使える。従来からもWordNetWiktionaryから抽出した類義語で類義語検索を実装していた。直接の類義語だけでなく、類義語の類義語を幅優先探索で何ステップか辿って候補を抽出した上で、各々の語の類義語や訳語を特徴量として使ってベクトルのコサイン類似度を測って、近いものを提示するのだ。ChatGPTの類義語がその経路と特徴量に加わることで、より典型的な類似語が先頭の近くに表示されるようになる。以下が「dash」の類義語検索の結果である。

ChatGPTに生成させた類義語を駆使したこれら4つの工夫により、統合英和辞書がさらに便利になった。「dash」と「run」の関係性によって、「dash」の訳語として「走る」の順位が上がった。他の単語でも同様に、より平易な訳語が表示できるようになり、英和辞書としての利便性が上がった。この訳語は和英検索のキーとしても使えるので、和英辞書としての利便性も向上している。

英作文の際には、使用する英語の語彙を辞書で探すことがよくある。その際には、平易な訳語で検索してそれっぽい語句を見つけてから、さらにその類義語を辿って最適な語句を探すとよい。類義語検索はその複数ステップの検索を一気にやってくれる機能だ。WordNetWiktionary由来の類義語を使って従来から同じことができていたが、大規模コーパスに由来するChatGPTの類義語を併用することで、より実際の用例でよく出てくるものが提示できるようになった。

例えば、「規則が非常に厳しい」という意味のフレーズを英語で書きたいとして、その「非常に厳しい」を表現するに最適な形容詞を見つけたいとしよう。まずは「厳しい」で検索して、以下の結果を得る。

上記の中では、「harsh」が意味的に近そうなので、とりあえずそれを選択する。例文を見ても、「harsh rules」「harsh regulations」という使い方をしてもあながち間違いではないっぽいことがわかる。

でも、もっと良い語彙があるかもしれない。そこで、「類」アイコンで「harsh」を種にした類義語検索を行う。

「厳しい」「激しい」といった意味の言葉がたくさん出てくるが、その中で「厳格な」「過酷な」という意味のものがいくつかある。「rigid」「strict」「oppressive」「draconian」あたりが良さげだ。中でも「draconian」ってたまに新聞とかで出てくるので、それを使ってみようと思い立つ。

「draconian」の例文を見ると、制度や規制の厳格さを示すのにうってつけの語彙であることが確認できる。かくして、英作文の中で「draconian rules」というフレーズを自信を持って使えるようになるわけだ。この例文の一部もChatGPTが生成しているのがまた当世風だ。ちなみに、検索条件オプションで「類語展開」を選んだ状態で「厳しい」や「harsh」で検索しても似たような結果が得られる。私はなぜか頻繁に「propagate」という単語をど忘れするのだが、その際に「spread」や「diffuse」などの簡単な語から辿れるこの機能を重宝している。

まとめ。ChatGPTの類義語を統合英和辞書に組み込むことで、辞書としての利便性を向上させた。ChatGPTがなくても自前の言語モデルで似たようなことはできたかもしれないが、ChatGPTの精度は自前のものとは比べ物にならない。完璧とまでは全く言えないが、まるで人間に聞いているかのような精度の結果が得られる。これによって、類義語検索のカバレッジがかなり向上した。ど忘れした言葉が探せないということはまず起こらなくなっただろう。