【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

AI で『神曲』ノートン訳を行分割

AI で『神曲』のノートンによる散文訳を行ごとに分割します。

The she-wolf hindering anyone passing along her way
Bing Image Creatorで作成。Powered by DALL-E.

2023 年 5 月 28 日~『神曲』勉強会開催中!

lingua.connpass.com

ダンテ『神曲』シリーズの記事です。

第 1 部
第 2 部

  1. AI で『神曲』の古代ギリシア語訳を分析
  2. AI で『神曲』の画像生成
  3. AI で『神曲』をフレーズ分解
  4. AI で『神曲ノートン訳を行分割 ← この記事
  5. AI で『神曲』を翻訳して比較

目次

動機

学習や調査の際、行ごとに英訳された『神曲』があれば便利です。

神曲』の英訳の中で、現状でテキスト化されてパブリックドメインで公開されているものは、私の知る限り、同内容の別版を除けばプロジェクト・グーテンベルクにある以下の 4 点だけです。

訳者(本へリンク) 地獄篇 Canto I 冒頭 3 行(相当)
Cary, Henry Francis In the midway of this our mortal life,
I found me in a gloomy wood, astray
Gone from the path direct: and e’en to tell
Longfellow, Henry Wadsworth Midway upon the journey of our life
I found myself within a forest dark,
For the straightforward pathway had been lost.
Sibbald, James Romanes In middle of the journey of our days
I found that I was in a darksome wood—
The right road lost and vanished in the maze.
Norton, Charles Eliot Midway upon the road of our life I found myself within a dark wood, for the right way had been missed.

このうち Norton 訳は散文ですが、韻律の制限がないことを活かして可能な限り直訳されています。

他は詩のスタイルを保っており、その中では Longfellow 訳が最も原文に忠実です。上で引用した個所だけを見ても、他の翻訳は原文からのずれが認められます。

  • Cary 訳: 末尾の and e’en to tell は原文 4 行目の内容。
  • Sibbald 訳: 末尾の and vanished in the maze. は独自の翻案。

※ 今回の目的には沿わないということで、このスタイルが悪いと言っているのではありません。原文との対応を過度に意識せずに英語として考えれば、この方が読みやすいという判断なのでしょう。

Longfellow 訳はブランクヴァース(無韻詩)としての韻律の制約の中で、可能な限り原文に忠実であろうとしています。この形式ではこれ以上は望めないほどの完成度だからこそ、今日まで代表的な翻訳として読み継がれてきたのでしょう。

仕方ないことではありますが、原文との行対応が難しい箇所では多少のずれが認められます。例えば Canto II の以下の個所では、対応する語が行をまたいで入れ替わった位置にあります。

原文 Longfellow 訳
14 corruttibile ancora, ad immortale While yet corruptible, unto the world
15 secolo andò, e fu sensibilmente. Immortal went, and was there bodily.

このような状況で、原文に行対応な翻訳を求めようとすると、以下の 3 つの方法が考えられます。

方法 懸念点
1 Longfellow 訳でずれた個所を探して変更を加える。 韻律を壊すことになるため、Longfellow 訳の長所が失われる。
2 Norton 訳を行分割する。 改行を入れるだけでは対応できない箇所があるため、語順を入れ替えて不自然な文章になる。
3 新たに直訳を作る。 誤訳は避けられない。自力で達成することは難しいため機械翻訳や AI に頼ることになる。

行対応を優先させると不自然な文章になることは避けられないため、2 案の懸念は妥協するしかありません。誤訳や、もっと広く捉えて解釈の違いは、専門家から見れば既存の翻訳にもあるはずです。しかし作業者が専門家でない以上、既存の翻訳以上の完成度で仕上げることは不可能です。

誤訳や解釈の違いはある程度許容するなら、原文を逐語訳した翻訳を新たに作ることは不可能ではありません。2 案とどちらが工数が少ないかという話になります。

工数を体感するため、AI の力を借りながら 2 案の Norton 訳の分割を実験的に行ってみました。

補足

Carlyle による散文訳は、Norton 訳同様に直訳を意識したものです。こちらはテキスト化されていないため、OCR したテキストを手直しする必要があります。

当初、Carlyle 訳を行分割しようかと考え、地獄篇の Canto I と II をテキスト化しました。

Norton 訳と見比べた限りでは、決定的にどちらが優れているとも判断できませんでした。強いて言えば Norton 訳の方が読みやすい気がしましたが、Carlyle 訳よりも新しいことと無関係ではないでしょう。

※ 私から見ると Norton 訳よりも Carlyle 訳の方が読みやすいと感じる個所はいくつかありますが、非ネイティブの語感ですし、細かいことを言ってもきりがありません。

Norton は序文で Carlyle に賛辞を送っていることから、Norton は Carlyle 訳も意識して翻訳を進めたようです。また、Norton は Longfellow の翻訳にも協力したようです。このことから、Norton 訳は Carlyle 訳と Longfellow 訳の系譜にあると言えそうです。👉参考

以上を踏まえ、今回は Norton 訳を作業対象として採用しました。

3 行分割

前処理として原文の 3 行ごとに対応する範囲を手動で分割しました。Canto I と II を対象とします。

これはほぼ句読点に沿って改行を入れるだけの作業で、語順の入れ替えは発生しません。ただし Canto I では 37 ~ 45 行が変則的な意味のブロックになっていて、Norton もそれを意識して翻訳しているようでした。

Dante37
38
39
40
Temp’ era dal principio del mattino,
e ’l sol montava ’n sù con quelle stelle
ch’eran con lui quando l’amor divino
mosse di prima quelle cose belle;
Norton The time was at the beginning of the morning, and the Sun was mounting upward with those stars that were with him when Love Divine first set in motion those beautiful things;
Dante41
42
43
sì ch’a bene sperar m’era cagione
di quella fiera a la gaetta pelle
l’ora del tempo e la dolce stagione;
Norton so that the hour of the time and the sweet season were occasion of good hope to me concerning that wild beast with the dappled skin.
Dante44
45
ma non sì che paura non mi desse
la vista che m’apparve d’un leone.
Norton But not so that the sight which appeared to me of a lion did not give me fear.

この作業は AI にやらせようにも Canto ごとでは一度に入力する量として多過ぎるため、当初は手作業で行いました。ですが試行錯誤の結果、Claude や Copilot でも作業できるようになりました。

Claude

Claude は巨大なコンテキストが扱えるチャット AI です。

スペック的にはイタリア語の原文と Norton の翻訳を Canto 単位で読み込ませることが可能です。

イタリア語の原文と Norton の翻訳を入力しただけでは、対応付けがうまくいきませんでした。

イタリア語の原文を 3 行単位で結合したデータを入力して、英語の翻訳を順番に区切っていくように指示することで作業が安定しました。ログと結果です。

プロンプト一発で想定通りの動きをするという感じではなく、最初の方では意図した動きになるように誘導します。"Good!" などは気分(おまじない)的に言っているのではなく、Claude 自身のアドバイスに基づきます。作業結果の良し悪しを明確に伝えることで、作業方針を整理して固定化させることにつながるようです。

※ なかなか想定通りの動きをしないこともあり、一定以上試行錯誤するとおかしな挙動が固定化されたりします。どうにも修正できそうもなければ、チャットを仕切り直した方が良さそうです。

なお、全文を読み込ませて質疑応答を繰り返すことで相当なトークン数を消費するため、無料枠で作業するのは現実的ではありません。

Copilot

Copilot は従来 Bing AI Chat と呼ばれていたもののリブランドです。ここではプロンプトで検索を無効にすることで、ほぼ GPT-4 として使用します。

各 Canto は約 6,000 文字程度です。Copilot は 4,000 文字まで受け付けるため、分割して入力しました。

Canto 4 は Claude でのログを参考に作業しました。うまく処理できましたが、やや手探り感があります。

Canto 5 ではフローを工夫することでスムーズに作業できました。具体的には、最初に Norton の翻訳を 2 分割で読み込ませてから、イタリア語の原文は 3 行ごとにまとめたものを小出しにします。

調べてみると、返事をしないように指示しつつ、長文を分割して入力してから全体を要約させるテクニックが紹介されていました。

minnano-rakuraku.com

自動化

Copilot ではかなりスムーズに作業できるようになりましたが、チャットやログ採取は手作業で行っています。

この作業は意味を厳密に扱うわけではなく、大まかに単語の当たりが付けられればできそうです。今後の課題として、自前の自然言語処理で自動化できないか検討してみたいです。

1 行分割

ここからは Bard に指示します。結果を先に示します。

最初の指示

Canto II の結果が必要だったため、そちらを先に処理します。

イタリア語と対応する範囲に区切るよう指示しました。簡単なものではうまくいきましたが、複雑なケースには対応できずに失敗しました。

ログを引用しながら試したことを説明します。

改行を入れるだけの個所では、単純な指示でもうまくいきました。

A is part of Dante's Divine Comedy Inferno Canto 2, and B is a translation of it. B is on a single line, so divide it up to match each line of A. You may rearrange the words in B as needed, but do not replace them with different words. Show the result in three lines of English.

[A]
1 Lo giorno se n'andava, e l'aere bruno
2 toglieva li animai che sono in terra
3 da le fatiche loro; e io sol uno

[B]
The day was going, and the dusky air was taking the living things that are on earth from their fatigues, and I alone

Sure, here is the result in three lines of English:

Lo giorno se n'andava, e l'aere bruno
The day was going, and the dusky air

toglieva li animai che sono in terra
was taking the living things that are on earth

da le fatiche loro; e io sol uno
from their fatigues, and I alone

語順の入れ替えが発生する個所がうまく処理できませんでした。

[A]
19 non pare indegno ad omo d'intelletto;
20 ch'e' fu de l'alma Roma e di suo impero
21 ne l'empireo ciel per padre eletto:
[B]
it seemeth not unmeet to the man of understanding; for in the empyreal heaven he had been chosen for father of revered Rome and of her empire;

ログは勢い余って上書きしてしまったため残っていませんが、単に改行を入れただけのものだったと記憶しています。

non pare indegno ad omo d'intelletto;
it seemeth not unmeet to the man of understanding;

ch'e' fu de l'alma Roma e di suo impero
for in the empyreal heaven he had been chosen

ne l'empireo ciel per padre eletto:
for father of revered Rome and of her empire;

改善策

単語ごとの対応表を作って、それを基に並べ替えるように指示した所、うまくいきました。

A is part of Dante's Divine Comedy Inferno Canto 2, and B is a translation of it. B is on a single line, so divide it into the following steps so that each line is the same as each line in A.

1. determine which English word each Italian word corresponds to; assign every word in B to one of the Italian words. Output the results in a word-by-word table.
2. for each line of A, line up the corresponding B words based on the table created in step 1. Match the word order to the Italian word whenever possible; do not rewrite the B word as another word. Output this result in a row-by-row table.

[A]
19 non pare indegno ad omo d'intelletto;
20 ch'e' fu de l'alma Roma e di suo impero
21 ne l'empireo ciel per padre eletto:
[B]
it seemeth not unmeet to the man of understanding; for in the empyreal heaven he had been chosen for father of revered Rome and of her empire;

Sure, here is the step-by-step breakdown:

Step 1: Determine word correspondences

Italian Word English Word
non not
pare seem
indegno unmeet
ad to
omo man
d'intelletto of understanding
ch'e' for
fu had been
de l'alma of revered
Roma Rome
e and
di suo impero of her empire
ne l'empireo in the empyreal
ciel heaven
per padre for father
eletto chosen


Step 2: Line up corresponding words

Line Italian Words Corresponding English Words
19 non pare indegno ad omo d'intelletto not seem unmeet to the man of understanding
20 ch'e' fu de l'alma Roma e di suo impero for he had been of revered Rome and of her empire
21 ne l'empireo ciel per padre eletto in the empyreal heaven for father chosen

これはかなり鮮やかな結果で、ちょっと感動しました。しかし後述のように、これはビギナーズラック的なものでした。

Canto II

単語表を作る方式で Canto II を処理しました。単語表は人間の学習用にも使えないかと考えて、lemma(見出し語)を含めるように指示しました。

最初のうちは単語表が丁寧に作られていますが、徐々にやっつけ仕事になっていきます。

意味を無視して単に順番に並べて対応付けられたりした個所もあり、単語表は学習に使える品質ではなくなっています。単語表は作業の中間過程と割り切って、行分割が成功していれば内容は無視することにしました。

※ 分割完了後に原文と並べて単語対応表を作らせようと試みましたが、うまくいきませんでした。

単語表のずれが原因で分割も失敗している個所については、単語表を作り直すように指示して対応しました。作業品質にばらつきがある印象です。

Canto I

単語ごとではなく、フレーズごとの対応付けを試みました。

最初に作業内容を定義して、それを指示に使ってみました。しかし直近の履歴しか見ていないようで、定義してもすぐ忘れてしまうようです。長くても毎回プロンプトをコピペする方が安定します。

また、肝心のフレーズ分解があまりうまく行っていません。行が分解されないことが多いです。改行するだけならこれでも行分割が成功しているので、割り切ることにしました。

うまく行かない箇所は、細かくフレーズ分解するように指示しました。それでもうまくいかなければ単語表を作ったりして、試行錯誤しました。

最初の単語表の成功は鮮やかでしたが、なかなかうまくいかないものです。それでもどうにか行分割は達成できました。

まとめ

誤訳を生み出すことを避けるため、Norton 訳は語順を入れ替えるだけで単語の置き換えは行っていません。

他の翻訳と並べて比較するための資料を作成しました。

個々の単語からどういう意味につながるかを示すため、行翻訳と単語表を並べた資料を作成しました。

行分割の中間過程としての単語表の作成には失敗したため、続編の記事で作った単語表を流用しました。単語表の信頼性は微妙ですが、行の翻訳でカバーする狙いです。単語表の訳語と Norton の訳語は必ずしも一致しませんが、意味を考えれば推定できる範囲内だと思います。

感想

AI チャットでの自然言語による指示で自然言語を処理するのは、少し前までは考えられなかった画期的なことです。

安定して作業できるプロンプトができているとは言い難い状況で、逐一チェックしながら補正を掛ける必要があり、まだ半手動の作業です。うまくいくこともあるので総合的に考えれば手作業よりはましだと思いますが、この状況では人によっては手作業を選ぶかもしれません。

今後はAI チャットに拘らず、自前の自然言語処理も視野に入れて検討してみたいです。