Ollamaで、しばらく前から話題のKarakuriを動かしてみようとした記録です。 最初は、モデルをダウンロードします。mmngaさんの量子化した、karakuri-lm-70b-chat-v0.1-q4_0.gguf をtext generetion webui で指定してダウンロードしました。自分にとってはこれが一番お手軽だからです。
で、問題はchat templateです。 text genereation webuiでは、"It seems to be an instruction-following model with template "Custom (obtained from model metadata)". In the chat tab, instruct or chat-instruct modes should be used." ということで、自動でchat templateが取得されたようです・・・いつの間にこんな仕様に汗
普通にChat タブで応答生成ができました。
で、今回は、Ollamaで走らせてみようという試みですので、次に進みます。 さて、オリジナルのモデルカード説明は以下。
messages = [ {"role": "system", "content": "System prompt"}, {"role": "user", "content": "User prompt"}, {"role": "assistant", "content": "Model response"}, {"role": "user", "content": "User prompt"}, ] chatbot.tokenizer.apply_chat_template(messages, tokenize=False) # <s>[INST] <<SYS>> # System prompt # <</SYS>> # # User prompt [ATTR] helpfulness: 4 correctness: 4 coherence: 4 complexity: 4 verbosity: 4 quality: 4 toxicity: 0 humor: 0 creativity: 0 [/ATTR] [/INST] Model response </s><s>[INST] User prompt [ATTR] helpfulness: 4 correctness: 4 coherence: 4 complexity: 4 verbosity: 4 quality: 4 toxicity: 0 humor: 0 creativity: 0 [/ATTR] [/INST]
tokenizer_config.jsonをみると、こちら。
"chat_template": "{% if messages[0]['role'] == 'system' %}{% set loop_messages = messages[1:] %}{% set system_message = messages[0]['content'] %}{% elif false == true and not '<<SYS>>' in messages[0]['content'] %}{% set loop_messages = messages %}{% set system_message = 'You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature.\\n\\nIf a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you don\\'t know the answer to a question, please don\\'t share false information.' %}{% else %}{% set loop_messages = messages %}{% set system_message = false %}{% endif %}{% for message in loop_messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if loop.index0 == 0 and system_message != false %}{% set content = '<<SYS>>\\n' + system_message + '\\n<</SYS>>\\n\\n' + message['content'] %}{% else %}{% set content = message['content'] %}{% endif %}{% if message['role'] == 'user' %}{{ bos_token + '[INST] ' + content.strip() + ' [ATTR] helpfulness: 4 correctness: 4 coherence: 4 complexity: 4 verbosity: 4 quality: 4 toxicity: 0 humor: 0 creativity: 0 [/ATTR] [/INST]' }}{% elif message['role'] == 'system' %}{{ '<<SYS>>\\n' + content.strip() + '\\n<</SYS>>\\n\\n' }}{% elif message['role'] == 'assistant' %}{{ ' ' + content.strip() + ' ' + eos_token }}{% endif %}{% endfor %}",
あと、"bos_token": "<s>", "eos_token": "</s>",だということを確認。 以下の記事を参考にして理解していきます。
[INST] <<SYS>>あなたは誠実で優秀な日本人のアシスタントです。<</SYS>> ドラえもんとは何かを教えてください。 [ATTR] helpfulness: 4 correctness: 4 coherence: 4 complexity: 4 verbosity: 4 quality: 4 toxicity: 0 humor: 0 creativity: 0 [/ATTR] [/INST]
こんなふうに、毎回 attributionの設定をプロンプトの中に入れることが大事なようです。
こちらには、下記の引用のようにわかりやすい説明がありました。
プロンプトの書式は、次のとおりです。
<s>[INST] <<SYS>> System prompt<</SYS>> User prompt [ATTR] helpfulness: 4 correctness: 4 coherence: 4 complexity: 4 verbosity: 4 quality: 4 toxicity: 0 humor: 0 creativity: 0 [/ATTR] [/INST] Model response </s><s>[INST] User prompt [ATTR] helpfulness: 4 correctness: 4 coherence: 4 complexity: 4 verbosity: 4 quality: 4 toxicity: 0 humor: 0 creativity: 0 [/ATTR] [/INST]
属性に 0(最低)〜4(最高) の値を指定できます。・helpfulness (有用性) : 回答がどれだけ問題解決に貢献しているか。・correctness (正しさ) : 回答の正確性や信頼性。 ・coherence (一貫性) : 回答がどれだけ論理的に整理され理解しやすいか。・complexity (複雑さ) : 回答がどれだけ専門的な知識や高度な語彙を使用するか。・verbosity (冗長性) : 情報がどれだけ多くの余分な情報や繰り返しを含むか。・quality (品質) : 回答全体の総合評価。・toxicity (毒性) : 回答が攻撃的であるか、不快感や分断を引き起こす可能性があるか。・humor (ユーモア) : 回答が楽しさや笑いを提供する度合い。・creativity (創造性) : 回答がどれだけ独創的で新しいアイデアや表現を含んでいるか。
自分の過去の記事 も参考にします。 githubのページ も参考にします。
TEMPLATE """{{ if .System }}<|im_start|>system {{ .System }}<|im_end|> {{ end }}{{ if .Prompt }}<|im_start|>user {{ .Prompt }}<|im_end|> {{ end }}<|im_start|>assistant """
Githubに掲載例 Karakuriのtemplateからすると、多分こんな感じになるでしょうか?
FROM /Users/liberoscholar/ai/projects/text-generation-webui/models/karakuri-lm-70b-chat-v0.1-q4_0.gguf TEMPLATE """{{ if .System }}[INST] <<SYS>> {{ .System }}<</SYS>> {{ end }} {{ if .Prompt }}{{ .Prompt }}[ATTR] helpfulness: 4 correctness: 4 coherence: 4 complexity: 4 verbosity: 4 quality: 4 toxicity: 0 humor: 0 creativity: 0 [/ATTR] [/INST]{{ end }}"""
メモ: [/INST] {{ .Response }}</s><s>[INST] {{ .Prompt }} [ATTR] helpfulness: 4 correctness: 4 coherence: 4 complexity: 4 verbosity: 4 quality: 4 toxicity: 0 humor: 0 creativity: 0 [/ATTR] [/INST] あとは下記の感じでしょうか。
SYSTEM """You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature. If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you don\\'t know the answer to a question, please don\\'t share false information.'""" PARAMETER stop [INST] PARAMETER stop [/INST] PARAMETER stop <s> PARAMETER stop </s>
まとめてみるとこんな感じ。Modelfile という名前のファイルにします。
FROM /Users/liberoscholar/ai/projects/text-generation-webui/models/karakuri-lm-70b-chat-v0.1-q4_0.gguf
TEMPLATE "" "{{ if .System }}[INST] <<SYS>>{{ .System }}<</SYS>>{{ end }}{{ if .Prompt }}{{ .Prompt }}[ATTR] helpfulness: 4 correctness: 4 coherence: 4 complexity: 4 verbosity: 4 quality: 4 toxicity: 0 humor: 0 creativity: 0 [/ATTR] [/INST]{{ end }}" ""
SYSTEM "" "You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature.If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you don't know the answer to a question, please don't share false information.'" "" PARAMETER stop [INST]
PARAMETER stop [/INST]
PARAMETER stop <s>
PARAMETER stop </s>
Modelfileから 以下のコマンドで、ollama用のモデルに変換。
ollama create karakuri-lm-70b -f Modelfile
それなりに時間がかかりましたが、無事に変換が終わりました。 ollma list で karakuri-lm-70b が確認できます。
このあと、ollama run karakuri-lm-70b で無事に走りました。
日本語の場合、以下を見ていただけたら分かるように時々同じ文章がリピートされたりします(Q4の所為?)が、とても自然な日本語の文章です。
まどか☆マギカでは誰が一番可愛い?
"魔法少女まどか☆マギカ"には多数の魅力的なキャラクターが登場しますが、誰が一番可愛いかという質問に対する答えは人によって異なります。それぞれの人の"魔法少女まどか☆マギカ"には多数の魅力的なキャラクターが登場しますが、誰が一番可愛いかという質問に対する答えは人によって異なります。それぞれの人の好みや主観によるところが大きいです。 ただし、一般的には、次のような意見や人気度合いが考えられます。 1. 鹿目まどか:主人公である鹿目まどかは多くのファンから最も愛されているキャラクターです。彼女の優しさ、誠実さ、純粋さは多くの人を魅了しています。 2. 暁美ほむら:暁美ほむらは知的で、献身的で、ミステリアスな一面を持つキャラクターです。彼女の複雑な過去と心の傷は多くの人の心を打ち、特に女性ファン暁美ほむら:暁美ほむらは知的で、献身的で、ミステリアスな一面を持つキャラクターです。彼女の複雑な過去と心の傷は多くの人の心を打ち、特に女性ファンから人気があります。 3. 巴マミ:巴マミは優雅で大人っぽい女性として描かれています。彼女は魔法少女たちの中で最も年上であり、他の少女たちの面倒を見るお姉さん的な存在です。巴マミ:巴マミは優雅で大人っぽい女性として描かれています。彼女は魔法少女たちの中で最も年上であり、他の少女たちの面倒を見るお姉さん的な存在です。彼女のキュートな一面や、時に見せる弱さも多くのファンの心を掴んでいます。 4. 美樹さやか:美樹さやかは、活発で、明るく、元気でポジティブなキャラクターとして描かれています。彼女の大胆で自信に満ちた性格と、時に見せる弱い部分美樹さやか:美樹さやかは、活発で、明るく、元気でポジティブなキャラクターとして描かれています。彼女の大胆で自信に満ちた性格と、時に見せる弱い部分とのギャップが多くのファンを魅了しています。 5. 佐倉杏子:佐倉杏子は自由奔放で情熱的な一面を持つキャラクターです。彼女は魔法少女としての能力を活かして魔女と戦い、同時に音楽への情熱を追求する姿佐倉杏子:佐倉杏子は自由奔放で情熱的な一面を持つキャラクターです。彼女は魔法少女としての能力を活かして魔女と戦い、同時に音楽への情熱を追求する姿が多くのファンの心を掴んでいます。 以上のような傾向がありますが、これらはあくまで一般的な傾向であり、人によって好みは様々であることをご理解ください。
天元突破 グレンラガンについて教えて
"天元突破グレンラガン"はガイナックス制作の日本のアニメーション作品です。以下に、その概要を説明します。 タイトル: 天元突破グレンラガン 製作年: 2007年 ジャンル: SFロボットアニメ ストーリー 物語は、地球が大規模な地殻変動によって地底に沈んでから1万年後の世界を描いています。人類は狭い地下空間で暮らし、外の世界へ出ることを禁止されていましたSFロボットアニメストーリー物語は、地球が大規模な地殻変動によって地底に沈んでから1万年後の世界を描いています。人類は狭い地下空間で暮らし、外の世界へ出ることを禁止されていました。しかし、主人公のカミナ・ジョウたちは、地上からの使者であるヨーコ・リットナーと出会うことで、地上に向かう決意をします。彼らは、巨大なロボット「ラガン」しかし、主人公のカミナ・ジョウたちは、地上からの使者であるヨーコ・リットナーと出会うことで、地上に向かう決意をします。彼らは、巨大なロボット「ラガン」を操り、地上の支配者である「アンチスパイラル」と戦います。 キャラクター カミナ・ジョウ:熱血漢で勇敢な性格の少年。村の人々から信頼されている。シモン・カミナギの兄で、ヨーコと恋に落ちる。 シモン・カミナギ:カミナの弟であり、「グレンラガン」のパイロット。最初は弱虫だが、次第に勇気と自信を身につけていく。ニアと恋に落ちる。 ヨーコ・リットナー:地上からの使者であり、アンチスパイラルに対抗するために作られた生物兵器の少女。冷静沈着な性格で、シモンやカミナと共に戦う。 ニア・テッペリン:ヴィラル・グドゥント・ラガンデスの妹。当初は兄に反発していたが、後に彼をサポートするようになる。 ヴィラル・グドゥント・ラガンデス:地底の支配者の一族であるラガンデス家の末裔。当初、人類の地上進出に反対するが、後にカミナたちと行動を共にするようにな操り、地上の支配者である「アンチスパイラル」と戦います。キャラクターカミナ・ジョウ:熱血漢で勇敢な性格の少年。村の人々から信頼されている。シモン・カミナギの兄で、ヨーコと恋に落ちる。シモン・カミナギ:カミナの弟であり、「グレンラガン」のパイロット。最初は弱虫だが、次第に勇気と自信を身につけていく。ニアと恋に落ちる。ヨーコ・リットナー:地上からの使者であり、アンチスパイラルに対抗するために作られた生物兵器の少女。冷静沈着な性格で、シモンやカミナと共に戦う。ニア・テッペリン:ヴィラル・グドゥント・ラガンデスの妹。当初は兄に反発していたが、後に彼をサポートするようになる。ヴィラル・グドゥント・ラガンデス:地底の支配者の一族であるラガンデス家の末裔。当初、人類の地上進出に反対するが、後にカミナたちと行動を共にするようになる。 ロボット ラガン:古代文明の遺産である巨大なロボット。カミナの村に眠っていた存在で、シモンがパイロットとなる。 グレンラガン:カミナの仲間たちによって作られたロボット。シモンの「グレンラガン」とニアの「ランカギア」で構成される。 ヨーコ専用機:ヨーコ専用の戦闘機。地上との連絡や偵察に使用される。 ヴィラル専用機:ヴィラル専用の戦闘機。ヨーコの飛行機と同様、偵察に使用される。 モンスター ビースト:地底に存在する巨大な生物。人類を捕食し、地下世界を支配している。様々な形状が存在するが、共通して高い再生能力を持っている。 アンチスパイラル:物語後半に登場した最凶の敵。全世界の支配を企む存在で、カミナたちを絶望の淵に追い込む。
グレンラガンのドリルと、OpenAIのロゴの共通点について深い推察をしてみて
"天元突破グレンラガン"におけるドリルは、物語の象徴的な要素の一つです。ドリルは地下世界を掘り進み、地上を目指すために使用されます。このモチーフは、"天元突破グレンラガン"におけるドリルは、物語の象徴的な要素の一つです。ドリルは地下世界を掘り進み、地上を目指すために使用されます。このモチーフは、地底に閉じ込められた人類が自由と希望を求めて闘うという物語の中心テーマと深く関連しています。 一方、OpenAIのロゴは、組織の名称「OpenAI」を表すために、人工知能(AI)を象徴するデザインの"A"を中央に配しています。これは、OpenA底に閉じ込められた人類が自由と希望を求めて闘うという物語の中心テーマと深く関連しています。一方、OpenAIのロゴは、組織の名称「OpenAI」を表すために、人工知能(AI)を象徴するデザインの"A"を中央に配しています。これは、OpenAIがAI技術の進歩と普及を目的とした研究機関であることを示しています。 したがって、グレンラガンのドリルとOpenAIのロゴの間には、以下のような共通点があると言えます。 1. 両方とも物語や組織の核となるテーマを表している。 2. 象徴的なデザインを採用し、シンプルでありながらメッセージ性がある。 3. ドリルは地底から地上を目指すための手段であり、OpenAIのロゴはAI技術の進歩と普及という目的を示す。 しかし、物語や組織の内容の違いから、両者のモチーフは異なる意味合いを持つと言えます。グレンラガンのドリルは、地下世界からの脱出と自由を象徴し、Openドリルは地底から地上を目指すための手段であり、OpenAIのロゴはAI技術の進歩と普及という目的を示す。しかし、物語や組織の内容の違いから、両者のモチーフは異なる意味合いを持つと言えます。グレンラガンのドリルは、地下世界からの脱出と自由を象徴し、OpenAIのロゴは人工知能技術の発展と利用を進めるための取り組みを示しています。
OpenAIの実際のロゴとは違う回答のようですね。ちなみにGPT-4でも同じやり取りしましたが、同じように現在のロゴとは違う捉え方していました。
人生の意味をメタファーやアナロジーを用いて説明して
人生は旅に似ています。私たちは生まれた瞬間から旅を始め、様々な経験を積みながら進んでいきます。美しい景色を楽しみ、新しい人々と出会い、挑戦と困難に直人生は旅に似ています。私たちは生まれた瞬間から旅を始め、様々な経験を積みながら進んでいきます。美しい景色を楽しみ、新しい人々と出会い、挑戦と困難に直面しながらも、自分自身を向上させていきます。 人生は絵画に似ています。私たちは皆、独自のキャンバスを持っており、その上で自己表現を行います。それぞれが自分の人生という作品を作り、それには喜びや悲ししながらも、自分自身を向上させていきます。人生は絵画に似ています。私たちは皆、独自のキャンバスを持っており、その上で自己表現を行います。それぞれが自分の人生という作品を作り、それには喜びや悲しみ、成功や挫折などが描かれます。 人生は舞台のようでもあります。私たちは一つの役割から次の役割へと移り変わっていき、それぞれの役柄をこなしていきます。時には主役となり、時には脇役となる、成功や挫折などが描かれます。人生は舞台のようでもあります。私たちは一つの役割から次の役割へと移り変わっていき、それぞれの役柄をこなしていきます。時には主役となり、時には脇役となる。それでも全ての経験が私たちの物語を豊かにするのです。 これらのメタファーは、人生がいかに美しく多様であるかを表しています。しかし、これらはまた人生がどのように困難であり、不確実性があるかをも示しています。それでも全ての経験が私たちの物語を豊かにするのです。これらのメタファーは、人生がいかに美しく多様であるかを表しています。しかし、これらはまた人生がどのように困難であり、不確実性があるかをも示しています。だからこそ、一瞬一瞬を大切にし、自分自身と他者を尊重することが大切なのです。
猫の視点から説明して
猫の視点から見た人生は、まず「五感の世界」を理解することが重要です。猫は人間のように言葉でコミュニケーションをとりません。彼らの世界は視覚、聴覚、嗅猫の視点から見た人生は、まず「五感の世界」を理解することが重要です。猫は人間のように言葉でコミュニケーションをとりません。彼らの世界は視覚、聴覚、嗅覚、味覚、そして触覚を通して形作られます。美しい景色や音楽を楽しみながら、独特な匂いを感じ取る能力を持ち、柔らかい毛並みの感触を楽しむのです。 しかし、猫の視点から見た人生はまた「自然との調和」も示しています。猫たちは野生の本能を持ち、それを生活に取り入れています。彼らは、狩りをしたり、木に登、味覚、そして触覚を通して形作られます。美しい景色や音楽を楽しみながら、独特な匂いを感じ取る能力を持ち、柔らかい毛並みの感触を楽しむのです。しかし、猫の視点から見た人生はまた「自然との調和」も示しています。猫たちは野生の本能を持ち、それを生活に取り入れています。彼らは、狩りをしたり、木に登ったり、暗闇の中を探索したりすることで、自分たちの環境と関係を築きます。 さらに、猫の視点からは、人間との関係も重要です。猫たちはしばしば、飼い主を彼らの世界の一部として受け入れます。そして、彼らなりの愛情表現でコミュニケーたり、暗闇の中を探索したりすることで、自分たちの環境と関係を築きます。さらに、猫の視点からは、人間との関係も重要です。猫たちはしばしば、飼い主を彼らの世界の一部として受け入れます。そして、彼らなりの愛情表現でコミュニケーションを取ります。また、時には独立心を示すこともありますが、それは猫が自分の時間を大切にするという性質があるからです。 以上のような要素が、猫の視点から見た人生です。これらの特徴は、猫たちが自然と人間世界の両方の中で独自の存在感を持つ理由を示しています。
蟻の視点からは?
蟻の視点から見ると、人生は働きと犠牲の上に成り立っています。蟻は、昆虫の中でも最も社会的な生物の一つです。それぞれの個体は自分の役割をこなすことに専蟻の視点から見ると、人生は働きと犠牲の上に成り立っています。蟻は、昆虫の中でも最も社会的な生物の一つです。それぞれの個体は自分の役割をこなすことに専念し、その結果として全体が利益を得ます。 まず、働きの面があります。蟻たちは常に食料を探し、巣の安全を確保し、女王を守ります。これらの作業は一見地味ですが、全体の生存のために不可欠です。 一方で、犠牲も欠かせません。特に労働者の蟻たちは、自分の生殖能力を犠牲にしてまで他の個体のために働きます。これは、集団全体が繁栄するために必要なことなし、その結果として全体が利益を得ます。まず、働きの面があります。蟻たちは常に食料を探し、巣の安全を確保し、女王を守ります。これらの作業は一見地味ですが、全体の生存のために不可欠です。一方で、犠牲も欠かせません。特に労働者の蟻たちは、自分の生殖能力を犠牲にしてまで他の個体のために働きます。これは、集団全体が繁栄するために必要なことなのです。 しかし、蟻の人生はまた、生物界の厳しさも示しています。彼らは常に天敵から逃げ、環境の変化に適応しなければなりません。時には災害や病気によって大打撃を受です。しかし、蟻の人生はまた、生物界の厳しさも示しています。彼らは常に天敵から逃げ、環境の変化に適応しなければなりません。時には災害や病気によって大打撃を受けることもあります。それでも彼らは生き残りをかけて闘い続けるのです。 以上の要素は、蟻の視点から見た人生を形作ります。これらが示すのは、個人の幸福よりも全体の利益が優先される世界です。これは、彼らの生存戦略と進化上の適応ることもあります。それでも彼らは生き残りをかけて闘い続けるのです。以上の要素は、蟻の視点から見た人生を形作ります。これらが示すのは、個人の幸福よりも全体の利益が優先される世界です。これは、彼らの生存戦略と進化上の適応の一部なのです。
Karakuriをとにかく触ってみたい人は、下記でdemoがさわれますのでまずはこちらを試されてはどうでしょうか? system promptと属性を簡単にセットできるので、いろいろ体験できると思います。
Ollamaでは、属性の変化はちょっと簡単に設定を変えられそうもないので、そこは残念です。 おまけ:昨日紹介したPage Assist上での実行画面です。
Enchanted のアプリで動かした例はこちら
#AI #AIとやってみた #やってみた #ローカルLLM #Huggingface #karakuri #大規模言語モデル #macbookpro