PLaMo翻訳のGGUFをmmngaさんが公開されています。
https://huggingface.co/mmnga/plamo-2-translate-gguf
PLaMo翻訳のプロンプトは次のような指定をする必要があります。
<|plamo:op|>dataset translation <|plamo:op|>input lang=English Write the text to be translated here. <|plamo:op|>output lang=Japanese
で、plamo-2-translate-ggufには次のようなプロンプトテンプレートが設定されています。
これ、LM StudioのチャットUIで使うにはいいのだけど、APIで使おうとするとうまく動かせません。
ということで、手動にしてEmptyに。
そうするとこんな感じのクラスを用意すればPLaMo翻訳をJavaプログラムに埋め込めます。
class Plamo2EJJE { OpenAiChatModel model; public Plamo2EJJE() { model = OpenAiChatModel.builder() .baseUrl("http://localhost:1234/v1") .modelName("plamo-2-translate") .httpClientBuilder(JdkHttpClient.builder().httpClientBuilder( HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1))) .build(); } public String translateJE(String message) { return translate(message, "Japanese", "English"); } public String translateEJ(String message) { return translate(message, "English", "Japanese"); } private String translate(String message, String from, String to) { var prompt = """ <|plamo:op|>dataset translation <|plamo:op|>input lang=%s %s <|plamo:op|>input lang=%s """.formatted(from, message, to); return model.chat( UserMessage.from(prompt)).aiMessage().text(); } }
Streamingに対応させて、Liquid AIのLFM2-350M-EJJP-MTを対応させると、こんな感じに。
LFM2が135token/sec、PLaMoが20token/secくらい。
「intended to be a first language」が「初学者向けの第一言語としての役割も意図されている」と「初学者向けの」が入っていたり、「When programmers first start out」が「プログラマーが初めて学習を始める段階では」と「学習を」が入っていたり、PLaMo翻訳は読みやすくなるように語を補完する傾向がありますね。
この速さ、品質の翻訳がローカルで動くのは、なんかすごい。
ソースはこちらに。
https://gist.github.com/kishida/5ac71744da23f677e1eec32a958a4d4f