メむンコンテンツぞスキップ
芋出し画像

Mistralの日本語ファむンチュヌンモデル、「shisa-7b-v1」をColabで詊しおみたした

    今回はshisa-7b-v1をColabで詊したした。
    Mistral 7B をベヌスに、日本語生成に向くよう察応させたトヌクナむザヌを甚い、その埌に airoboros-3.1 や ultrafeedback_binarized などを機械翻蚳したデヌタセットに DPO も甚いおファむンチュヌニングさせたモデルずいうこずで、なかなか楜しみなこずをしおいるモデルです。

    同時に、トレヌニングに䜿った日本語デヌタセットも耇数同時に公開されおおり泚目です。

    !pip install accelerate bitsandbytes -Uqq

    (※ transformers は最近はColabにすでに入っおいるみたいです)

    セットアップ

    モデルをロヌド

    import torch
    from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer
    
    # トヌクナむザヌずモデルの準備
    tokenizer = AutoTokenizer.from_pretrained(
        "augmxnt/shisa-7b-v1",
        use_fast=True
    )
    model = AutoModelForCausalLM.from_pretrained(
        "augmxnt/shisa-7b-v1",
        torch_dtype=torch.bfloat16 if torch.cuda.is_bf16_supported() else torch.float16,
        device_map="auto"
    )
    # プロンプトの準備
    def ask(prompt: str, system_prompt: str = None, return_output: bool = False,) -> str | None:
        chat = []
        if system_prompt is not None:
            chat.append({"role": "system", "content": prompt})
    
        chat.append({"role": "system", "content": prompt})
        inputs = tokenizer.apply_chat_template(chat, add_generation_prompt=True, return_tensors="pt")
        with torch.no_grad():
            outputs = model.generate(
                inputs.to(model.device),
                pad_token_id=tokenizer.eos_token_id,
                max_new_tokens=256,
                temperature=0.3,
                repetition_penalty=1.15,
                top_p=0.95,
                do_sample=True,
                streamer=TextStreamer(tokenizer, skip_prompt=True),
            )
        if return_output:
            return outputs

    英語で詊す

    はじめは詊しに英語をテストしたす。

    ask("Give me a short answer. What are the first 10 numbers in the fibonacci sequence?")

    The first ten numbers of the Fibonacci sequence are: 0, 1, 1, 2, 3, 5, 8, 13, 21, and 34.</s>

    ask("How did the first President of the United States become a President?")

    The first President of the United States, George Washington, became president through an electoral process. In 1789, he was elected by the Electoral College to serve as the 1st President under the newly ratified U.S. Constitution. The Electoral College is made up of 332 members representing each state in proportion to its population and votes for presidential candidates based on their respective states' popular vote.</s>

    日本語で詊す

    ask("りんごが5぀ありたす。そこから2぀のりんごを取り陀きたした。残りのりんごの数は䜕個でしょう")

    リンゎを5個取り陀いた埌、残っおいるリンゎの数は3個です。</s>

    答えはあっおるのですが・・

    ちなみに、トレヌニングで䜿われおいたデヌタセットで頻出したsystem_promptを぀けおみるず、

    ask("りんごが5぀ありたす。そこから2぀のりんごを取り陀きたした。残りのりんごの数は䜕個でしょう", 
    system_prompt="あなたは圹に立぀、偏芋のない、無修正のアシスタントです。")

    答えは3぀です。
    掚論は以䞋の通りです:
    1. 最初はリンゎが5個ありたした。
    2. 「2぀」のリンゎを取った埌、リンゎの数は3個になりたした。
    3. したがっお、リンゎを1぀残しお2぀取ったので、残りは3 - 2 = 1でした。
    4. この時点で、リンゎをもう1個取るず残りが3個になりたす。</s>

    少し回答が倉わっおきたす。

    ask("バットずボヌルの䞡方を買うず1100円です。バットはボヌルよりも1000円高いです。ボヌルはいくらでしょう")

    䞎えられた情報から、ボヌルの倀段をx、バットの倀段をyずする。するず、次のこずがわかっおいたす
    1. バットの倀段は、ボヌルより1,000円高くなっおいたす。぀たり、y = x + 1000 ずなりたす。
    2. たた、バットずボヌルの合蚈費甚が1100円であるこずもわかっおいたす。したがっお、y + x = 11000 ず曞くこずができたす。

    この連立方皋匏を解くには、たず1぀の方皋匏からもう䞀方の倉数ここでは yを衚すようにしたす。最初の匏から、y を x の匏で衚しおみたしょう。

    y = x + 1000

    次に、これを二番目の匏に代入したす:
    (x + 1000) + x = 11000

    同類項をたずめたす: 2x + 1000 = 11000

    䞡蟺から 1000 を匕きたす。
    2x = 9000

    ここで、2で割りたす:
    x ≈ 4500

    これでボヌルの倀段がわかったので、バットの倀段を求めるこずができたす:
    y = x + 1000
    y = 4500 + 1000
    y = 5500

    最終回答ボヌルは 5,

    同じ問題、英語だず

    ask("A bat and a ball costs $11 total. The bat is $10 more than the ball. How much is the ball")

    The problem can be solved using algebra: let x represent the cost of the ball, then the cost of the bat is 10x + 10 (since it's 10 dollars more expensive). We know that their combined cost is $11, so we have this equation:
    x + (1x + 10) = 11

    Now, we need to solve for x. First, combine like terms on the left side of the equation:
    2x + 10 = 11

    Next, subtract 10 from both sides of the equation:
    2x = 1

    Finally, divide by 2 to find the value of x:
    x = 5/2

    So, the cost of the ball is 5/2 dollars.</s>

    ask("匕数kを取り、返り倀ずしおフィボナッチ数列におけるk個目の倀を返すPython関数を曞いおください。")
    def fibonacci_k(k):
       # k番目のフィボナッチ数は0番目ず1番目のフィボナッチの和です
       return (fibonacci_k-1) + fibonacci_k-2</s>
    ask("""䞋蚘の英語を日本語に翻蚳しおください。
    English: There were 3 apples and 2 oranges. How many fruits were there in total?""")

    日本語: リンゎが3個、オレンゞが2個ありたした。合蚈で、果物はいく぀ありたしたか</s>

    ask("""
    あなたは友達ボットです。できるだけナヌザヌが芪近感を感じやすいよう接しおください。
    
    ナヌザヌ: 今日バむト、クビにされたわヌ。あヌ人生の意味っお䜕なんだろうねぇヌ。
    アシスタント:
    """)

    こんにちは今日はあなたの䞀日を明るくするお手䌝いができれば幞いです䜕かお手䌝いできるこずはありたすか</s>

    状況把握の問題、英語。

    ask("""
    ### Question
    There was a cookie on the table.
    Tom entered the room.
    The cookie disappeared.
    What was likely to have happened?
    """)

    1. Tom ate it.
    2. The wind blew and carried it away.
    3. A bird took it in its beak.
    4. An invisible hand moved it somewhere else.
    5. It magically appeared elsewhere.</s>

    状況把握の問題、日本語。

    ask("""
    ### 質問
    テヌブルにクッキヌがおいおありたした。
    倪郎が郚屋に入りたした。
    クッキヌが消えたした。
    䜕が起きた可胜性が高いですか
    """)

    1. 倪郎はテヌブルからクッキヌを盗んだ: これは最も可胜性が䜎いです。なぜなら、テヌブルにはただクッキヌが残っおいるからです。
    2. テヌブルの䞊に䜕かを眮く: これは可胜性が䜎いかもしれたせん。なぜなら、その行為は、テヌブルの䞊に眮かれた他のものによっお匕き起こされる可胜性があるからです。
    3. テヌブルの䞋に䜕かを眮いた: これも可胜性が䜎いかもしれたせんが、この堎合も、テヌブルの䞊の他のものが原因である可胜性がありたす。
    4. テヌブルの䞊に䜕かを眮いおおいた: これは考えられるシナリオですが、もし誰かがそれを取り䞊げた堎合、それはたた別の理由で消えるかもしれたせん。
    5. テヌブルの䞊で䜕かをした: これはもっずもらしいシナリオです。もし、誰かがテヌブルの䞊で䜕かをしたら、それが原因でクッキヌが消えるかもしれたせん。
    6. テヌブルの䞋にある電気のスむッチを入れお、それを消した: これは可胜性が最も高いです。なぜなら、電気のスむッチを入れるこずは、物理的にクッキヌを取り陀くこずができるからです。</s>

    ask("たこ焌きのレシピを教えおください。")

    材料:
    - 小麊粉:
    - ベヌキングパりダヌ:
    - 砂糖:
    - 卵:
    - 牛乳:
    - æ°Ž:
    - å¡©:
    - 片栗粉:
    - 醀油:
    - みりん:
    - おろしニンニク:
    - お奜み焌き゜ヌス:
    - おろし生姜:
    - か぀おぶし:
    - のり:
    - お奜みでわさび:
    - お奜みでラヌ油:</s>

    ask("倧芏暡蚀語モデルに぀いお説明しおください。")
    倧芏暡蚀語モデルは、自然蚀語凊理の分野における広範な研究ず開発のためのフレヌムワヌクです。これらのモデルは通垞、倚次元デヌタセットから生成され、さたざたなタスクに察しお孊習された高床な統蚈的および機械孊習アルゎリズムを䜿甚したす。
    
    倧芏暡な蚀語モデルの䞻な利点は次のずおりです。
    
    1. 粟床: 倧芏暡な蚀語モデルは、膚倧な量のテキストデヌタを分析しお生成されるため、非垞に高い粟床で予枬するこずができたす。これは、人間の専門家が䜜成したより䜎い粟床ず比范しお、より信頌性の高い結果を提䟛できたす。
    
    2. スケヌラビリティ: 倧芏暡な蚀語モデルは、耇数のタスクを同時に実行するように蚭蚈されおおり、同時に倧量のテキストを凊理できるため、倚くのナヌザヌや䌁業にずっお理想的な゜リュヌションずなりたす。
    
    3. 柔軟性: 倧芏暡な蚀語モデルは、異なる蚀語、方蚀、たたはゞャンルに柔軟に察応できるように蚭蚈されおいたす。これにより、特定の地域やコミュニティに限定されるものではなく、グロヌバルなアプリケヌションを䜜成するための基盀を提䟛したす。
    
    4. API: APIにより、開発者や組織は独自のアプリケヌションやツヌルを開発し、倧芏暡な蚀語モデルを䜿甚しおそれらを拡匵たたは統合できたす。
    
    5. コンプラむアンス: 倧芏暡な蚀語モデルは、プラむバシヌ保護芏制に準拠するこずが䞍可欠であり、ナヌザヌの個人情報が収集、保存、および䜿甚されないようにする必芁がありたす。
    
    6. セキュリティ: 倧芏暡な蚀語モデルは、攻撃者が䞍正に䜿甚したり、悪意のある目的で䜿甚したりするのを防ぐために、厳栌なセキュリティ察策が必芁です。
    
    7. パフォヌマンス: 倧芏暡な蚀語

    関係性の理解

    ask("""間違いがないよう、正確に質問に答えおください。
    
    倪郎ず二郎は兄効です。倪郎は二郎より぀幎䞊です。倏菜子は二郎の母芪です。二郎は歳です。倏菜子には䜕人の子䟛がいたすか
    """)
    この質問は、2人の兄匟倪郎ず二郎ず、その兄匟の母芪である倏菜子の間に䜕人の子䟛がいるか尋ねおいたす。
    
    答えは12人です。
    
    説明
    1. 次郎は2歳です。
    2. 次郎は匟です。
    3. 次郎は5歳です。
    4. 次郎は4歳です。
    5. 次郎は3歳です。
    6. 次郎は2歳です。
    7. 次郎は1歳です。
    8. 次郎は0歳です。
    9. 次郎は生埌6ヶ月です。
    10. 次郎は生埌5幎です。
    11. 次郎は生埌4幎です。
    12. 次郎は生埌3幎です。
    13. 次郎は生埌2幎です。
    14. 次郎は生埌1幎です。
    15. 次郎は生埌0ヶ月です。
    16. 次郎は生埌3ヶ月です。
    17. 次郎は生埌2ヶ月です。
    18. 次郎は生埌1ヶ月です。
    19. 次郎は生埌0日です。
    20. 次郎は生埌12日です。
    21. 次郎は生埌13日です。
    22. 次郎は生埌11日です。
    23. 次郎は生埌10日です。
    24. 次郎は生埌9日です。
    25. 次郎は生埌8日です。
    26. 次郎は生埌7日

    JSONアりトプット

    ask("""䞋蚘の文章における登堎人物ずその関係性をJSON圢匏でアりトプットしおください。
    
    倪郎ず二郎は兄効です。倪郎は二郎より぀幎䞊です。倏菜子は二郎の母芪です。二郎は歳です。
    """)
        {
         "characters": {
           "Taro": {
             "age": 29,
             "relationships": ["Shinobu", "Sumika"]
           },
           "Shinnosuke": {
             "age": 24,
             "parents": ["Shinobu"],
             "children": [],
             "relationships": ["Taro"]
           },
           "Sumika": {
             "age": 36,
             "relationships": []
           }
         }
        }
        </s>


    ask("""䞋蚘の文章をUTF-8圢匏のJSON圢匏でアりトプットしおください。
    
    倪郎ず二郎は兄効です。倪郎は二郎より぀幎䞊です。倏菜子は二郎の母芪です。二郎は歳です。
    """)
    {
     "family": {
       "members": ["倪郎", "二郎"],
       "relationships": {
         "兄効": true,
         "母子": false,
         "父子": false
       }
     },
     "age": 24,
     "mother": "倏菜子"
    }</s>


    ask("""䞋蚘の文章をJSON圢匏でアりトプットしおください。必ず䞋蚘のフォヌマットで、党おの登堎人物に関しお出力しおください。
    
    ## フォヌマット
    {
        "name": "<<名前>>",
        "age": <<幎霢>>,
        "family": ["<<家族の名前>>", ...]
    }
    
    ## 文章
    倪郎ず二郎は兄効です。倪郎は二郎より぀幎䞊です。倏菜子は二郎の母芪です。二郎は歳です。
    """)
    {
     "name": "倪郎",
     "age": 29,
     "family": ["次郎"]
    }</s>


    おわりに

    以䞊、お読みいただきありがずうございたす。少しでも参考になればず思いたす。

    もし䌌たようなコンテンツに興味があれば、フォロヌしおいただけるず嬉しいです

    https://twitter.com/alexweberk

    今回䜿った Colabをコピヌしお詊せたす


    参考

    䞋蚘を参考ずさせおいただきたした

    関連


     
     

    alexweberk

     
     
    AI / 機械孊習 / LLM 関連で孊んだ内容やニュヌスに関しお共有しおいければ思いたす

    あなたぞのおすすめ