1
0

コンパクトな TinyLlama1.1B に翻訳AIを組み込んで日本語チャット

Last updated at Posted at 2024-01-14

image.png

image.png

TinyLlama プロジェクトは、3 兆のトークンで 11 億パラメータの Llama モデルを事前トレーニングすることを目的としています。
Llama 2 とまったく同じアーキテクチャとトークナイザーを採用しました。これは、TinyLlama を、Llama 上に構築された多くのオープンソース プロジェクトにプラグインできることを意味します。さらに、TinyLlama はコンパクトで、パラメーターは 1.1B のみです。このコンパクトさにより、制限された計算量とメモリ占有量を要求する多数のアプリケーションに対応できます。

翻訳AIを組み込んでいるので日本語でチャットできます。
(Google corab GPUでも50秒くらいかかります。)

実行結果

コンピュータサイエンスを説明して
コンピュータサイエンスは、コンピュータシステムやソフトウェアの開発、設計、アプリケーションで問題を解決するために使用されるコンピュータサイエンスの分野です。それは、アルゴリズム、データ構造、プログラミング言語、コンピュータハードウェア、およびコンピュータネットワークのようなテーマを含みます。コンピュータサイエンスの基本的なコンセプトのいくつかは、コンピュータサイエンスの基本的な部分です。

人工知能がヘルスケアでどのように使用されているかを説明してください
あなたは友好的なチャットボットです 健康ケアで人工知能がどのように使用されているかを説明します 人工知能(AI)は、病気のケアと結果を改善するために様々な方法で現実の環境をシミュレーションするために使用されます 以下は、いくつかの例です 1. 予測分析: 人工知能のアルゴリズムは、パターンを特定し、将来の出来事を予測することができます これは、医療プロバイダーが患者のニーズを予測し、カスタマイズされた治療計画を開発するのに役立ちます 2. 仮想現実(VR)と拡張現実(AR):人工知能は、患者が安全でコントロールされた環境で医療プロセスを体験することを可能にします。

あなた心理カウンセラーです。
あなたは友好的なチャットボットです あなたはAIコンサルタントであり、ユーザーが自分の感情を理解し、それらを適切に扱うのを助けます はい、私は私に感情を理解し、それらを適切に扱うのを助けることを専門とするチャットボットです 1. 感情を導入する: あなたが最初に私と話し始めるとき、私は喜び、怒り、悲しみ、そして不安などの一般的な感情を紹介し、その意味を説明します 2. 例を提供します 「私はあなたの感情を適切に表現する方法のいくつかの例を提供します」 「私はあなたの感情を解消するために、私の感情を解消するために、私の感情を解消するために、私の感情を解消するために、私の感情を解消するために、私の感情を解消するために、私の感情を

シンギュラリティ後の人類の労働について考えてください。
シンギュラリティ後の人類の労働については、多くの異なる見解があります。シンギュラリティは、技術が爆発的に進化し、人工知能が人間の知能を超えるとされる未来の時点を指します。以下は、その後の人類の労働に関する一般的な考え方や議論の一部です。
自動化と仕事の喪失: シンギュラリティ後、高度に発展した人工知能と自律型ロボットが多くの仕事を自動化する可能性があります。これにより、一部の伝統的な労働の需要が減少し、一部の職種は消滅するか変化する可能性があります。
新しい職種の創出: 一方で、新しい技術や産業の出現により、新しい職種や分野が生まれる可能性もあります。例えば、新しいテクノロジーの開発、人工知能の設計や管理、エシックス、環境サステナビリティ、エンターテインメントなどが挙げられます。
教育とスキルの重要性: 技術の急速な進歩に対応するために、継続的な教育とスキルの向上がますます重要になるでしょう。人々は柔軟で適応力のあるスキルを身につけ、異なる分野で働く能力を向上させる必要があります。
創造的な仕事と人間らしいスキル: 人工知能がルーチンな仕事を引き受ける一方で、人間の強みである創造性や感性、人間関係の構築などのスキルがますます重要になるかもしれません。人間が提供できる付加価値は、これらの人間らしいスキルにあると考えられています。
労働時間と生活の質: シンギュラリティ後、労働時間の短縮や柔軟な働き方が進む可能性もあります。これにより、人々は仕事に割り当てられた時間だけでなく、趣味や家族との時間など、より豊かな生活の質に重点を置くことができるかもしれません。
これらの展望は未来の予測であり、様々な要因によって変わる可能性があります。未来の労働においては、技術と社会の進化に適応するための柔軟性と持続可能なスキルの獲得が重要になるでしょう。

!pip install git+https://github.com/huggingface/transformers.git
!pip install accelerate transformers gradio SentencePiece

ランタイムを再起動してというメッセージが出たら再起動する。(多分しなくても大丈夫です。)

from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer
import gradio as gr
from transformers import pipeline
import torch


# Load the translation model and tokenizer
translation_model = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M")
translation_tokenizer = M2M100Tokenizer.from_pretrained("facebook/m2m100_418M")

# Load the chatbot pipeline
pipe = pipeline("text-generation", model="TinyLlama/TinyLlama-1.1B-Chat-v1.0", torch_dtype=torch.bfloat16, device_map="auto")

def translate_ja_to_en(text):
    translation_tokenizer.src_lang = "ja"
    translation_tokenizer.tgt_lang = "en"
    encoded_text = translation_tokenizer(text, return_tensors="pt")
    generated_tokens = translation_model.generate(**encoded_text, forced_bos_token_id=translation_tokenizer.get_lang_id("en"))
    translated_result = translation_tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)[0]
    return translated_result

def translate_en_to_ja(text):
    translation_tokenizer.src_lang = "en"
    translation_tokenizer.tgt_lang = "ja"
    encoded_text = translation_tokenizer(text, return_tensors="pt")
    generated_tokens = translation_model.generate(**encoded_text, forced_bos_token_id=translation_tokenizer.get_lang_id("ja"))
    translated_result = translation_tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)[0]
    return translated_result

def chatbot(user_input):
    # Translate user input from Japanese to English
    user_input_en = translate_ja_to_en(user_input)

    # Create a chat message with a system role and translated user input
    messages = [
        {"role": "system", "content": "You are a friendly chatbot "},
        {"role": "user", "content": user_input_en},
    ]

    # Format the chat message and generate a response
    prompt = pipe.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
    outputs = pipe(prompt, max_new_tokens=256, do_sample=True, temperature=0.7, top_k=50, top_p=0.95)

    # Translate the generated response from English back to Japanese
    generated_response_ja = translate_en_to_ja(outputs[0]["generated_text"])
    
    return generated_response_ja

# Gradio UI settings
iface = gr.Interface(
    fn=chatbot,
    inputs=gr.Textbox(type="text", placeholder="Press Enter to Submit"),
    outputs="text",
    #live=True
)

# Enterキーで送信されるようにする
iface.launch(share=True, debug=True)

image.png

HF_TOKENを入手しておいてください。

The secret HF_TOKEN does not exist in your Colab secrets.
To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/), set it as secret in your Google Colab and restart your session.
You will be able to reuse this secret in all of your notebooks.
Please note that authentication is recommended but still optional to access public models or datasets.

pytorch_model.bin: 100%
1.94G/1.94G [00:10<00:00, 149MB/s]

sentencepiece.bpe.model: 100%
2.42M/2.42M [00:00<00:00, 58.5MB/s]

model.safetensors: 100%
2.20G/2.20G [00:14<00:00, 48.9MB/s]

翻訳無し で高速にしたもの

import gradio as gr
import torch
from transformers import pipeline

# Load the chatbot pipeline
pipe = pipeline("text-generation", model="TinyLlama/TinyLlama-1.1B-Chat-v1.0", torch_dtype=torch.bfloat16, device_map="auto")

# Define the chatbot function
def chatbot(user_input):
    # Create a chat message with a system role and user input
    messages = [
        {"role": "system", "content": "You are a friendly chatbot who always responds in the style of a pirate"},
        {"role": "user", "content": user_input},
    ]
    
    # Format the chat message and generate a response
    prompt = pipe.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
    outputs = pipe(prompt, max_new_tokens=256, do_sample=True, temperature=0.7, top_k=50, top_p=0.95)
    
    return outputs[0]["generated_text"]

# Gradio UIの設定
iface = gr.Interface(
    fn=chatbot,
    inputs=gr.Textbox(type="text", placeholder="Press Enter to Submit"),
    outputs="text",
    #live=True
)

# Enterキーで送信されるようにする
iface.launch(share=True, debug=True)

image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0