Python

【コード付き】Pythonを使ったチャットボットの作り方を解説!

記事内に商品プロモーションを含む場合があります
ウマたん
ウマたん
当サイト【スタビジ】の本記事では、Pythonを使ったチャットボットの作り方をコードによる実装も含めて解説していきます!ChatGPTにより、高度な回答が可能なチャットボットが簡単に作れるようになりました。本記事を読んで自分なりのチャットボットを作っていきましょう!

こんにちは!スタビジ編集部です!

近年ChatGPTの登場によりチャットボットへの注目度が高くなっています。

今回はそんなチャットボットをPythonによる作り方を解説していきます!

ウマたん
ウマたん
当メディアが運営するスタアカの以下のコースでPythonでGPTのモデルを利用する方法を解説しています!ぜひ参考にしてみて下さい!

チャットボットとは

まずは「チャットボットとは?」について簡単に見ていきます。

チャットボットとはユーザーの言葉や文章に対して自動で応答してくれるコンピュータプログラムを指します。

最初はユーザーの文章をそのまま返答したり、特定の単語が当てはまったら用意したテンプレート文を出力する簡単なものでした。

自然言語処理技術機械学習などのAI技術が発展したことにより、自然で人間らしい会話が出来るようになりました。

このようにチャットボットには大きく以下の2種類があります。

・ルールベースモデル
・AIベースモデル

それぞれの特徴について見ていきましょう。

ウマたん
ウマたん
チャットボットは自動的に会話行うことが出来るプログラム!いろんな場面で活躍しているね!

ルールベースモデル

ルールベースモデル」のチャットボットはあらかじめ設定されたルールやパターンに基づいて会話を行います。

ルールベースモデルはチャットボットの原型となるモデルで特徴は以下です。

ルールベースモデルの特徴

・事前に設定されたルールに従って動作
・具体的なキーワードやフレーズに対してルールを設定することが多い
・開発が比較的簡単でルールに従った質問に対して正確な応答が出来る
・状況や文脈に応じた返答が難しくルール外の質問に対応できない
・新しい会話パターンに対応するためには、新しくルールを追加・更新する必要がある

想定された会話に対しては適切な回答が出来るため、利用者の質問に回答する”カスタマーサポート“や指示された行動をする”タスク指向型“のチャットボットによく利用されます。

AIベースモデル

AIベースモデル」のチャットボットは機械学習やディープラーニングを用いて大量のテキストデータを学習し、自然言語処理技術によって、人間のような会話を行います。

AIベースモデルは以下の特徴があります。

AIベースモデルの特徴

・AI技術を使って、大量のテキストデータを学習⇒文脈や状況に応じて会話を行う
・事前にルールを設定しなくて幅広い質問や会話パターンに対応できる
・学習データを追加していくことで、回答の精度が向上し、より人間らしい会話が出来るようになる
・膨大な学習データと演算マシンが必要なため、開発や学習に時間がかかり、コストも大きい

文脈や状況に応じて柔軟に回答できるため”エンターテイメント型“のチャットボットや”AIアシスタント“など様々な分野で活用されています。

特にLLMの登場により”ChatGPT“のような高性能な会話が出来るボットも実現しています。

ウマたん
ウマたん
ルールベースとAIベースを組み合わせた、ハイブリット型もある!

ルールに基づく処理と機械学習を組み合わせて、柔軟性と正確性を向上させているよ!

自然言語処理で出来ることについて、以下の記事で詳しく解説しています!

自然言語処理
【入門】自然言語処理でできることをいくつかPythonで実装してみる!当サイト【スタビジ】の本記事では、自然言語処理についてPythonでの実装と合わせてまとめていきたいと思います。実際にテキスト情報を形態素解析で分解してテキスト類似度を計算したり、空欄を予測したりすることができるんです!...

Pythonでチャットボットを作ってみよう!

ではPythonでチャットボットを作っていきましょう。

ルールベースのあいさつチャットボット

ここではルールベースモデルで条件に当てはまったら定義した応答を返すチャットボットを作っていきます。

開発環境にはGoogle Colaboratoryを使っていきます。

まず必要なライブラリをインストールします。

!pip install janome

janome」はPythonで利用できるオープンソースの形態素解析ツールです。

テキストデータのトークン化や解析、単語の分類など、多くの自然言語処理タスクで利用されていて、日本語に対応しているのが特徴です。

では最初に応答のルールを作成していきます

from janome.tokenizer import Tokenizer

# Janomeのインスタンスを作成
tokenizer = Tokenizer()

# ユーザー入力の処理
def get_response(user_input):
    greetings=["こんにちは","おはよう","こんばんは"]
    #メッセージをトークンに分割
    tokens = tokenizer.tokenize(user_input)
    # トークンごとにルールをチェック
    for token in tokens:
      if token.surface in greetings:# 定義した挨拶用語が含まれる場合は同じ言葉を返すルール
        return token.surface
      elif token.part_of_speech.split(",")[1] == "固有名詞":# 固有名詞が含まれる場合はその固有名詞を質問するルール
        return f"{token.surface}はどういう意味ですか?" 
                
    return "わかりませんでした。もう一度お願いします。"

今回は簡単に形態素解析を活かしたルールにしました、形態素解析にはjanomeのtokenize関数を使っています。

文章を単語単位で分割し、単語ごとにルールと照らし合わせて、当てはまったら回答を返すというやり方です。

続いてチャットボットと会話をする部分を作成します。

# メインの対話ループ
while True:
    user_input = input("ユーザー: ")
    if user_input.lower() == "終了":
        print("チャットを終了します。")
        break

    response = get_response(user_input)
    print(f"ボット: {response}")

作ったチャットボットの結果を見ていきます。

chatbot

すこしかみ合わない所はありますが、チャットボットとやり取りが出来ていますね。

ルールの部分を追加・修正していくことで、自分の期待するチャットボットを構築することが出来ます。

Pythonで利用できる自然言語処理のオープンソースライブラリに「NLTK(Natural Language Toolkit)」もあります。

NLTKは主に英語対応ですが、自然言語の解析や処理を簡単に行えるように様々な機能やデータセット、学習済みのモデルを提供していてかなり便利なので参考にしてみて下さい。

ウマたん
ウマたん
ルールに応じた回答をするチャットボット!ルールの工夫次第で面白いものが作れそう!

AIとルールを組み合わせた”応援チャットボット”

次に機械学習を組み合わせてユーザーがネガティブな発言をしたら、応援してくれるチャットボットを作ってみます。

AIモデルを使って文章を判定し、判定結果をルールに基づいて応答するといった流れになります。

入力された文章から感情を予測することを”センチメント分析“と呼び、Pythonではtransformerライブラリで感情判定をすることが出来ます。

!pip install transformers
!pip install fugashi
!pip install unidic_lite

実際に作ったチャットボットはこちらになります。

from transformers import AutoModelForSequenceClassification, AutoTokenizer, pipeline
import random

# 事前学習済みモデルの読み込み
def load_sentiment_analysis_model(model_name):
  model = AutoModelForSequenceClassification.from_pretrained(model_name)
  tokenizer = AutoTokenizer.from_pretrained(model_name)
  sentiment_analysis_pipeline = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)
  return sentiment_analysis_pipeline

# 感情分析
def detect_negative_sentiment(text, sentiment_analysis_pipeline):
  result = sentiment_analysis_pipeline(text)
  sentiment = result[0]["label"]
  score = result[0]["score"]
  return sentiment , score

# 応答ルール
def comfort_bot(input_text, sent_analysis_model):
  sentiment, score = detect_negative_sentiment(input_text, sent_analysis_model)
  if sentiment == "negative":
    return random.choice(encouragement_messages)
  return "この調子で頑張りましょう!"

sentiment_analysis_model_name = "jarvisx17/japanese-sentiment-analysis"
sentiment_analysis_model = load_sentiment_analysis_model(sentiment_analysis_model_name)

encouragement_messages = [
    "よく頑張りました!",
    "辛い時期もありますが、きっと乗り越えられます!",
    "自分を信じてください!",
    "前向きな気持ちでいきましょう!"
]

# チャットボットの利用
while True:
    user_input = input("ユーザー: ")
    if user_input.lower() == "終了":
        print("チャットを終了します。")
        break

    response = comfort_bot(user_input, sentiment_analysis_model)
    print(f"ボット: {response}")

transformerライブラリで用意されている事前学習済みのモデルを使って感情分析を行いました。

入力された文章がネガティブと判定されたら、励ます言葉が返ってくるという仕組みになってます。

ネガティブな発言に対して励ましの言葉が返ってきてますね!

ウマたん
ウマたん
AIとルールベースを組み合わせるとより高度なチャットボットが作れそう!

今回使ったTransformerについては詳しく知りたい方は、以下の記事をチェックしてください。

Transformer
TransformerをAI進化の流れと共にわかりやすく解説!Attention層に至るまで当サイト【スタビジ】の本記事では、昨今のAIブームのベースとなっているTransformer(トランスフォーマー)について簡単に解説していきたいと思います!Transformerはディープラーニングの進化をブレークスルーさせた技術なんです...

AIベースモデルの雑談チャットボット

最後にユーザーの入力文に対してAIが自動で考えて回答してくれるチャットボットを作っていきましょう。

今回はOpenAIの”gpt3.5-turbo”を利用していきます。

!pip install --upgrade openai

OpenAIのAPIは各自で取得します、APIを呼び出すたびに数円程度かかるので注意してください。

from openai._client import OpenAI
client = OpenAI(
    api_key = "API Key",
)
# ChatGPTからレスポンスを取得する

def communicate(user_input):
    user_message = [{"role": "user", "content": user_input}]
    response = client.chat.completions.create(
      messages = user_message,
      model = "gpt-3.5-turbo",
      # 乱雑さ「temperature」を設定
      temperature =  0.8
    )

    bot_response = response.choices[0].message
    return bot_response.content

#レスポンスの表示
# メインの対話ループ
while True:
    user_input = input("ユーザー: ")
    if user_input.lower() == "終了":
        print("チャットを終了します。")
        break

    # ユーザーの入力をもとにチャットボットに質問
    bot_response = communicate(user_input)
    print(f"ボット: {bot_response}")

単純にGPTのモデルを呼び出して会話する仕組みになります。

chatbot

ルールを設定しなくてもユーザーの入力に対して回答が返ってきました。

ウマたん
ウマたん
APIを活用することでPythonでも雑談が出来るチャットボットが作れるんだね!

チャットボット Python まとめ

Pythonを使ったチャットボットの作り方を見ていきました。

チャットボットには大きく以下の2種類があります。

・ルールベースモデル
・AIベースモデル

今回試したようにPythonでは自然言語処理やディープラーニングのライブラリが多く用意されています。

ウマたん
ウマたん
それぞれの特徴を理解して、自分が作りたいチャットボットを作っていこう!

また、LINEといったメッセージアプリとチャットボットの実装を組み合わせることでより便利なサービスを作ることも出来ます。

以下の記事でLINEを使ったアプリの開発を紹介しているのでぜほ参考にしてみて下さい。

line
Python×LINEで実践!自動返信アプリを作ってみよう!当サイト【スタビジ】の本記事では、Pythonを使って、LINEにメッセージを送ったら返信してくれるアプリを作っていきます!この機能を応用することでいろんなサービスの開発が可能になるのでぜひマスターしましょう!...

本記事を通してLLMや自然言語処理をもっと勉強したいと思った方は、当メディアが運営する教育サービス「スタアカ(スタビジアカデミー)」の講座をチェックしてみてください。

AIデータサイエンス特化スクール「スタアカ」

スタアカトップ
【価格】ライトプラン:1280円/月
プレミアムプラン:149,800円
【オススメ度】
【サポート体制】
【受講形式】オンライン形式
【学習範囲】データサイエンスを網羅的に学ぶ
実践的なビジネスフレームワークを学ぶ
SQLとPythonを組み合わせて実データを使った様々なワークを行う
マーケティングの実行プラン策定
マーケティングとデータ分析の掛け合わせで集客マネタイズ

データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「スタアカ」!!

24時間以内の質問対応と現役データサイエンティストによる複数回のメンタリングを実施します!

カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください!

他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。

そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコースになっています!

Pythonが初めての人でも学べるようなカリキュラムしておりますので是非チェックしてみてください!

ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったり・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践してもらったりする盛りだくさんの内容になってます!

・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析
・世界最大手小売企業のウォルマートの実データを用いた需要予測
・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定
・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践して稼ぐ

スタビジアカデミーでデータサイエンスをさらに深く学ぼう!

スタアカサービスバナースタビジのコンテンツをさらに深堀りしたコンテンツが動画と一緒に学べるスクールです。

プレミアムプランでは私がマンツーマンで伴走させていただきます!ご受講お待ちしております!

スタビジアカデミーはこちら