Liquid AIから350Mという軽量な日英翻訳モデルが出ていました。
https://huggingface.co/LiquidAI/LFM2-350M-ENJP-MT
GGUFも提供されていたのでLM Studioで試すと、普通に使えた。
めちゃいいというわけではないけど、手元で軽量に動かせることを考えると悪くないです。

Q4_K_Mにすると軽くていいかなと思ったけど、ちょっと訳が怪しくなったりしていたので、おとなしくQ8を使います。速さも変わらなかったし。

で、そうすると、こういうコードがあればプログラムに日英翻訳を組み込めるわけですね。
import dev.langchain4j.data.message.SystemMessage; import dev.langchain4j.data.message.UserMessage; import dev.langchain4j.http.client.jdk.JdkHttpClient; import dev.langchain4j.model.openai.OpenAiChatModel; import java.net.http.HttpClient; public class LlmEJJE { OpenAiChatModel model; public LlmEJJE() { model = OpenAiChatModel.builder() .baseUrl("http://localhost:1234/v1") .modelName("lfm2-350m-enjp-mt") .httpClientBuilder(JdkHttpClient.builder().httpClientBuilder( HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1))) .build(); } public String translateJE(String message) { return translate(message, "English"); } public String translateEJ(String message) { return translate(message, "Japanese"); } private String translate(String message, String language) { return model.chat( SystemMessage.from("Translate to %s.".formatted(language)), UserMessage.from(message)).aiMessage().text(); } }
ところで、LibreOfficeのパワポ的なツールのファイルフォーマットODPは、実際はzipファイルで、展開するとこんな感じになってます。

content.xmlに実際の文章などが入ってます。

なので、ZIP展開してcontent.xmlのtext:pを翻訳していけば、だいたいいけます。
LibreOfficeのODPを書き換えてもらうコードは、ChatGPTで生成しました。
LibreOfficeのodpファイル中の日本語を英語にしたい。
zip解凍してcontent.xml中のtext:pの内容を書き換えてzip圧縮すればいいと思う。
javaでそのコードを書いて
パワポのPPTXも展開するとこんな感じ。

そしてslideN.xmlに内容が入っています。

なのでこんな感じのプロンプトでいいと思います。
パワポのpptxファイル中の日本語を英語にしたい。
zip解凍してslideN.xml中のa:tの内容を書き換えてzip圧縮すればいいと思う。
javaでそのコードを書いて
あとは、翻訳仮コードを上記のLLM翻訳に置き換えればおっけー
たとえばこのページ。
https://speakerdeck.com/kishida/basic-knowledge-to-utilize-ai?slide=17

こうなりました。フォントサイズの調整だけやってます。

GPT-4oクオリティかと言われるとちょっと疑問だけど、使える訳が出てると思います。
ちょうどプレゼンの英訳をしないといけないタイミングだったので、ありがたい。