社内データを学習させたAIチャットボットの開発
みなさん、こんにちは。私はEnlytの技術担当者です。
近年のAIチャットボットの躍進は目覚ましいものがあります。自然な対話、進化する学習能力、そして現実の問題解決における卓越性が一体となり、新たなフロンティアが開かれています。企業にとってこれは単なる技術革新だけでなく、カスタマーエクスペリエンスの向上や業務効率の向上に直結し、競争力の強化に繋がります。AIチャットボットはもはやオプションではなく、ビジネス戦略の不可欠な一翼となりつつあります。
この記事では、AIを使ってどのような事が実現できるかや仕組み、導入方法などについて解説していきます。
目次
AIチャットボットで出来ること
AIチャットボットは社内外の両面で驚くべき価値を提供しています。社内では、従業員への情報提供、トレーニング支援、社内FAQへの即座な回答など、従業員の効率を向上させます。一方で、顧客に対してはカスタマーサポートの向上、製品やサービスの案内、購買プロセスのサポートなど、パーソナライズされた対話を通じて顧客体験を向上させることが可能です。AIチャットボットは企業にとって内外双方で強力なツールとなり、未来のビジネス環境で競争力を高める重要な要素となります。
AIチャットボットの実現方法
AIチャットボットを開発する際の手法として、「エンベディング」と「ファインチューニング」があります。
エンベディングはAIチャットボットが言語を理解しやすくするための重要な手法です。このプロセスでは、言葉やフレーズを数値のベクトルに変換します。各単語は一意の数値に割り当てられ、文脈や意味の情報をベクトルとして表現します。これにより、ボットは言語の奥深いニュアンスや関連性を理解しやすくなり、自然な対話を可能にします。エンベディングの導入により、AIチャットボットはユーザーとのより意味のある対話を構築し、高度な言語理解能力を発揮します。
エンベディングがAIチャットボットの言語理解を向上させる重要な手法である一方で、ファインチューニングも同様に重要です。エンベディングが言葉を数値に変換し、ボットが意味を理解するのに役立つのに対し、ファインチューニングはボットを特定の任務やコンテキストに最適化するプロセスです。これにより、ボットは特定の業界やタスクにおいてより洗練された応答を提供し、ユーザーエクスペリエンスを向上させる役割を果たします。エンベディングとファインチューニングの組み合わせにより、AIチャットボットはますます柔軟かつ効果的な対話を実現しています。
本記事ではエンベディングを用いたAIチャットボットについて解説していきます。
エンベディングの概要
エンベディングは文章を数値のベクトルに変換する手法です。ベクトル化はOpen AIのAPIを用いて以下の様なコードで変換することが出来ます。
openai.Embedding.create(
model="text-embedding-ada-002",
input="ダミー株式会社の就業開始時刻は9時です。"
)
APIからは以下の様なレスポンスが返却されます。
{
"object": "list",
"data": [
{
"object": "embedding",
"index": 0,
"embedding": [
-0.020304366946220398,
-0.029119692742824554,
-0.0373261496424675,
-0.041985299438238144,
-0.04420898854732513
:
上記はレスポンスの一部で、embeddingの項目が文章をベクトル化した数値情報です。
AIチャットボットの仕組み
以下はエンベディングを用いたAIチャットボットの仕組みを図解したものです。
まず準備段階として、回答の情報源となるデータを収集してベクトル化しておきます。
情報源となるデータは社内規約であればPDF、WORDなど、インターネット上に公開されているデータを情報源とする場合はHTMLがその対象になります。
どの様な形式であっても情報源の文章を意味のある単位に分割してベクトル化する必要があります。
ベクトル化した情報源は自システムのデータベースやJSONファイルなどに格納しておきます。
ベクトル化して保存された情報源は、ユーザーからの質問を受け付けた際に類似度が高い情報源を抽出する処理で使用します。
類似度が高い情報源は以下の様なコードで抽出することが可能です。
# ベクトル化したデータの読み込み
with open('index.json') as f:
INDEX = json.load(f)
# 質問文章
input_query = 'ダミー株式会社の就業開始時刻と休憩時間は?'
# 質問文章をベクトル化
query = openai.Embedding.create(
model = 'text-embedding-ada-002',
input = input_query
)
query = query['data'][0]['embedding']
# 学習データと質問文章の類似度を計算
results = map(
lambda i: {
'body': i['body'],
# コサイン類似度を計算
'similarity': cosine_similarity(i['embedding'], query)
},
INDEX
)
# 類似度で降順にソート(先頭のほうが類似度が高い)
results = sorted(results, key=lambda i: i['similarity'], reverse=True)
# 結果を表示
print(f"質問: {input_query}")
print("順位: 類似度 :学習データ")
for i, result in enumerate(results):
#print(f'{i+1}: {result["title"]} {result["similarity"]}')
print(f'{i+1}: {result["similarity"]}: {result["body"]}')
上記のコードを実行すると、質問のベクトルと類似度が高い情報源が抽出されます。
質問: ダミー株式会社の就業開始時刻と休憩時間は?
順位: 類似度 :学習データ
1: 0.889143355385706: 始業時刻:9時30分、終業時刻:17時00分、休憩時間:120分間ただし、所定労働時間が勤務シフトによる者及びパートタイマーは、勤務表に定める始業・終業時刻および休憩時間に基づき勤務する。
2: 0.8756630567294748: 3始業・終業の時刻および休憩時間は、業務上の必要がある場合には、事前に通知した上で、これらを繰り上げ、または繰り下げることがある。
3: 0.8755480813191854: 6第3章勤務第1節労働時間・休日および休暇等第19条(所定労働時間および休憩時間)社員の所定労働時間については、1週間の労働時間は30時間以内、1日の労働時間は6時間とし、始業・終業時刻および休憩時間は、原則次の通りとする。
4: 0.8697614597886405: 就業規則ダミー株式会社第1章総則第1条(目的)本規則は、ダミー株式会社(以下「会社」という。
5: 0.8670471437211101: 2前項により取得した時間または休暇については無給とする。
6: 0.8658025029600631: 2前項の始業および終業の時刻とは、業務の開始(実作業の開始)時刻および業務の終了(実作業の終了)時刻をいう。
7: 0.8578492613096154: 2法定休日に勤務を命じる場合には、社員代表と締結し所轄労働基準監督署長に届け出た「時間外労働・休日労働に関する協定届」の範囲内で命ずるものとする。
ユーザーからの質問と類似度が高い情報源を組み合わせて以下の様なプロンプトを作成してOpenAIのAPIに回答をリクエストします。
ダミー株式会社の就業規則を基に質問文に対する回答文を生成してください。
###
ダミー株式会社の就業規則:
- 始業時刻:9時30分、終業時刻:17時00分、休憩時間:120分間ただし、所定労働時間が勤務シフトによる者及びパートタイマーは、勤務表に定める始業・終業時刻および休憩時間に基づき勤務する。
- 6第3章勤務第1節労働時間・休日および休暇等第19条(所定労働時間および休憩時間)社員の所定労働時間については、1週間の労働時間は30時間以内、1日の労働時間は6時間とし、始業・終業時刻および休憩時間は、原則次の通りとする。
- 3始業・終業の時刻および休憩時間は、業務上の必要がある場合には、事前に通知した上で、これらを繰り上げ、または繰り下げることがある。
###
質問文:
ダミー株式会社の勤務時間と休憩時間について教えてください。
APIからは以下の様なレスポンスがAPIから返却されます。
回答文:
ダミー株式会社の勤務時間は、始業時刻は9時30分、終業時刻は17時00分です。また、休憩時間は120分間です。
ただし、勤務シフトによる者やパートタイマーの方は、勤務表に定められた始業時刻・終業時刻・休憩時間に基づいて勤務します。
なお、業務上の必要がある場合には、事前に通知の上で、勤務時間や休憩時間の繰り上げや繰り下げが行われることがあります。
注意点
AIチャットボットの利用に際して、特にプライバシーとアップデートに関する注意が必要です。プライバシー面では、ボットが収集する情報やその利用目的を確認し、ユーザーのデータセキュリティを守りましょう。また、定期的なアップデートはセキュリティの向上や新機能の追加をもたらし、最新の技術を享受できます。利用者はこれらのポイントに留意し、安全かつ効果的にAIチャットボットを利用することが重要です。
まとめ
AIチャットボットは仕組みさえ理解できていれば、少量のソースコードでその機能を実現することが可能です。これはPythonのライブラリやOpen APIなどで機能を構成するための必要な要素がパッケージ化された状態で提供されていることに大きく起因しています。
特に今回ご紹介したエンベディングでは、ファインチューニングより手軽にAIからの回答を確認することができます。
AIチャットボットの進化は私たちの日常に革新をもたらしています。機械学習と自然言語処理の進歩により、AIチャットボットはますます自然で賢い対話が可能になり、ビジネスや個人のコミュニケーションにおいて重要な役割を果たしています。
将来的には、AIチャットボットは医療や教育、顧客サポートなど、さまざまな分野で更なる発展が期待されます。これにより、業務の自動化や効率向上が実現し、人間の仕事においてより創造的な側面が重要視されるようになるでしょう。
しかし、技術の進展と共に倫理的課題も浮かび上がります。プライバシー保護や人間らしさの尊重など、社会的な側面での懸念がクローズアップされます。そのため、技術者や法制度の整備が不可欠であり、バランスの取れた未来社会の構築が求められます。
総じて、AIチャットボットの未来は無限の可能性を秘めていますが、技術と社会の課題に対する適切なアプローチが求められ、私たちの生活にどのような変化をもたらすか、注視しながら、これからますます広がる可能性に期待していくと良いでしょう。
Enlytについて
株式会社Enlytはベトナムに開発拠点SupremeTechを持ち、これまで50以上の開発プロジェクトを行ってきました。ベトナムと日本のグローバルなチームで、数多くのプロジェクトを成功に導いてきました。
お客様の納得のいくまで、共に開発させていただき、アイデアを最高のかたちにサービス化いたします。オフショア開発についてのお悩みやご相談がございましたら、下記ボタンより気軽にお問合せください!