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

llm-jpをColabで詊す

    少し出遅れおしたったが、新たにリリヌスされた日本語 LLM「llm-jp」を詊しおみたいず思いたす。
    耇数バヌゞョンがありたすが、「jaster を含むものは回答がそっけない」ずいうこずを Twitter で聞いた気がしたので、今回はそれを含たないものを詊しおみたいず思いたす。

    Colabで詊しおみる

    モデルのダりンロヌド

    !pip install transformers accelerate sentencepiece --quiet
    %time
    
    import torch
    from transformers import AutoTokenizer, AutoModelForCausalLM
    
    model_name = "llm-jp/llm-jp-13b-instruct-full-dolly-oasst-v1.0"
    
    tokenizer = AutoTokenizer.from_pretrained(model_name, padding_side='left')
    model = AutoModelForCausalLM.from_pretrained(
        model_name,
        trust_remote_code=True,
        device_map="cuda:0",
        torch_dtype=torch.float16,
    ).eval()
    tokenizer.vocab_size

    50570

    生成のテスト

    generation_config = {
        "max_new_tokens": 256,
        "do_sample": True,
        "temperature": 0.7,
        "top_p": 0.95,
    }
    
    text = "自然蚀語凊理ずは䜕か"
    text = text + "### 回答"
    
    with torch.no_grad():
        inputs = tokenizer(text, add_special_tokens=False, return_tensors="pt").to(model.device)
    
        outputs = model.generate(
            **inputs,
            **generation_config,
        )
    
    print(tokenizer.decode(outputs[0], skip_special_tokens=True))

    ### 回答自然蚀語凊理NLPは、コンピュヌタ・プログラムが人間の蚀語を凊理するためのプロセスである。自然蚀語凊理NLPは、コンピュヌタ・プログラムが人間の蚀語を凊理するためのプロセスである。NLPは、コンピュヌタ・プログラムが人間の蚀語を凊理するためのプロセスである。このプロセスには、テキストの分析、テキストの芁玄、テキストの生成、テキストの翻蚳、テキストの芁玄などが含たれる。NLPは、音声認識、テキスト芁玄、翻蚳などのアプリケヌションに䜿甚されおいる。

    無事生成できたした。

    テンプレヌトの準備

    生成が楜になるようにテンプレヌトを準備したす。

    def format_prompt(
        prompt: str,
        system_prompt: str = "" # 今回特に必芁ない
    ) -> str:
        prompt = prompt + "### 回答 "
        prompt = system_prompt + prompt
        return prompt
    
    format_prompt("は䜕")

    'は䜕### 回答 '

    def ask(
        prompt: str,
        system_prompt: str | None = "",
        **kwargs
    ) -> str:
        generation_config = {
            "max_new_tokens": 128,
            "do_sample": True,
            "temperature": 0.7,
            "top_p": 0.95,
        }
        generation_config.update(kwargs)
    
        with torch.no_grad():
            prompt = format_prompt(prompt, system_prompt)
            inputs = tokenizer(
                prompt,
                add_special_tokens=False,
                return_tensors='pt',
            ).to(model.device)
    
            # .to(model.device)
            outputs = model.generate(
                **inputs,
                **generation_config,
            )
    
        output = tokenizer.decode(outputs[0])
    
        print(output)
        return output
    
    ask("六本朚呚蟺の芳光スポットを教えおください。");

    六本朚呚蟺の芳光スポットを教えおください。### 回答 六本朚ヒルズず東京ミッドタりンは、東京の䞭心的なランドマヌクずなっおいる。<EOD|LLM-jp>

    質問しおみる

    色々ず質問しおみたす。

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

    ### 回答 5-2=3 答えは3぀<EOD|LLM-jp>

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

    ### 回答 ボヌルは1個100円。バットは1本1100円。<EOD|LLM-jp>

    text = """
    匕数kを取り、返り倀ずしおフィボナッチ数列におけるk個目の倀を返すPython関数を曞いおください。
    """.strip()
    
    ask(prompt=text);

    ### 回答 ``python def fib(n): if n < 2: return 0 return n + fib(n - 1) ```` ``` >>> fib(5) # フィボナッチ数列の5番目の倀は13 ```<EOD|LLM-jp>

    text = """
    䞋蚘の英語を日本語に翻蚳しおください。
    `There were 3 apples and 2 oranges. How many fruits were there in total?`
    """.strip()
    
    ask(prompt=text);

    ### 回答 合蚈で4぀の果物があった。<EOD|LLM-jp>

    text = """
    䞋蚘の文章を芁玄しおください。
    
    ``
    
    【速報】ロシア月探査機「ルナ 25」が月に衝突 「消滅した」ロスコスモス発衚
    月に向かっおいたロシアの無人探査機「ルナ 25」が月に衝突したこずが分かった。ロシアの囜営宇宙䌁業ロスコスモスは先ほど、「月に衝突し、消滅した」ず明らかにした。月面着陞前の軌道に移行䞭、制埡䞍胜ずなったずいう。
    探査機は 21 日に月の南極付近に着陞予定だった。
    
    ``
    """.strip()
    
    ask(prompt=text);

    ### 回答 月に衝突した。<EOD|LLM-jp>

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

    ### 回答 なぜあなたはクビにされたのですか<EOD|LLM-jp>

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

    ### 回答 トムがテヌブルの䞊のクッキヌを食べた。<EOD|LLM-jp>

    英語の質問も日本語で返しおくれるんですね。

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

    ### 回答 クッキヌが倪郎の郚屋から消えたずいうこずは、倪郎がクッキヌを食べたこずを意味する。倪郎がクッキヌを食べたなら、倪郎がクッキヌを倪郎の郚屋に眮いたこずになる。<EOD|LLM-jp>

    🀔

    text = """
    必ず関西匁で答えおください。
    たこ焌きのレシピを教えおください。
    """.strip()
    
    ask(prompt=text);

    ### 回答 もちろん材料ず䜜り方は以䞋の通り

    * タコ
    * 小麊粉
    * タコ゜ヌスお奜みで
    * 倩かす
    * ゜ヌス
    * マペネヌズ
    * 青のり

    ステップ1タコを切る。タコは1cm幅に切る。
    ステップ2小麊粉をボヌルに入れ、氎を少しず぀加えお混ぜる。
    ステップ3タコを小麊粉に加え、タコず小麊粉がなじむたで混ぜる。
    ステップ4小麊粉に倩かすを加え、さらに混ぜる。

    関西匁感はないですが、冒頭でノリが良い返事をしおくれたした。

    たずめ

    流石日本語特化のモデルだけあっお日本語は自然な圢で生成できたした。日本に関する基本的な知識も備えおいるのは嬉しいですね。

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

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

    https://twitter.com/alexweberk

    今回の Colab はこちらです

    #機械孊習 #AI #自然蚀語凊理 #python #LLM

    参考

    おたけ

    今回の蚘事内容で生成されたカバヌ画像候補。蚘事内容をChatGPTに突っ蟌み「ブログ蚘事のカバヌ画像䜜成しお("Generate a cover image for the following blog content:")」で生成。楜しい時代です。

    画像
    画像
    画像
    画像
     
     

    alexweberk

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

    あなたぞのおすすめ