『Overview of EvaHan2024: The First International Evaluation on Ancient Chinese Sentence Segmentation and Punctuation』を横目に、XunziALLMで漢文(古典中国語)の生成を試してみた。Google Colaboratory (GPU版)だと、こんな感じ。
!pip install transformers accelerate transformers_stream_generator einops tiktoken
from transformers import AutoTokenizer,AutoModelForCausalLM
d="ccwu0918/XunziALLM"
tkz=AutoTokenizer.from_pretrained(d,trust_remote_code=True)
mdl=AutoModelForCausalLM.from_pretrained(d,trust_remote_code=True,device_map="auto")
inp=tkz("不入虎穴不得虎子",return_tensors="pt").to(mdl.device)
doc=tkz.decode(mdl.generate(**inp)[0])
print(doc)
私(安岡孝一)の手元では、以下の文が生成された。
不入虎穴不得虎子今入闗中不拔金人不北兵行则民心危不进则敌势盛进则可与敌战不进则吾欲战不可得而金人深入吾腹心故必欲灭之使吾重得择利之所在则吾欲战之志一发而不可遏其计也况河北人心未服者犹未肯附于我盖彼见吾入敌境则必深疑且惧而叛去之必多矣且金人之欲内属者皆未去尔今敌既得利复欲内属吾又欲招之恐敌势益盛入吾境内吾复取利使彼不得复如其故是以沮之若使敌之无利吾又且欲招之使其人皆复其故则吾得师众之势众虽骄且惰尚可制也况今众皆骄惰欲使之为吾用难矣今来有建康之师既不入闗中则敌势益重吾欲收民之心安未可知今又以师南来恐民之见吾入敌境将无反吾之心故曰师不入敌境则无以收民心也况今敌已有隙将入吾境则吾欲与之战则必败而失士心若不与之战则敌势益盛乃日月不进退之无策是以战也惟上速与之战以收民心耳今敌既入吾境内是无益于吾而反有害于吾矣今又以师来南是师老而气衰无益于吾而反有害于吾也且兵有进退有险有阻吾兵既入敌境则我所恃以为险阻者皆空虚而敌可以乗虚而入矣是以师老气衰是进退无策者也故今必欲战乃无大害也今吾之众巳复淮河之险复旧有州县不为无益矣然敌复据淮西则吾气衰而无险阻吾复淮西亦无益于吾而反有害于吾也况今吾军士不精而胜败未可知彼能安肯来战哉此师之不进战无益于吾而反有害于吾也故今当战以收民心又以无损于吾而反有益于吾也故曰不战则
漢文風ではあるものの、「不入虎穴不得虎子」の続きに「当今之計独有因夜以火攻虜」が生成されたりしないようだ。しかも、簡化字の中に「闗」が紛れ込んでたりして、かなり読みにくい。というか読めない。試しに句読点を追加すると、どうなるだろう。
inp=tkz("不入虎穴、不得虎子。",return_tensors="pt").to(mdl.device)
doc=tkz.decode(mdl.generate(**inp)[0])
print(doc)
不入虎穴、不得虎子。昨與南嶽相公同在。丞相府。見丞相在御前。出一老僧骨塔。云:「昨夜臨安城中。有一和尚。身長丈餘。目能旋日月。手能轉乾坤。昨夜投宿山中。為鬼神所殺。遺骨塔在此。」南嶽公曰:「向者。何以處之?」丞相曰:「老僧惡知有甚鬼神。亦不見有甚和尚。」令丞相心未信。南嶽曰:「君無道事。恐是觀音大士。」丞相曰:「觀音大士。復何事。人間那得有如此和尚。」南嶽公曰:「南嶽本山。亦有如是之相。此是正教。且住一時。待觀其事。」南嶽公既還山。訪北嶽相公。具道其事。北嶽曰:「只如。丞相尚不見信。似我等小僧。何由得信。」南嶽曰:「向者丞相既不見信。如何處置。」北嶽曰:「待八月十五日中秋。只許有一輪滿月。和尚入宮。則知信否。」南嶽公即令小僧。望北祝聖曰:「和尚既是正教。何必夜入人家。特為人害。只願待月圓之夜。更增人世平安。早得一僧。與之講說。庶不寂寞。」語未畢。有一僧前問曰:「師有甚話。與小僧講說。」小僧具述南嶽之意。僧曰:「我與南嶽相公。亦有宿緣。待至中秋。吾當入山。與南岳講說。」時北嶽公問南嶽曰:「待和尚入宮。我等何時得進見。」南嶽曰:「待月圓。」南嶽既不信有和尚。待八月十五夜。往觀。果然見那大相公進宮。正得東宮夜臥。寺僧相待。在彼行道。如南嶽不應與同寺僧。
うーむ、全く別の話に変わってしまった。まあ、実行するたびに違う文が生成されるので、こういうものなのかな。