見出し画像

日本語ファインチューニングされたLlama-3-8Bを MLX & Gradioで試してみる

Llama-3が発表されてすぐにPhi-3が登場してきて賑やかしい日々です。
そんななかLlama-3-8Bに対して日本語をファインチューニングしたモデルが登場しています。
現時点では以下の二つです。

llama-3のeosの設定が最初わかりませんでしたが、以下のmlxのコードで上手く行きました。(最後のスクリプト全体も掲載します)

model, tokenizer = load(モデル名, tokenizer_config={"eos_token":"<|eot_id|>"})

さて、それぞれのモデルに対して、同じ質問を同じ流れで聞いた回答を並べて提示します。Tempertureはいずれも0.8、生成tokenは512を指定します。


あなたは誰?

これはAIによって提供されるサービスのデフォルトの回答です。このAIは、ユーザーの質問に回答する目的で設計されています。私の情報や詳細については、ユーザー自身が提供するものです。

現在のAIシステムは、人間の知識や経験に基づいています。このシステムは、ユーザーが入力した質問に回答するために、テキストデータベースの内容を検索します。

このシステムにより、ユーザーはあらゆるトピックについての質問を投稿し、速やかに具体的な回答を受け取ることができます。ただし、このシステムは最終的な判断や専門知識を提供することはできません。

もし特定のトピックについて詳細な情報を得たい場合や、専門知識を求める場合は、適切な専門家に相談することをお勧めします。

lightblue/suzume-llama-3-8B-japanese

私はChatbot「LLaMA」です。私は人工知能言語モデルであり、自然言語処理のテクノロジーに基づいて作成されています。私は、さまざまなトピックの質問に答えるために使用され、ユーザーとの対話に使用されています。

haqishen/Llama-3-8B-Japanese-Instruct

人生の意味を論じて

人生の意味は、多くの哲学者や思想家によって異なる解釈がなされています。人は、自己発見や他者との関わりを通じて、人生の意味を見い出すことができます。また、人は自分の価値観や目標によって、人生の意味を見出すこともできます。

一部の人にとって、人生の意味は、自己発掘や成長を通じて見いだされることがあります。これは、人生を楽しむことや、自分自身を認識し、成長させることによって人生の意味を見出せる様子です。

他には、他者との関わりや、社会に対する貢献が人生の意味を見出す手段として考えられています。この解釈では、他者とつながり、共感することで人生の意味を見出すことが重要視されます。また、社会に対して何か貢献できることが人生の意味を見出すための方法としても見なされています。

人生の意味を見出すためには、自分の中に何が重要なのかを考えることが重要です。人は、自分の価値観や目標によって、人生の意味を見出すことができます。例えば、地球を愛護することや、友情を深めること、成功を求めることなど、あなたの価値観や目標によって人生の意味は異なります。

人生は短く、短くても価値あることがあります。人生の意味を見出す手段や方法は、人によって異なります。人生の意味を見つけるためには、自分の価値観や目標を考え、自分の中に何が重要なのかを理解することが重要です。

lightblue/suzume-llama-3-8B-japanese

人生の意味に関する議論は、古代から続いている哲学的および精神的なテーマです。人生の意味の多くの異なる可能性が提案されており、理解するために多くの異なるアプローチがあります。以下は、あなたが考えることを始めるためのいくつかの重要な質問です:

「人生の意味」を尋ねることは、意味を無視しながら、その質問に答える方法を探求することを意味します。これは、人生の意味を探求することで、意味を探求することに対する意味を尋ねることと似ています。

さらに、人生の目的の提案に関する議論は、意味と目的の概念に関する議論に関連しています。正確には何かを望むときに、「目的」を意味することは、望むことを「意図する」ということです。したがって、「人生の目的」を探求することは、人生の意味を探求することと似る可能性があります。

haqishen/Llama-3-8B-Japanese-Instruct

メタファーやアナロジーを用いて説明して

人生は、ナンバーズのゲームのレベルに似ています。ユーザーは、レベルを進めていくことで、トレジャーを得ることができます。このレベルを進めていく過程で、ユーザーは様々なアイテムやスキルを手に入れて、自分を強化することができます。

レベルを進めるうちに、ユーザーは様々なステージやマップを経験し、チョコレートの香りがする天国を目指します。ユーザーは、過去のレベルを振り返り、間違った選択を避けることで、未来のレベルを楽に進めていくことができます。

人生のように、ナンバーズのゲームにも成功や失敗、振り返りが存在します。ユーザーは取り戻すことができる失敗や、より良い選択肢を選ぶことで、人生を楽しくすることができます。

このナンバーズのゲームの比喩は、人生の旅を通じて成長し、自分を強化することを促進するものです。また、失敗や反省を通じて、より良い選択肢を選ぶことが重要な手段であることも示唆しています。

lightblue/suzume-llama-3-8B-japanese

人生の意味は、筌を探している人のように、探求するものです。人生は、考えることができる「何」ではなく、「何」としてそれを考え、理解することができます。したがって、人生の意味を理解するためのメタファーやアナロジーを使用することは、人生の意味を理解するための道具として使用するメタファーやアナロジーを使用することと同じです。

haqishen/Llama-3-8B-Japanese-Instruct

猫の視点で、猫の生きる意味を猫の語りで語って

(猫の視点から)にゃー、今日も朝から出かけて、日の出を感じるのがいいですね。そういえば、今日も何か新しい物を見えて楽しいですよ。

生きる意味を考えるのは、ねこにゃこ。私は、眠りながらも、どこかで何かが起こっていることを感じます。彼らと一緒に寝るのも、楽しいですよ。

時には、外の世界を見に行くことがある。すると、驚くべきことがたくさん見れるです。野生の動物や、人間界の快適さなど、多くの素晴らしいものが見れるんです。

生きる意味を見つけるためには、自分の生き方を好きにして、楽しいと思えることをするのがいいですよ。残念ですが、他の生き物の生き方や意見は、私の理解圏外です。

生きる意味を見出すためには、自分の生き方や人生を楽しむことが重要です。残念ながら、私の物語は猫の視点からですが、人間の物語も同様ですよ。人生は短く、短くても楽しいことがあるです。

lightblue/suzume-llama-3-8B-japanese

「Whiskersはとても高いと感じることができます。しかし、私の目標は、猫が私に与えるものを最小限に抑えて、各種の問題を解決することです。私がすることができるすべてのことを私に言うことができる人を探す方法を見つける必要があります。私はそれを探しているので、それは私がそれを持っていることを知る方法です。

haqishen/Llama-3-8B-Japanese-Instruct

ここまでの感じだと、lightblueのモデルの方が長ありそうです。

さて、この記事を書くためにHuggingfaceのリンクを確認したら、hazishienさんのファインチューニングした新しい以下のモデルが8時間前に出ていました。

試していないので、よかったら試してみてください。

最後に、上の生成のために動かしたプロンプトは下記です。loadのところで、model_1 あるいは model_2 を指定してください。

import gradio as gr
import time
from mlx_lm import load, generate

model_1 = "haqishen/Llama-3-8B-Japanese-Instruct"
model_2 = "lightblue/suzume-llama-3-8B-japanese"

model, tokenizer = load(model_2, tokenizer_config={"eos_token":"<|eot_id|>"})


def predict(message, history, token, temp_value):
    prompt = []

    for human, assistant in history:
        prompt.append({'role': 'user', 'content': human})
        prompt.append({'role': 'assistant', 'content': assistant})
        
    prompt.append({'role': 'user', 'content': message})
    inputs = tokenizer.apply_chat_template(prompt,
                                           tokenize=False,
                                           add_generation_prompt=True)
                                           
    full_prompt = inputs
    #print  (f"入力される最終プロンプトはこんな感じ:\n{full_prompt}")
    response = generate(model, tokenizer, prompt=full_prompt, temp = temp_value, max_tokens = token, verbose=False) 
    #return  response.strip()
    for i in range(len(response)):
            time.sleep(0.05)
            yield response[: i+1]

demo = gr.ChatInterface(predict, 
    title="llama-3-8Bの日本語ファインチューニングモデル",
    description="",
    additional_inputs=[
        gr.Slider(100, 1024, value=512, label="Tokens"),
        gr.Slider(0, 1, value=0.8, label="Temperture")
                        ]
                       )

if __name__ == "__main__":
    demo.launch()

#Llama -3 #大規模言語モデル #Huggingface #mlx #gradio #Macbookpro #ローカルLLM

この記事を最後までご覧いただき、ありがとうございます!もしも私の活動を応援していただけるなら、大変嬉しく思います。