魂の生命の領域

AWS とか Python とか本読んだ感想とか哲学とか書きます

再翻訳で遊びたい 〜AWS Translate 編その2〜

最高の再考

昨日の記事 再翻訳で遊びたい 〜AWS Translate 編〜 ですが、意外と文章が崩壊しませんでした。

おそらく10年近く前だと思うのですが、その頃の Google 翻訳を使ってひたすら再翻訳の作業を繰り返したときの結果が実はこの記事でして、最終的には謎の記号が入ってきたりしてはてな記法?という言うんでしょうか、それの何かしらの記法に該当して謎の脚注ができたりなど、かなり満足のいく出来となっています。 bubusore.hatenablog.com

昨日の結論としては(当時のように) Google 翻訳の API を使おうという話になりました。 しかしながらブラウザ上で手動で何周もさせてもたいして崩壊しません。 よくよく考えれば翻訳周りの機械学習?の技術ってここ数年でえげつない進歩を遂げているので今はそもそもそんなふざけた結果にはなり得ないのかもしれません。 いろいろ策を考える中で一つのアイデアに思い至りました。

複数の言語を経由してみる

単純に →を繰り返すよりも、様々な言語を経由して最終的に日本語に戻ってくるような翻訳をした方がより多様性の観点から文章が崩壊しやすいのではないかということを思いました。

ちなみにその検証のためにブラウザ上で手動で確かめた結果がこれです。

bubusore.hatenablog.com

昨日の文章と同じものを使って50回ぐらい試した結果が一段落目、170回ぐらいやった結果が第二段落です。 体感ですが、アフリカや中東の言語を数多く経由させると古代の詩みたいな表現が増えるような気がします。 私の単なる妄想の可能性もありますが……

10年ほど前に試した時はどんどん文章そのものが崩壊して単語の羅列のようになりましたが、最近の技術だと文章の体裁はきちんと保ってくれるみたいです。 優秀ですね。

昨日の AWS Translate を使ったスクリプトを少し改良して同じく複数言語を経由する版も作ってみました。

import boto3
import json

from datetime import datetime


client = boto3.client('translate')


def retranslate(lang_list):
    """
    入力ファイルの内容を指定の言語コードの順に翻訳し、最後に元の言語に戻す
    """
    with open('./in/input.txt', mode='r') as in_f:
        init_text = in_f.read()

    lang_code_dict = get_lang_code_dict()
    code_list = [lang_code_dict[elem] for elem in lang_list]
    params = {'Text': init_text}
    result = []
    for i in range(len(code_list)):
        if i == len(lang_list) - 1:
            # 最後に元の言語に戻す
            params['SourceLanguageCode'] = code_list[-1]
            params['TargetLanguageCode'] = code_list[0]
        else:
            params['SourceLanguageCode'] = code_list[i]
            params['TargetLanguageCode'] = code_list[i + 1]

        # 5000 文字の制限は API 実行前に弾いてしまう
        if len(params['Text']) > 5000:
            break

        params = unit_translate(params)
        result.append({
            'text': params['Text'],
            'from': params['SourceLanguageCode'],
            'to': params['TargetLanguageCode'],
        })

    with open(f'./out/{format_file_name()}-out.json', mode='a', encoding='utf-8') as out_f:
        json.dump(result, out_f, indent=2, ensure_ascii=False)


def unit_translate(params):
    """
    翻訳を1回行う
    """
    result = client.translate_text(**params)
    params['Text'] = result['TranslatedText']
    return params


def get_lang_code_dict():
    with open('./lang-code.json', mode='r', encoding='utf-8') as f:
        lang_dict = json.load(f)
    return lang_dict


def format_file_name():
    """
    適当なファイル名を作るためのやつ
    """
    return datetime.now().strftime('%Y%m%d%H%M%S')


if __name__ == '__main__':
    retranslate(
        ['日本語', 'アフリカーンス語', 'ラトビア語']
    )

相変わらず細かいところは適当ですが、まぁ動くので良いでしょう。 あと細かく検証していないですが、やりすぎると botocore の Throttling Exception を吐きます。 これはループごとに sleep 処理を入れれば回避できると思います。

途中で言語の名前と Language Code を紐づけている JSON ファイルを読み込んでますが、これは 公式ドキュメント に記載されている サポートされている言語と言語コード をシンプルに JSON にしたものです。

結果

結果はこんな感じです。

元の文章(日本語)

最低軍団は偏差値最強軍団に対抗するというコンセプトのもとで結成されました。 この際、偏差値最低軍団とはならず単に最低軍団という名称になったのは、「偏差値だけでなく総合的な意味において最低である」ことを念頭を置いたためです。 最低軍団の初期メンバーはソレ、ソノ、難しいソレ、難しいソノの4人です。

難しいソレが中心となり結成されましたが、フロントマンとしてはソレをプッシュしており、難しいソレ自身はあまり表に出ないようにしています。 ソノはオックスフォード大学を卒業しており、Iron Maiden のヴォーカリストであるブルース・ディッキンソンと個人的な交友があります。 難しいソノは当初は存在するか存在しないかが判別できないほどに重症でしたが、寄せる器具の効能により、現在では大阪大学の医学部に通うまでに回復しています。

最低軍団の主な活動は音楽です。 最低軍団という名前のメタルバンドとして全宇宙で精力的に活動しています。 毎年フルアルバムをリリースしています。

ソレは9000億フレットで9000億弦のギターを9000億の1秒に9000億回という驚異的なスピードでピッキングすることで非常にスピード感溢れるサウンドを得意としますが、本人はメタルよりもケルト音楽の方に興味があるため、たびたび脱退騒動が発生します。

数年前に最低軍団に新しいソレと新しいソノがメンバーに加わったことでさらに音楽の表現の幅が広がりました。 今後も最低軍団から目が離せません。

日本語 → アフリカーンス語

日本語 → アフリカーンス語の翻訳結果を展開する
Die laagste legioen is gevorm onder die konsep om die sterkste korps met afwykings te bestry. In hierdie geval was dit nie net die laagste legioen van afwyking nie, maar bloot die laagste legioen omdat dit in gedagte was dat “die laagste in die algehele sin, nie net die afwykingswaarde nie.” Die vroegste lede van die laagste legioen is Sole, Sono, Hard Solé en Hard Sono.

Dit is gevorm as die middel van die moeilike sole, maar as 'n frontman stoot hy die sole, en die moeilike sole self verskyn nie veel op die tafel nie. Sono het aan die Universiteit van Oxford gegradueer en het 'n persoonlike vriendskap met Iron Maiden se sanger Bruce Dickinson. Aanvanklik was die moeilike Sono so erg dat daar nie bepaal kon word of dit bestaan of nie, maar as gevolg van die doeltreffendheid van die instrument herstel dit nou na die mediese skool van Osaka Universiteit.

Die belangrikste aktiwiteit van die laagste legioen is musiek. As 'n metaalband met die naam Laagste Legioen is hy aktief regdeur die heelal aktief. Elke jaar stel ons volle albums vry.

Seer is goed teen baie spoed voel vol klank deur te pluk teen 'n geweldige spoed van 900 miljard snare kitaar 900 miljard keer tot een sekonde van 900 miljard in 900 miljard vertoorn, maar die persoon self Ek is meer geïnteresseerd in Keltiese musiek as metaal, so ek ervaar dikwels 'n onttrekking versteuring.

'N Paar jaar gelede het die nuwe Soret en die nuwe Sono-lede by die Laagste Legioen aangesluit, wat die omvang van musikale uitdrukkings verder uitgebrei het. Ons sal die laagste legioene in die oog hou.

わからん。

調べると アフリカーンス語 とは南アフリカ共和国ナミビアで主に話されている言語だそうです。

インド・ヨーロッパ語族のゲルマン語派で西ゲルマン語群に属する低地ドイツ語に属し、オランダ語から派生した言語である。

アフリカーンス語ラトビア

アフリカーンス語ラトビア語の翻訳結果を展開する
Zemākais leģions tika izveidots saskaņā ar koncepciju cīņai pret spēcīgāko korpusu ar izlidošanu. Šajā gadījumā tas bija ne tikai zemākais novirzes leģions, bet vienkārši zemākais leģions, jo tas bija prātā, ka “zemākais vispārējā nozīmē, ne tikai novirzes vērtība.” Visagrākie zemākā leģiona locekļi ir Sole, Sono, Hard Solé un Hard Sono.

Tas veidojas kā sarežģītās zoles vidusdaļa, bet kā frontmanis viņš nospiež zoles, un pati grūtā zole neparādās daudz uz galda. Sono absolvējis Oksfordas Universitāti un viņam ir personiska draudzība ar Iron Maiden dziedātāju Brūsu Dikkinsonu. Sākumā sarežģītais Sono bija tik slikts, ka nevarēja noteikt, vai tas pastāv vai nē, bet instrumenta efektivitātes dēļ tas tagad atgūst Osakas universitātes medicīnas skolā.

Zemākā leģiona pamatnodarbošanās ir mūzika. Kā metāla grupa, ko sauc par Zemāko leģionu, viņš ir aktīvs visā Visumā. Katru gadu mēs izlaižam pilnus albumus.

Pušums ir labs ar lielu ātrumu sajūta pilna ar skaņu, izvēloties ar milzīgu ātrumu 900 miljardu stīgu ģitāru 900 miljardus reižu līdz vienai sekundei 900 miljardiem fret, bet pats cilvēks es esmu vairāk ieinteresēts ķeltu mūzikā nekā metāls, tāpēc es bieži piedzīvo izņemšanas traucējumus.

Pirms dažiem gadiem jaunais Sorets un jaunie Sono biedri pievienojās Zemākajam leģionam, kas vēl vairāk paplašināja muzikālo izteiksmju klāstu. Mēs turpināsim acu par zemākajiem leģioniem.

わからん。

ラトビア語ラトビア共和国で話されている言語だそうです。

インド・ヨーロッパ語族のバルト語派に属する。

どちらもインド・ヨーロッパ語族とのことで、アフリカーンス語ラトビア語は日本語と英語ほどは離れていない感じなんですかね?(適当)

ラトビア語 → 日本語

下部軍団は、最強軍団を出発して戦うというコンセプトに従って作られた。この場合、偏差の最低レギオンだけではなく単に最低レギオンであった。これは、「偏差の価値だけでなく、一般的な意味では最低」ということを念頭に置いていたためである。下部軍団の初期メンバーはソーレ、ソノ、ハードソレ、ハードソノである。

それは複雑なソールの中央として形成されますが、フロントマンとして彼はソールを押し、ハードソール自体はテーブルにあまり現れません。ソノはオックスフォード大学を卒業し、アイアン・メイデンの歌手ブルース・ディキンソンと個人的に親交がある。当初、複雑な曽野はそれほど悪かったため、存在するか否かを判断できなかったが、楽器の有効性から、現在は大阪大学の医学部で回復しつつある。

下部軍団の基本的な職業は音楽である。ロウアー軍団と呼ばれる金属集団として、宇宙各地で活動している。毎年フルアルバムをリリースしている。

痛さは音溢れる高速感が得意で、1秒900億の弦ギター900億回に1秒900億フレットまで巨大なスピードでピッキングしているが、男自身はメタルよりケルト音楽に興味があるので引きこもりの混乱を経験することが多い。

数年前、若いソレッツと新しいソノメンバーがローワー軍団に加わり、音楽表現の幅をさらに広げた。我々は下部の軍団に目を離さない。

戻ってきました。

前回とあんまり変わらん!!

幸いにも GW はあと1日あるので明日、気が向けば Google 翻訳 API 使った版を作ることにします。

まとめ

AWS Translate は優秀