Calm2-7B-Chatで小説のテキストファイルを読ませてあらすじを書かせてみた (メインメモリー64GB+GTX1650Ti)
「Calm2-7B-Chat」の記事を立て続けに書いてますが、それには理由がありまして。
簡単に言うと、これまで動かしたオンプレ生成AIでは、最も実用に耐えうるものだから、というものです。
ちょっとした会話はできても、業務的なこと(議事録書かせたり、プログラム書かせたり)は全然できなかったのがオープンソースの生成AIですからねぇ。
それがいきなり、GPT3.5 turbo並みというなかなかの性能を引っ提げた生成AIが今、自分のPC上で動くようになったのですから、そりゃあ興味が沸いて当然です。
そんなそこそこの性能の生成AIを低メモリーGPUでも動かせると分かって、ちょっと欲が出てきました。
やっぱり、長文の要約などをやらせたくなります。それも、国会の議事録などではなく、自作小説などのあらすじを書かせたりできたらなぁ・・・
と思っていたら、以下の記事で「テキストファイルを丸ごと読み込ませる方法」を知りました。
なるほど、そういう風にすればいいのね、実に単純な方法で読み込ませてました。
ということで、上の記事を参考にして、早速コードを書いてみた。
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
model = AutoGPTQForCausalLM.from_quantized("mmnga/cyberagent-calm2-7b-chat-GPTQ-calib-ja-1k",
tokenizer = AutoTokenizer.from_pretrained("mmnga/cyberagent-calm2-7b-chat-GPTQ-calib-ja-1k",
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
# 読ませたいテキストファイルを指定
with open("akumyo01.txt", encoding="utf-8") as f:
text=f.read()
prompt = f"""次の物語を読んで、ユーザーからの質問に答えてください。丁寧に誠実に対応してください。
USER: この物語のあらすじを300字程度でまとめてください。
ASSISTANT: """
token_ids = tokenizer.encode(prompt, return_tensors="pt")
output_ids = model.generate(
input_ids=token_ids.to(model.device),
max_new_tokens=10000,
do_sample=True,
temperature=0.8,
streamer=streamer,
)
ベースは、前回の記事のコードです。違いとしては、まず11、12行目でテキストファイルを読み込ませ、それを「prompt =」の中でフォーマット文で読ませているところ、でしょうか。
読ませる際も、「USER:」の前に命令文を追記してます。何度か試して分かったのですが、この命令文には、例えば上のように「丁寧に誠実に対応してください。」とくどくど書かないと、本当に不誠実な返答しか返ってこなかったので、そこは注意です。
さて、読み込ませたテキストファイルなんですが、以下の小説を使いました。
私の自作小説ですが、濡れ衣を着せられて牢獄に放り込まれた公爵令嬢が、処刑寸前に宇宙艦隊司令部の計らいで助けられ、そのまま軍属にされて砲撃手(ガンナー)となって活躍する・・・という話なのですが、その主人公は悪役令嬢ではなく、濡れ衣で悪名を着せられたご令嬢のマドレーヌさん、だから「悪名令嬢」となってます。
この話の#1~#3まで、だいたい14,000文字を「akumyo01.txt」として保存し、読み込ませて300文字程度のあらすじを書かせてみました。
で、結果はこちら。
王国一の悪名高き監獄、モンブロー監獄に投獄された主人公マドレーヌは、監獄脱出計画を企てていた。しかし、計画は失敗し、彼女は監獄から脱走することなく、地下牢に幽閉され、処刑を待つ身となっていた。
ある日、監獄の看守から「マドレーヌ殿、現時刻をもってあなたは、当艦隊司令部所属の軍属となる。さあ、出番だ」と告げられる。そして、彼女は驚くべき真実を知ることとなる。
なんと、彼女は地球459遠征軍という軍隊に、軍属として迎えられることになったのだ。しかし、彼女はこれまで貴族として暮らして いたため、新たな職場である宇宙艦隊での軍人としての生活に馴染めるのか不安を感じている。
また、彼女は地球459遠征軍から与えられた命令に従い、任務を全うしなければならない。しかし、彼女は任務に忠実でありながらも 、自身の信念を貫き、自由を求める意志を持っている。
そして、物語が進むにつれて、彼女は自身の過去や秘密、使命について明らかになっていく。
うん、悪くないまとめっぷりですね。つっこみどころ満載ではあるんですが、全部で21話の内の3話で、よくまあここまでまとめたものです。
もっとも、最後の「自身の過去の秘密、使命」は明らかにはならないんですけどね。濡れ衣を晴らされてハッピーエンド、という話なので。
ちょっと試した限りでは、3万文字くらいまではどうにか読めました。#1~#6までの32,000文字ほどを読ませたんですけど、こちらは結果が以下のようにいまいちでした。
貴族令嬢から軍属になり、宇宙船で働くことになった主人公・マドレーヌ。彼女は星の国から来たという同僚たちと出会い、未知の環境で生活することになります。
主人公・マドレーヌは、貴族令嬢から軍属になったことを受け入れられずにいました。そこで、彼女たちと共に働くことになります。
しかし、星の国から来た彼女たちは独特な文化を持っていました。その中で、マドレーヌは自分のことを考え、そして自分自身を取り戻します。
また、星の国から来た彼女たちは、マドレーヌに「身体を洗わない文化」を教えます。この文化は、水や石鹸が貴重な星ではとても贅沢なものとされています。
マドレーヌは、この新たな文化を受け入れ、自分自身を取り戻していきます。そして、宇宙船での新たな生活が始まります。
「身体を洗わない文化」ってなんやねん! 本文のどこにも書かれていないどころか、むしろ身体洗いまくってます。中途半端なところで話を切ったせいですかね?
小説のあらすじを書かせるなら、切りのいいところで区切るのがよさそうです。
ちなみにですが、GPUメモリーが4GBしかないGTX1650Tiで、よくこれだけの文章を読み込ませられるものだと思っていたんですが、タスクマネージャーを見ると、実はメインメモリーを使ってました。
GPUの項目に、「専用メモリー」と「共有メモリ―」というのがあって、このうちの共有メモリ―というのが要するにメインメモリーのようです。32GBほど割り当てられてて、専用メモリーが足りなくなるとこっちを使い始めてました。
が、必ずしも使われるというものではないんですが、今回のCalm2-7B-ChatのGPTQ版ではちゃんと使えてます。
32,000文字となると、この32GBの共有メモリ―部分も目一杯使ってました。これ以上は無理そうです。
どのみち、このCalm2-7B-Chat君の入力上限が32,000トークンなので、このあたりが限界なのかもしれません。
小説のあらすじはちょっと厳しいけれど、例えば音声から文字起こしした文章の要約程度ならば、もっとうまくやってくれるかもしれませんね。
うーん、この生成AIモデルいじり、ちょっと楽しくなってきた。
« Calm2-7B-ChatのGPTQ版をうちの低メモリーGPU環境で動かしてみた | トップページ | Calm2-7B-Chatを完全オフラインで使う »
「数値解析系」カテゴリの記事
- Windows 11でFORTRANをコンパイルしたい!という方への対処法(2025.01.04)
- どこに視線を向けているかを可視化してくれる物体検出器(2024.12.23)
- 2024年まとめ記事(2024.12.31)
- 生成AI解説書籍「ChatGPT & 生成AI」という本を買った(2024.12.08)
- Googleの生成AI「Gemini Advanced」に入ってみた(2024.12.01)
« Calm2-7B-ChatのGPTQ版をうちの低メモリーGPU環境で動かしてみた | トップページ | Calm2-7B-Chatを完全オフラインで使う »
コメント