Knowledge Base

お知らせや身辺のことを綴っています。
目次
LLMに英単語帳を作らせる

LLMに英単語帳を作らせる

始めに

こんにちは。読者の人はLLM(大規模言語モデル)を使ったタスク解決を楽しんでいますか。面倒なタスクも、ちょっとした疑問も、ちょっと頭をひねってキーボードを叩いてLLMにぶつけるとすぐに納得できる量の文章が返ってくる機械は面白いです。自分がしゃべっている言葉がどういうわけか相手に伝わるし、相手のしゃべっている言葉がどういうわけか自分も理解できる、という言葉に関して不思議に思う感覚を、LLMは再体験させてくれます。

さて、この間おそらくモデルのトレーニングに使用するために人間の創作物を収集しているであろうこのウェブサイトをクローリングするGPTBotが、アクセスログに現れたのを見てこう思いました:

辞書サイトもクローリングしているだろうし、適当に英単語リストを投げたらいい感じに日本語訳も返してくれるプロンプトも作れるのでは?

英単語帳を作る動機

まず、大学の講義で大量に英単語の意味を調べなければいけないタスクが発生しました(小声)。もちろん全部未知の単語であれば手間をかけても辞書で調べる価値があります。しかしそういうわけではなく、理解できる単語が60%程度でした。となれば微妙に面倒です。意味がわかっていても、それっぽい訳を出しておかないといけないので、自動化しちゃえと思いました。

ところで、英単語に対して、日本語訳を併記したリストを作成するというテーマは、これまででも実現不可能なことではありませんでした。たとえば、ExcelにはTRANSLATE()関数が、Googleスプレッドシートには、GOOGLETRANSLATE()関数があり、特定セルの文字列を指定した言語に翻訳できる関数が存在します。たしかに、この関数は手軽ですが、あくまで翻訳することが主な役割であるため、純粋な意味が出力として帰ってくるわけではありません。また、出力を自由自在にカスタマイズできなかったり、表計算ソフトでしか利用できなかったりする欠点も持ちます。

ということで、LLMを用いて英単語とその訳のリストを作成することには、ある程度の妥当性があると思われます。この記事では、要件に応じた英単語とその訳のリストを作るというコンセプトで書いたプロンプト、および工夫した点を紹介し、複数モデル間で出力した結果の比較を綴っていきます。

プロンプトエンジニアリング

ということでやってみます。こんなプロンプトを書いてみました。自分が今回求める要件は、単語に対して単語に対する(親切な)日本語訳があること、2カラムのプレーンテキスト形式で出力させることです。詳しくは以下を見てください。

日本には、語学を勉強している人向けに「英単語帳」という本が存在します。
この本は、英語に対する日本語の意味が書かれた表です。

これから、英単語を列挙するので、以下の条件を踏まえたプレーンテキストの表を作成してください。

  • 英単語に加え、日本語の意味について併記された、それぞれ2つのカラムを作成する
  • 2つのカラムは\t(タブ文字)で区切られていること
  • 日本語訳に複数の意味がある場合は、重要な意味と考えられるものを「、」(読点)で区切って列挙する
  • 日本語訳は「」(鍵括弧)で囲まない
  • 英語での 「…」は日本語での「~」(波括弧)に対応させる
  • 常に同義語の存在を考え、単語の本質的な意味を併記する

最後の「単語の本質的な意味を併記する」について説明します。
単語の中には、特定のものに対して暗黙的に追加の意味を持つものがあります。たとえば、’conniving’という単語は、基本的な意味は「悪巧みをする、秘策を練る、狡猾な」ですが、その訳であれば、同義語である’sly’や、’cunning’でも良いわけですよね?わざわざ、connivingという表現があるのは、その単語を使う人が、より短い言葉で適切に、場面状況を伝えたいという動機があることにほかなりません。このように、補足説明の中で登場する説明などは、「〈〉」、「〔〕」や「[]」で囲むようにし、単語の本質的な意味を併記するようにしてください。
以上を踏まえ、例を示します。

eat 食べる
be looking forward to ... ~を楽しみにする
growing 〔数量が〕増える、大きくなる、増え続ける、増加する一方の
coerce〔人に〕強制して[力ずくで]~をさせる、〔~を〕強要する
give in ... ~に負ける、~に屈服する、
conniving 〈非難を表して〉〔欲しい物を手に入れるために・他人に危害を加えるために〕悪巧みをする、秘策を練る、狡猾な

編集者となる準備はよろしいですか?
よろしければ、開始しましょう!

(この後、返答を待って、リストを送ります)

工夫してみたところ

出力形式はプレーンテキスト

まず、出力形式はプレーンテキストにしてもらいました。行、カラムで区切られた文字列は、最低限のトークン数で表現したいことを表現するのに役立つと思ったからです。今回は、自分でawkなり、表計算ソフトの関数なり、他のテキスト操作ツールを巧みに使ってデータを切り出しましょう。

単語の本質的な意味を併記

それから、「単語の本質的な意味を併記」してもらうことにしました。「単語の本質的な意味を併記する」というのは人間にとってもそれなりに難しいタスクだと思います。単純な訳だけならいいのですが、辞書や英単語帳の読者が分かっていなさそうだなーということを先回りして考える必要があり、情報の取捨選択が求められるためです。

とはいえ、英単語帳に求めるこの特徴は重要です。筆者が英語の意味を覚えるときは、意味を一個覚えるというよりは「共起表現はx、似たようなパターンyのとき、単語zを使いがち」みたいな情報の連なりで覚えるため、情報がいっぱい乗った訳はありがたく感じるわけです。ということで、この条件は見逃してほしくなかったため、正当な理由をつらつら書いてみたのが、以下の部分です。

単語の中には、特定のものに対して暗黙的に追加の意味を持つものがあります。

結果

結果、こんな感じの出力を得られました。

GPT-4o

以下のようにタブ区切りのプレーンテキスト表を作成しました:
resort to … ~に訴える、~を頼る
perpetuate 永続させる、〔悪い状況などを〕存続させる
delight in … ~を楽しむ、~に喜びを見いだす
relate that … ~と語る、~を伝える
gain momentum 勢いを増す、進展する
coexistence 共存、共生
go as far as ...ing ~するまでになる、~するほどになる
arouse animosity 敵意を引き起こす、反感を抱かせる
confiscate 没収する、押収する
displace 置き換える、〔人を〕追い出す
...

Claude 3.5 Sonnet

以下に、ご指定の条件に従って作成した表を示します。
resort to ...	~に頼る、~を利用する〈他に選択肢がない場合や望ましくない手段を使う場合に〉
perpetuate	〔状況・伝統などを〕永続させる、不朽のものにする
delight in ...	~を楽しむ、~に喜びを感じる
relate that ...	~と語る、~と述べる
gain momentum	勢いを増す、弾みがつく
coexistence	共存、共生
go as far as ...ing	~するほどのことをする、~にまで及ぶ
arouse animosity	敵意を引き起こす、反感を招く
confiscate	没収する、押収する
displace	〔人・物を〕移動させる、追い出す、置き換える
...

Gemini 1.5 Flash

英単語帳
英単語	日本語訳
resort to ...	~に頼る、~に訴える
perpetuate	永続させる、不滅にする
delight in ...	~を楽しんで、~を喜ぶ
relate that ...	~と述べる、~を伝える
gain momentum	勢いを増す、勢いをつける
coexistence	共存、同居
go as far as ...ing	~するまでには及ばない、~するほどではない
arouse animosity	敵意を喚起する、憎しみをそそる
confiscate	押収する、没収する
displace	追い出す、退かせる
...

分析

GPT-4o、Claude 3.5 Sonnet、Geminiの応答をそれぞれ比較してみます。

GPT-4o

結果としてはそれなりに納得できると思います。ただ今回は、区切り文字がタブ文字ではなく全角スペースで出力されました。同じ会話内では、同じ区切り文字が使いまわされるので、特に作業の上で支障はありませんでしたが、LLMを用いたアプリなどを制作する場合は、もうちょっと規則を守ってもらうよう厳密に指定するか、他のデータ型で出力してもらうように指示をすることが求められるでしょう。

Claude 3.5 Sonnet

今回の比較の中でもっとも丁寧に意味を添えてくれているのがこの子だと思います。あまり言及することがありません。

Gemini

まず、go as far as …ingで誤訳をしています。この表現自体は「~するまで〈ほど〉には」までの意味しか持たないので、「~するまでには及ばない」というのは明らかに訳しすぎです。

また、色々条件がありますが、「常に同義語の存在を考え、単語の本質的な意味を併記」するという条件について、最後までGemini 1.5 Flashの場合はうまくいきませんでした。失敗したケースは以下のようなものです。

  • 全く補足的な括弧をふらない
  • 指摘すると全部の単語に補足的な括弧をふってしまう
  • カッコの位置が、後ろになってしまう
    • 例: delight in … ~を喜ぶ、~を楽しむ〈特に悪いことや他人の不幸を〉、〔take pleasure in〕~に満足する
  • 再度指摘すると、また補足的な括弧を振らなくなってしまう
  • 同義語を書いてしまう
    • 例: relate that … 「〈narrate〉物語る、詳述する」

まとめ

今回、納得できる結果を得るまでかなり試行しました。プロンプトを考える時間、それから記事を書く時間を含めれば辞書を繙くより時間がかかった気がしなくもないですが、結果、チャットを開いて適当に単語を投げるだけでいい感じの答えを吐き出してくれる、便利なプロンプトを考えられてよかったです。

Gemini 1.5 Flashは最後までダメだったのが残念です。Gemini Proはこれより優れているのでしょうか。

前の記事

Podmanで同一ネットワーク内の他のコンテナのドメイン名を解決できるようにする

コメント

0

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連投稿

技術
「コマンドを実行する際の心がけ」のサムネイル画像

コマンドを実行する際の心がけ

筆者がコマンドを実行する際、セキュリティー面で常々心がけていることについて述べます。 続きを読む

技術
「視聴用にイコライザを使わないという変なこだわりを捨てた」のサムネイル画像

視聴用にイコライザを使わないという変なこだわりを捨てた

ホワイトノイズによる現在のスピーカーの周波数特性の検証を通じて、最適なイコライザーのカーブを探ってみます。 続きを読む

技術
「WSLのインスタンスにリモートから接続する」のサムネイル画像

WSLのインスタンスにリモートから接続する

WSLと、リモートのクライアントとを接続させるために設定をする記事です。 続きを読む

技術
「10進数→2進数の手計算をしていて気づいたこととかツールとか」のサムネイル画像

10進数→2進数の手計算をしていて気づいたこととかツールとか

10進数から2進数への変換をしていて気づいたことがあったり、それにまつわるツールを作ったりしたので紹介します。 続きを読む