こんにちは!スタビジ編集部です!
近年ChatGPTの登場によりチャットボットへの注目度が高くなっています。
今回はそんなチャットボットをPythonで作る方法を解説していきます!
ちなみに、Pythonで色んなチャットボットを作る方法を知りたい方は以下のUdemyコースで僕が講師として教えていますので参考にしてみてください!
【初心者向け】Pythonで感情分析AIや大規模言語モデル(LLM)を使った様々な種類のチャットボットを作ろう!
【時間】 | 3時間 |
---|---|
【レベル】 | 初級 |
Pythonで色々なチャットボットを作ってみたいならこれ!
目次
チャットボットとは
まずは「チャットボットとは?」について簡単に見ていきます。
チャットボットとはユーザーの言葉や文章に対して自動で応答してくれるコンピュータプログラムを指します。
最初はユーザーの文章をそのまま返答したり、特定の単語が当てはまったら用意したテンプレート文を出力する簡単なものでした。
自然言語処理技術や機械学習などのAI技術が発展したことにより、自然で人間らしい会話が出来るようになりました。
このようにチャットボットには大きく以下の2種類があります。
・ルールベースモデル
・AIベースモデル
それぞれの特徴について見ていきましょう。
ルールベースモデル
「ルールベースモデル」のチャットボットはあらかじめ設定されたルールやパターンに基づいて会話を行います。
ルールベースモデルはチャットボットの原型となるモデルで特徴は以下です。
・事前に設定されたルールに従って動作
・具体的なキーワードやフレーズに対してルールを設定することが多い
・開発が比較的簡単でルールに従った質問に対して正確な応答が出来る
・状況や文脈に応じた返答が難しくルール外の質問に対応できない
・新しい会話パターンに対応するためには、新しくルールを追加・更新する必要がある
想定された会話に対しては適切な回答が出来るため、利用者の質問に回答する”カスタマーサポート“や指示された行動をする”タスク指向型“のチャットボットによく利用されます。
AIベースモデル
「AIベースモデル」のチャットボットは機械学習やディープラーニングを用いて大量のテキストデータを学習し、自然言語処理技術によって、人間のような会話を行います。
AIベースモデルは以下の特徴があります。
・AI技術を使って、大量のテキストデータを学習⇒文脈や状況に応じて会話を行う
・事前にルールを設定しなくて幅広い質問や会話パターンに対応できる
・学習データを追加していくことで、回答の精度が向上し、より人間らしい会話が出来るようになる
・膨大な学習データと演算マシンが必要なため、開発や学習に時間がかかり、コストも大きい
文脈や状況に応じて柔軟に回答できるため”エンターテイメント型“のチャットボットや”AIアシスタント“など様々な分野で活用されています。
特にLLMの登場により”ChatGPT“のような高性能な会話が出来るボットも実現しています。
ルールに基づく処理と機械学習を組み合わせて、柔軟性と正確性を向上させているよ!
自然言語処理で出来ることについて、以下の記事で詳しく解説しています!
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}")
作ったチャットボットの結果を見ていきます。
すこしかみ合わない所はありますが、チャットボットとやり取りが出来ていますね。
ルールの部分を追加・修正していくことで、自分の期待するチャットボットを構築することが出来ます。
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ライブラリで用意されている事前学習済みのモデルを使って感情分析を行いました。
入力された文章がネガティブと判定されたら、励ます言葉が返ってくるという仕組みになってます。
ネガティブな発言に対して励ましの言葉が返ってきてますね!
今回使った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のモデルを呼び出して会話する仕組みになります。
ルールを設定しなくてもユーザーの入力に対して回答が返ってきました。
チャットボット Python まとめ
Pythonを使ったチャットボットの作り方を見ていきました。
チャットボットには大きく以下の2種類があります。
・ルールベースモデル
・AIベースモデル
今回試したようにPythonでは自然言語処理やディープラーニングのライブラリが多く用意されています。
今回お伝えした内容からもう少し踏み込んだ内容で、Pythonで色んなチャットボットを作る方法を知りたい方は以下のUdemyコースで僕が講師として教えていますので参考にしてみてください!
【初心者向け】Pythonで感情分析AIや大規模言語モデル(LLM)を使った様々な種類のチャットボットを作ろう!
【時間】 | 3時間 |
---|---|
【レベル】 | 初級 |
Pythonで色々なチャットボットを作ってみたいならこれ!
また、LINEといったメッセージアプリとチャットボットの実装を組み合わせることでより便利なサービスを作ることも出来ます。
以下の記事でLINEを使ったアプリの開発を紹介しているのでぜほ参考にしてみて下さい。
さらに、本記事を通してLLMや自然言語処理をもっと勉強したいと思った方は、当メディアが運営する教育サービス「スタアカ(スタビジアカデミー)」の講座をチェックしてみてください。
AIデータサイエンス特化スクール「スタアカ」
【価格】 | ライトプラン:1280円/月 プレミアムプラン:149,800円 |
---|---|
【オススメ度】 | |
【サポート体制】 | |
【受講形式】 | オンライン形式 |
【学習範囲】 | データサイエンスを網羅的に学ぶ 実践的なビジネスフレームワークを学ぶ SQLとPythonを組み合わせて実データを使った様々なワークを行う マーケティングの実行プラン策定 マーケティングとデータ分析の掛け合わせで集客マネタイズ |
データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「スタアカ」!!
24時間以内の質問対応と現役データサイエンティストによる複数回のメンタリングを実施します!
カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください!
他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。
そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコースになっています!
Pythonが初めての人でも学べるようなカリキュラムしておりますので是非チェックしてみてください!
ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったり・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践してもらったりする盛りだくさんの内容になってます!
・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析
・世界最大手小売企業のウォルマートの実データを用いた需要予測
・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定
・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践して稼ぐ