OpenAI/Gemini APIを使って EPUBを翻訳するCLIツールをつくってみた
by
tomiyan (Masakuni Tomita)
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
OpenAI/Gemini APIを使って EPUBを翻訳するCLIツールをつ くってみた 2024/07/19 面白法人カヤックさん クラシコム合同勉強会 tomiyan
Slide 2
Slide 2 text
アジェンダ - 自己紹介 - なぜ作り始めたのか - EPUBのデータ構造 - OpenAI APIとの格闘 - Gemini API - 今後
Slide 3
Slide 3 text
自己紹介 tomiyan / 冨田昌邦 Webエンジニア、情シスも兼務 略歴 - サレジオ高専 情報工学科 - SIer 6.5年 - SES 0.5年 - 不動産ポータル 11.5年 - クラシコム 4年
Slide 4
Slide 4 text
なぜ作り始めたのか
Slide 5
Slide 5 text
なぜ作り始めたのか - 前職時代からRustいいよと聞いていた - 個人的なプログラミング言語の選定要件 - AWSなどからSDKが提供される - DBクライアントが提供される - 2023/11にAWS SDK for RustがGA - そろそろプロダクションへの利用もありかなと思った
Slide 6
Slide 6 text
なぜ作り始めたのか - The Rust Programming Language 日本語版 - The Rust Programming Language 日本語版 (rust-jp.rs) を半分くらい履修 - Rust Web Development読みたいけど、まだ訳書がない
Slide 7
Slide 7 text
なぜ作り始めたのか - ChatGPTにPDFをアップロードすると翻訳することができる - 単なるテキストとして部分的に返してくる - EPUBの翻訳頼んだら、翻訳するためのPythonのコードを渡された
Slide 8
Slide 8 text
No content
Slide 9
Slide 9 text
なぜ作り始めたのか - EPUBを翻訳してくれるツールないかなと検索したところ DeepL APIで翻訳してくれるCLI sharplab/epub-translator: An utility to translate epub books with DeepL (github.com) が公開されていた - Red Hatの @shiroica さんが作っている - KotlinとQuarkusで実装されている - GraalVMに対応しているのでNativeImageも作れる - 現状Jarで提供されている
Slide 10
Slide 10 text
なぜ作り始めたのか - インスパイアされた - この際、RustとOpenAI APIも勉強できて一石二鳥じゃないか
Slide 11
Slide 11 text
EPUBのデータ構造
Slide 12
Slide 12 text
EPUBのデータ構造 - https://idpf.org/epub/30/spec/epub30-ocf.html - XML、XHTML、HTMLやCSS、画像などをzipで固めたもの 引用:太宰治 走れメロス 青空文庫をネット書房が組版・製本したEPUB
Slide 13
Slide 13 text
EPUBのデータ構造 - HTMLのテキストノードを翻訳すれば置き換えることができる - 日本語などのドキュメントはがはさまっており、ルビを生かしたまま 翻訳できない 引用:太宰治 走れメロス 青空文庫をネット書房が組版・製本したEPUB
Slide 14
Slide 14 text
EPUBのデータ構造 - 当初原文のままがよさそうな
や
、
などをリス トアップして、翻訳をスキップしようとした - 出版社によりマークアップの仕方が違うためリストアップが困難だった - 大抵の書籍は
内のテキストノードさえ翻訳してあげれば良さそ うなことがわかった
Slide 15
Slide 15 text
OpenAI APIとの格闘
Slide 16
Slide 16 text
OpenAI APIとの格闘 - Rate limits - 利用者の課金額や初回課金成功日数によってTiersが分かれている
Slide 17
Slide 17 text
OpenAI APIとの格闘 - Tiers、MODEL(gtp-4o,gtp-4turbo,gtp-3.5-turboなど)によって1分毎のリクエスト 数やトークン数上限が決まっている
Slide 18
Slide 18 text
OpenAI APIとの格闘 - レスポンスヘッダでレートリミットがいつ回復するか返してくれる
Slide 19
Slide 19 text
OpenAI APIとの格闘 - APIのレスポンスがそれほどはやくないのでできればある程度まとまった行数を並 行してリクエストしたい - まとめ過ぎるとトークン数の上限に達してしまう - 翻訳の場合、入力・出力の文字数が多くトークンを消費しやすい - リクエスト数よりもトークン数の上限にひっかかりやすい - レスポンスヘッダの`x-ratelimit-reset-tokens`をパースしてsleepを入れた
Slide 20
Slide 20 text
OpenAI APIとの格闘 - レイアウトが崩れてしまうので、原文のテキストノードのあとに訳文を追加したい - 原文1段落に対して必ず1段落の訳文を返してほしい
Slide 21
Slide 21 text
APIの結果ではないけど 雰囲気を味わってもらうための例
Slide 22
Slide 22 text
No content
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
OpenAI APIとの格闘 - 実際には20段落事に翻訳している - 10回に1回くらいの頻度で原文と訳文の数の不一致が発生する - 不一致の場合は1段落ずつ翻訳するようにフォールバックしている
Slide 25
Slide 25 text
Gemini API
Slide 26
Slide 26 text
Gemini API - 素直な良い子 - OpenAI APIよりもはやい - トークン調査用のAPIもある - レートリミットの情報がわからない
Slide 27
Slide 27 text
No content
Slide 28
Slide 28 text
注意 - 翻訳されている本がでているのであれば、そちらを購入することを強くおすすめしま す - あくまでも翻訳されていない本を読む補助のツールです - 翻訳に時間がかかるし、APIの課金額が読めない - ルビを除去したりしていますし、文中の画像やソースコード内のコメントは翻訳でき ない - 将来的にOS、EPUBリーダー、AIプラットフォーマーが対応しそうな気もする - DeepLも次世代LLMモデルを2024/07/17発表 - DeepLが翻訳でChatGPT-4、Google、Microsoftを上回る次世代 LLMモデルを実装
Slide 29
Slide 29 text
発展している最中なので価格もAPIの仕様も変わりやすい - 今朝(2024/07/19)もGPT-4o miniが発表 - DeepL API Pro $5.48 + 100万文字あたり$25 1M tokens Input Output GPT-4o $5 $15 GPT-4o mini $0.15 $0.6 GPT-3.5 Turbo $0.5 $1.5 Gemini 1.5 Flash $0.35 $1.05 Gemini 1.5 Pro $3.5 $10.5
Slide 30
Slide 30 text
今後
Slide 31
Slide 31 text
今後 - dry runしておおよその分量をわかるように - brew installできるようにする - Amazon BedrockのClaude3に対応 - リファクタ - Rustの本 翻訳したけどまだ読んでいない
Slide 32
Slide 32 text
おわり