9cubed
ブログ | Tailwind | Vite | Python | Node.js | Linux | PowerShell | その他 | 将棋ウォーズ | 歌の練習
< 前の記事

pipeline で文章の要約

次の記事 >

簡易Webサーバーの作成

Python

[Python]pipeline で文章の生成

公開日:2025-12-19
更新日:2025-12-19

1. 概要

pipeline を使用して、文章を生成します。

2. パッケージのインストール

コマンド
pip install torch
pip install transformers
pip install bitsandbytes
pip install accelerate

3. コード

コード
# モデルの保存先の設定
# デフォルトでは、ダウンロードしたモデルは、C:\Users\{ユーザ名}\.cache\huggingface\hub に保存される
# 環境変数の設定は、pipeline の import 前に行う必要がある
import os
os.environ['HF_HUB_CACHE'] = 'e:/python/cache' 

import torch
from transformers import pipeline, BitsAndBytesConfig

# 4bit量子化設定
quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,                     # 4bitでロード
    bnb_4bit_quant_type='nf4',             # 高品質な量子化方式
    bnb_4bit_use_double_quant=True,        # 圧縮
    bnb_4bit_compute_dtype=torch.float16,  # 計算はfloat16
)

generator = pipeline(
    'text-generation',
    model='elyza/ELYZA-japanese-Llama-2-7b-fast-instruct', #model='elyza/ELYZA-japanese-Llama-2-7b-instruct',  
    dtype=torch.float16,
    model_kwargs={'device_map': 'auto',  # モデルをCPUとGPUに自動的に分散
                  'quantization_config': quantization_config
    }
)

system_prompt = 'あなたは誠実で優秀な日本人のアシスタントです。'
user_message = 'すごく寒いのですが、どうすればよいですか?'

prompt = f'<s>[INST] <<SYS>>\n{system_prompt}\n<</SYS>>\n\n{user_message} [/INST]'

result = generator(prompt,
    max_new_tokens=300, # 生成するトークンの最大数。トークンは LLM が処理する最小単位。1つの単語が複数トークンになる場合もある

    do_sample=True,     # True  : 次に出力するトークンを選択する時にランダムの要素を追加する。毎回結果が変わる  
                        # False : 確率の高いトークンを選択するため常に同じ結果になりやすい

    temperature=0.7,    # 出力のランダムさ。
                        # 0.1 ~ 0.5 : 単調
                        # 0.7 ~ 0.8 : バランスが良く自然
                        # 1 ~       : 創造的

    top_p=0.9,          # 次のトークンの候補を確率順に並べて、確率に加算していき、0.9になるまでを選択するトークンの対象とする。低確率のトークンは排除する。

    repetition_penalty=1.1  # トークンを繰り返し使う際のペナルティ
                            # 1.0        : ペナルティなし。何度も繰り返し使う
                            # 1.1 ~ 1.2 : 少し繰り返しを抑える。自然
                            # 2.0 ~     : 強引に繰り返しを避けるため不自然になる
)

print('-----')
print(result[0]['generated_text'])

実行すると、最初にモデルを読み込むため、かなり時間がかかります。そのため、単発で使う用途には不向きです。
読み込み後は速く生成できるため、繰り返し生成させたい場合は、プログラムを常駐させるなどの工夫が必要です。

4. Gradio で対話型AI にする

4.1 パッケージのインストール

コマンド
pip install gradio

4.2 コード

コマンド
import os
os.environ['HF_HUB_CACHE'] = 'e:/python/cache' 

import torch
from transformers import pipeline, BitsAndBytesConfig

# 4bit量子化設定
quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,                     # 4bitでロード
    bnb_4bit_quant_type='nf4',             # 高品質な量子化方式
    bnb_4bit_use_double_quant=True,        # 圧縮
    bnb_4bit_compute_dtype=torch.float16,  # 計算はfloat16
)

generator = pipeline(
    'text-generation', 
    model='elyza/ELYZA-japanese-Llama-2-7b-fast-instruct', #model='elyza/ELYZA-japanese-Llama-2-7b-instruct',  
    dtype=torch.float16,
    model_kwargs={'device_map': 'auto',  # モデルをCPUとGPUに自動的に分散
                  'quantization_config': quantization_config
    }
)

import gradio as gr

def chat_with_elyza(message, history):
    prompt = f'<s>[INST] <<SYS>>\nあなたは誠実で優秀な日本人のアシスタントです。\n<</SYS>>\n\n{message} [/INST]'
    
    result = generator(
        prompt,
        max_new_tokens=300,
        do_sample=True,
        temperature=0.7,
        top_p=0.9,
        repetition_penalty=1.1
    )
    
    response = result[0]['generated_text'][len(prompt):].strip()
    return response

# チャットインターフェースの作成
chat = gr.ChatInterface(
    fn=chat_with_elyza,
    title="チャット",
    description='チャットです。'
)

# チャットの起動
chat.launch()

実行後、ブラウザで http://127.0.0.1:7860/ にアクセスすると、対話型 AI として使えます。
< 前の記事

pipeline で文章の要約

次の記事 >

簡易Webサーバーの作成

YouTube X

新着一覧

  • SCSS のインストールVite
  • Tailwind CSS のプロジェクトの作成Tailwind
  • TypeScriptのプロジェクトの作成Vite
  • Flask のインストールと動作確認Python
  • 簡易Webサーバーの作成Python
  • pipeline で文章の生成Python
  • pipeline で文章の要約Python
  • 音声から文字起こしPython
  • Node.js のインストールNode.js
  • .ps1(PowerShellスクリプト)を実行可能にするPowerShell

アーカイブ

  • 2025/12
  • 2025/11
  • 2025/10
  • 2025/09
  • 2025/08

以前のカテゴリー一覧

  • CakePHP3
  • CentOS7
  • HTML・CSS・JavaScript
  • Haskell
  • JavaScript
  • Kotlin
  • Laravel5
  • PHP
  • Python
  • Ruby
  • RubyOnRails5
  • TypeScript
  • Vue.js
  • Webサーバ講座
  • Webプログラミング講座
  • jQuery
  • linux
  • パソコン講座
  • ブログ
  • プログラミング講座
  • メモ帳作成講座
  • 数学

Copyright © 9cubed. All Rights Reserved.

プライバシーポリシー 利用規約
▲