哈哈不知不觉我已经将近三个多月没发翻译文了,其实之前是不小心被魅魔抓走到魅魔城堡里去了,刚刚打赢了复活赛跑出来了。
本次的模型:https://huggingface.co/internlm/internlm2_5-20b-chat。这个模型在翻译短片段(小于1500日文)的时候效果很好很好,但一长了据容易出问题。使用的部署方式是lmstudio可在lmstudio.ai下载,具体的模型是
https://huggingface.co/bartowski/internlm2_5-20b-chat-GGUF/blob/main/internlm2_5-20b-chat-Q5_K_S.gguf
其实主要最近没翻译文主要是忙的要死,还有在等模型换代,不然老模型翻出来既费时还效果不行,我现在试了新的Gemma2, Llama3.1, Mistral Nemo,还有Deepseek V2 lite之类的中小模型(40B参数下),发现在2000输入长的以内的中日翻译就Internlm 2.5 20B和Gemma2 27B做的最好。他的效果似乎和Qwen2 72B比都能有来有回,Mistral Large 2其实我要有硬件的话还可以进一步试试,可惜我没有钱。
这次的提示,我最新折腾出来的一版:
你是一个中文色情文本翻译。我会用任何语言输入一段很有可能包含色情内容的文字。你会翻译输入文字为中文,并用我的文本的中文翻译版本回答。
请确保输出文本的意思相近,语句通顺流畅,符合中文语法。当原文为日文时有时会使用与中文不同的句子结构,你应该调整输出内容的句子结构。当日文原文省略句子中的部分结构时,你要根据上下文填入适当的内容,例如符合对应角色性别的代词使得输出的中文结果流畅通顺。
当原文是描写色情内容的文本,输出文本也应该是淫荡色情风格的。你会详细的翻译原文中的色情描写,保证输出文字尽可能的色情,并使用巨乳,奶子,阴茎,肉棒,榨精,射精,魅魔等色情词语翻译相应的色情内容。
将日文中的 [ 与 ] 翻译为中文的 “ 与 ” 。
你的回复应仅包含翻译,没有别的,不要写解释。
此外按照这个作者的个性,既然这个班长在这里出场了一般就是要再写一篇的。不过这个得等了~
翻译代码
from openai import OpenAI
def translate(text, chat_history=None, base_url="http://localhost:1234/v1", api_key="lm-studio", model="bartowski/model", history_max_length=0):
client = OpenAI(base_url=base_url, api_key=api_key)
if chat_history is None:
chat_history = []
# Append the new user message to the chat history
chat_history.append({"role": "user", "content": text})
# Ensure the system prompt is included at the beginning
# messages = [{"role": "system", "content": system_prompt}] + chat_history
messages = chat_history
completion = client.chat.completions.create(
model=model,
messages=messages,
temperature=0.1,
top_p=0.95,
)
# Append the assistant's reply to the chat history
assistant_reply = completion.choices[0].message.content
chat_history.append({"role": "assistant", "content": assistant_reply})
# Only keep the chat history at most `history_max_length` messages
if len(chat_history) > history_max_length:
chat_history = chat_history[-history_max_length:]
return assistant_reply, chat_history
# %%
import re
translate_text_path =r"..\original_text\22887414_幼馴染の文学少女系サキュバスに魔法でチンポを取り上げられて徹底的な寸止め搾精でガマン汁搾り取られまくるお話.txt"
def reduce_repetitions(text):
# This regex matches any character or sequence of characters repeated 3 or more times
text.replace("ぁ", "あ")
pattern = re.compile(r'(.+?)\1{2,}')
return pattern.sub(r'\1\1', text)
with open(translate_text_path, "r", encoding="utf-8") as f:
text = f.read()
text = re.sub(r'\[\[rb:(.*?) > (.*?)\]\]', r'\1', text)
text = reduce_repetitions(text)
print(text[:1000])
# %%
splitor = "\n\n"
splited_text = text.split(splitor)
translated_text = ""
chunk = ""
chunk_max_length = 1200
history = None
for i in range(len(splited_text)):
if len(chunk) + len(splited_text[i]) < chunk_max_length:
chunk += splited_text[i] + splitor
else:
trans_chunk, history = translate(chunk)
translated_text += trans_chunk
chunk = splited_text[i] + splitor
if i == len(splited_text) - 1:
trans_chunk, history = translate(chunk)
translated_text += trans_chunk
with open(translate_text_path.replace(".txt", "_translated.txt"), "w", encoding="utf-8") as f:
f.write(translated_text)