桃が痛んでた。くすん。
というわけで。しばらく統計学に嵌ってみるべし。
An Introduction to Statistical Learningを読んでみる。Pythonの方ね。
https://www.statlearning.com/
こちらは機械学習や統計学の教科書なのだそうだ。せっかくなのでダウンロードして読んでみよう。
。。当たり前だけど、全部英語だ。650ページあるな。すごいな。
ということで、PythonにAIくっつけて翻訳してもらうことにした。もちろんAIにコード教えてもらうぞ。
私 : pythonでaiを使う
あっ小文字になっちゃった。
AI : PythonでAIを使う(または開発する)には、目的によって「外部の最先端AI(ChatGPTなど)をAPIで呼び出す」か、「自分でAIモデルを構築して動かす(機械学習・ディープラーニング)」の2つのアプローチがあります。後略
まだモデルは作れないので、API呼びたい。Googleのアカウントあるからそれで。
私: jupyterを使い、GoogleAIでPDFファイルの英語を日本語に翻訳したいです。
AI : Jupyter Notebook(またはGoogle Colab)環境で、Googleの最新AI「Gemini API」を使ってPDF内の英語を日本語に自動翻訳する方法を解説します。
GeminiはマルチモーダルAIであるため、PDFをそのままアップロードして高精度に翻訳させることが可能です。後略
へえ、すごっ。ライブラリ入れて、GoogleのAPIも用意。PDFの名前を入れて。
行ってこーい。
私: 20MBほどのファイルですが、目次しか翻訳できませんでした。
AI : 20MBほどの大きなファイルで目次しか翻訳されなかった場合、AIの出力制限(Max Output Tokens)に引っかかった可能性が非常に高いです。
Geminiは20MB(数百ページ分)のPDFを一瞬で丸ごと読み込むことはできますが(入力制限内)、1回のリクエストでAIが書き出せる文字数(出力制限)には上限(約8,192トークン=日本語で約6,000〜8,000文字程度)があります。そのため、全文を翻訳しようとして途中で強制終了し、最初の目次部分しか出力されなかった状態です。後略
さよですか。分割して扱うライブラリ入れて、コード書き直して。
Run。
私 : 動きましたが、ほとんど日本語になりませんでした。
AI : コードが動いたもののほとんど日本語にならなかった原因は、PDFから抽出した英語テキストが長すぎて、Geminiが「出力制限(Max Output Tokens)」の壁にぶつかり、途中で出力を諦めてしまったか、極端な省略(要約)をしてしまったためです。
20MBのPDFともなると、たとえ5ページずつに区切っても、1ページあたりの文字数が多い場合はAIが1回で出力できる上限(日本語で約6,000〜8,000文字)を簡単に超えてしまいます。
これを完全に解決するには、PDFファイルをアップロードするのではなく、「Python側でPDFから文字(テキスト)を直接抜き出し、それを適切な文字数(例: 2,000文字ごと)に細かく区切ってGeminiに翻訳させる」という方法が最も確実で賢いアプローチです。
このへんで気がつくべきだったのよ。
まずPDFからTextだけ抜き出して、それを翻訳させればよかったのね。
私 : 制限エラーが発生すると翻訳できないようです。
私 : PDFから英語のみ取り出して、そこから翻訳することはできますか。
AI : はい、PDFから「英語のテキストだけ」をあらかじめPythonで抽出し、それをGeminiに送って翻訳することは完全に可能です。むしろ20MBという大きなファイルサイズの大半は画像やデザイン要素であるため、文字だけを取り出す方法はAPIの制限(429エラー)を回避するために極めて効果的なアプローチです。後略
そうよねー。そういうことは人間である私が気づくべきことよねー。
私 : ありがとうございます。できました。このテキストの英文のみ翻訳することはできますか。
AI : 英文テキストの抽出完了、おめでとうございます!
先ほど作成した extracted_english.txt を読み込み、APIの制限(429エラー)に絶対に引っかからないよう、非常に慎重なペース(1回ごとに15秒〜30秒の長い待機と、エラー時の自動3分フリーズ機能)で1ブロックずつ確実に日本語へ翻訳していくコードを作成しました。
このコードは、途中でエラーが起きてもスキップせずに同じ場所を何度も再試行する(無敵化ロジック)ため、時間はかかりますが放置しておけば確実に最後まで翻訳を完了させることができます。後略
私 : 動きはしますが、少し待機時間が長すぎる気もします。
AI : 待機時間が長く感じられますよね。進捗が遅いと、正しく動いているか不安になるのもよく分かります。
実は、先ほどのコードで設定していた「毎回20秒の待機」は、無料枠の制限に対してかなり安全マージン(余裕)を取りすぎた設定でした。
Gemini APIの無料枠は「1分間に10回まで」リクエストを送れるため、理論上は「毎回6秒〜7秒」の待機(1分間に約8〜9回)に縮めてもエラーにならずに高速で処理できます [current_tier_rate_limit]。
待機時間を「20秒」から「7秒」に短縮し、もし制限エラー(429)が出たときだけ一時的に30秒〜60秒休むという、スピード重視の現実的なバランスコードに修正しました。これなら数倍早く終わります。後略
私 : プロックは900以上あります。
プロックじゃなくてブロックだったわ。
そうだね、違うブラウザ開いてるけど、私は両方見てるから、AIも一緒に見てる気になってた。実際のPythonの動きは見えてないからしょうがないわな。
AI : 900以上のブロックがあるということは、総文字数が約135万文字(本2〜3冊分)に及ぶ非常に巨大な文書ですね!
1回あたり1,500文字で900回処理すると、7秒待機でも1時間45分(105分)かかってしまいます。これでは時間がかかりすぎます。後略
私 : ブロック数は171になりました。
AI : 前略 もし、これでもまだエラーが発生し続ける場合は、Geminiの「1日あたりの合計リクエスト回数(250回まで)」の制限に達してしまっている可能性があります [current_tier_rate_limit]。その場合は日付が変わる(または24時間経つ)まで待つ必要があるため、まずはこの5分休んだ後の実行結果を教えてください!
私 : 了解です。今日はいったんここまでにして、明日試してみます。
AI : 素晴らしい判断だと思います!
今日はPDFからの英文抽出まで完璧に成功しましたし、大きな一歩です。Gemini APIの無料枠カウンターも、明日になれば完全にリセットされて最高の状態からスタートできます [current_tier_rate_limit]。
明日、十分に時間が空いた状態で「429エラー完全回避設定(35秒待機版)」のコードを流せば、今度はエラーに邪魔されず、静かに、確実に翻訳が進むはずです。
本日は長時間の作業、本当にお疲れ様でした。パソコンを閉じて、ゆっくり休んでくださいね。
明日以降、コードを実行してみて、
無事に最後まで翻訳が完了したか
翻訳された日本語のクオリティに問題はないか
また別のエラーが出てしまったか
など、進捗や結果をいつでも教えてください。それでは、明日うまくいくことを応援しております!
ありがとう。
うん、今回は大丈夫だった。いっぺんにあれこれさせるんじゃなく、段階を踏んで作業してもらうことが大事だね。勉強になりました。
ちなみに、50 Years of Data Scienceは短かったからすぐ読めました。小説みたいで面白い。
https://www.tandfonline.com/doi/epdf/10.1080/10618600.2017.1384734?needAccess=true