豪鬼メモ

一瞬千撃

ChatGPTに和英辞書の漢字読み仮名を生成させる

オープンなKindle用英和辞書を転置してオープンなKindle用和英辞書を生成するにあたり、読み仮名をChatGPTに生成させて精度向上を図った。


統合英和辞書Kindle用英和辞書は、「draconian」などの英語のフレーズに「厳格な」などの和訳を結びつけた構造である。その並びは見出し語の辞書順(Unicodeのコードポイント順)にすれば良い。一方で、Kindle用和英辞書は「厳格な」などの日本語のフレーズに、それに訳せる「draconian」などの英語のフレーズを結びつけた構造である。その並びは見出し語の辞書順ではなく、読み仮名の辞書順である必要がある。よって、漢字の訳語を適切な読み仮名に直すことが必要になる。今まではWiktionarymecabの辞書から読み仮名を取っていたが、それらでカバーされない語は個々の漢字を適当に音読した体で読み仮名を割り当てて処理していた。結果として、「愛おしく」が「いとおしく」ではなく「あいおしく」になるなど、1%くらいエラーを含むものになっていた。なので、未知語に対してはChatGPTに読み仮名を生成させてみた。結果は上述の和英辞書のデータに反映してある。日本語の文字列照合順序は文字コードの辞書順とは異なるのだが、それにも対応している。

ChatGPTは標準的な日本語はそこそこうまく処理してくれるが、ちょっと規範から外れるとうまくいかない。例えば、「反く」(そむく)は普通は「背く」あるいは「叛く」と書くので、うまく扱えない。これは仕方ないことだし、そもそも「反く」を辞書で引くことは非常に稀だろう。

それにしても、「反く」を「そる」と読むなら、「く」はどこに行ったんだという話になる。他の例でも、たまに明らかに読み方以外の回答をしてくる場合がある。なので、入力語に平仮名を含んでいてそれが出力に現れない場合には、それは誤りと見做して捨てることにした。この後処理を入れるだけで、エラーをかなりの確率で検出できるようになった。漢字だけからなる熟語はChatGPT的には得意らしいので、平仮名を含む語の誤りを減らすだけでかなり効果があるっぽい。漢字の熟語が得意なのはおそらく辞書的なデータを取り込んでいるからだろう。とはいえ、それでも間違いは起こる。「讒言」を「ざんげん」ではなく「さんげん」と読むなど、あまり一般的でない言葉の濁音をうまく扱えないことが散見される。その程度は良いのだが、「関連」を「れんかん」と読んだり「端末機」を「さんまつき」と読むなどの初歩的なエラーもある。

もうちょいプロンプトを工夫すれば精度が上げられる。chain of thoughtsとか呼ばれる技法で、最終目的の出力を生成する過程で考えてほしいことを副題として出すのだ。今回は、個々の漢字の読み方に分解させることにした。また、いわゆるfew-shotという技法で、例を与えてやるのも効果的だ。こうすることで、脊髄反射的な反応によるエラーは少なくなるし、分解の指示をまともに聞いてくれているかどうかでエラーチェックができる。それでも残るエラーは、現状では諦めるしかない。ざっと結果を一覧して手で直そう。上位5000語の中で分解が全ての漢字をカバーしたものに絞る限り、精度は99.9%を超えている。

何で突然読み仮名の改良を始めたかというと、年末年始に小説を読み返しているからだ。幼女戦記とか読んでると、「畢竟」「知悉」「封緘」「怯懦」「青史」「束脩」などなど、学校では習わない言葉がいっぱい出てくる。漢字や文脈からだいたいの意味は推測できるので、それらが初見でも読解に問題はないのだが、未知語に出会ったら意味を調べたくなるのが人情というものだ。Kindleには大辞泉という国語辞典がバンドルされているので、それを使えば大抵の言葉は調べられる。しかし、ある程度の英語力があるならば、和英辞典を使った方が意味がわかりやすいことも多い。「畢竟」の国語辞典の解説は「[名]《〈梵〉atyantaの訳。「畢」も「竟」も終わる意》仏語。究極、至極、最終などの意。[副]さまざまな経過を経ても最終的な結論としては。つまるところ。結局。『―人は死を免れえない』」である一方、我が統合英和辞書の和英辞書ならば「after all」と非常に簡潔に言い換えてくれる。センター試験レベルの英語力があるなら、和英辞典の説明は理解できるだろう。そして、読解の途中に辞書を引くなら、なるべく説明は簡潔な方が嬉しい。ということで和英辞書を引きながら日本語の小説を読んでいるのだが、そうすると稀に読み仮名のエラーを見つけてイラッとする。機械が作っているのだからしょうがないし、機械が作っている割にはエラーが少ないと思うのだが、気になるものは仕方がない。

和英辞典で「畢竟」や「知悉」などの難解語がカバーされているのは意外に思われるかもしれないが、実際にそれらは見事にカバーされている。Edict2をデータソースに加えた段階でかなりの難解語もカバーできていて、それに加えて、DeepLやChatGPTのAPIで英和方向の対訳を大量に生成してからそれを転置して見出し語を作っているので、おそらくほとんどの国語辞書と同等以上のカバレッジに到達している。むしろこの辞書に載っていない語句を探すのはかなり難しいくらいだ。難解語を調べるだけではなく、日常語を何気なく引いてみるのも勉強になっていい。日本語の文章を読んでいる最中にも、「工夫」って英語で何ていうのかなとか、気になることがあるだろう。そんな際にもポップアップさせるだけで疑念が解消できる。

まとめ。ChatGPTに漢字の読み仮名を生成させて和英辞書の内容を改善した。各文字の読みを同時に出力させたり例を与えたりすると精度が上がり、その他の後処理のフィルタと組み合わせると、そこそこの精度になることがわかった。

追記:同じデータを使ってオンライン発音記号検定を作ったので、暇つぶしにやってみてほしい。