# 序章
GPT3.5-ターボやGPT4のような強力な言語モデルは、アプリ開発を革命的に変え、特定のドメインに特化したアプリケーションの急増をもたらしました。PandaGPTやGiftWarpのような顕著なアプリは、これらのモデルの能力を象徴しています。これらのアプリを際立たせるのは、特に優れたデータ処理能力です。たとえば、PandaGPTは数百のPDFドキュメントから情報をスムーズに取得します。これにより、PandaGPTは競争の激しいアプリ市場での成功を確立します。
持続可能性を確保するために、起業家はデータ処理のスケールアップを優先する必要があります。アプリが人気を博すにつれ、効率的なデータ処理が重要になります。堅牢なインフラストラクチャとスケーラブルなシステムは、増加するデータ負荷を管理するために不可欠です。ボトルネックに対処し、スムーズな拡張を計画することで、起業家はアプリの成長とユーザー満足度を高めます。
データ駆動型アプローチを採用することで、前例のない機会が生まれます。GPT3.5-ターボやGPT4のような言語モデルを活用することで、開発者は画期的な革新と卓越したユーザーエクスペリエンスの可能性を解き放ちます。これらのモデルの力を活用することで、アプリ開発は新たな高みに達します。未来はデータ駆動型ソリューションと先進的な言語モデルを活用した変革的な体験にあります。
# スタートからスケーラビリティを計画する
OpenAIのAPIを活用することで、わずかな製品データとGPTを用いて、容易にカスタマーサービス用のチャットボットを作成することができます。GPTを使用してプロンプトを分析することで、指定されたリスト内のアイテムを効率的に検索し、印象的な結果を得ることが可能です。例を挙げますと:
import os
import openai
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env file
openai.api_key = os.environ['OPENAI_API_KEY']
delimiter = "####"
system_message = f"""
Follow these steps to answer the customer queries.
The customer query will be delimited with four hashtags,
i.e. {delimiter}.
Step 1:{delimiter} First decide whether the user is
asking a question about a specific product or products.
Product cateogry doesn't count.
Step 2:{delimiter} If the user is asking about
specific products, identify whether
the products are in the following list.
All available products:
1. Product: TechPro Ultrabook
Category: Computers and Laptops
Brand: TechPro
Model Number: TP-UB100
Warranty: 1 year
Rating: 4.5
Features: 13.3-inch display, 8GB RAM, 256GB SSD, Intel Core i5 processor
Description: A sleek and lightweight ultrabook for everyday use.
Price: $799.99
2. Product: BlueWave Gaming Laptop
Category: Computers and Laptops
Brand: BlueWave
Model Number: BW-GL200
Warranty: 2 years
Rating: 4.7
Features: 15.6-inch display, 16GB RAM, 512GB SSD, NVIDIA GeForce RTX 3060
Description: A high-performance gaming laptop for an immersive experience.
Price: $1199.99
3. Product: PowerLite Convertible
Category: Computers and Laptops
Brand: PowerLite
Model Number: PL-CV300
Warranty: 1 year
Rating: 4.3
Features: 14-inch touchscreen, 8GB RAM, 256GB SSD, 360-degree hinge
Description: A versatile convertible laptop with a responsive touchscreen.
Price: $699.99
......
Step 3:{delimiter} If the message contains products
in the list above, list any assumptions that the
user is making in their
message e.g. that Laptop X is bigger than
Laptop Y, or that Laptop Z has a 2 year warranty.
Step 4:{delimiter}: If the user made any assumptions,
figure out whether the assumption is true based on your
product information.
Step 5:{delimiter}: First, politely correct the
customer's incorrect assumptions if applicable.
Only mention or reference products in the list of
5 available products, as these are the only 5
products that the store sells.
Answer the customer in a friendly tone.
Use the following format:
Step 1:{delimiter} <step 1 reasoning>
Step 2:{delimiter} <step 2 reasoning>
Step 3:{delimiter} <step 3 reasoning>
Step 4:{delimiter} <step 4 reasoning>
Response to user:{delimiter} <response to customer>
Make sure to include {delimiter} to separate every step.
"""
user_message = f"""
how much is the BlueWave Chromebook more expensive
than the TechPro Desktop"""
messages = [
{'role':'system',
'content': system_message},
{'role':'user',
'content': f"{delimiter}{user_message}{delimiter}"},
]
response = get_completion_from_messages(messages)
print(response)
もしスタートアップが多様なモダリティを取り入れ、大規模なデータセットを利用するカスタマーサービスチャットボットを開発することを目指すなら、そのニーズを満たすためにベクターデータベースが必要です。この段階でベクターデータベースを導入することは、効果的なデータの保存と取得に不可欠です。
この目標を達成するために、高次元データを扱うために特別に設計されたベクターデータベースを利用できます。これには、テキスト、画像、さらにはオーディオなど、カスタマーサービスデータのさまざまな側面を表すベクトルを保存し、インデックス化することが含まれます。
例えば、顧客がチャットボットに問い合わせをする際、システムは自然言語処理技術を用いてテキストをベクトル表現に変換することができます。このベクトル表現は、関連する回答をベクターデータベースで検索するために使用されます。さらに、チャットボットが画像やオーディオ入力を扱える場合、それらの入力もベクトル表現に変換され、データベースに保存されます。
ベクターデータベースはベクトルを効率的にインデックス化し、関連情報の迅速な取得を可能にします。最近傍検索のような高度な検索アルゴリズムを利用することで、チャットボットはユーザーのクエリとデータベース内の保存されたベクトル間の類似性指標に基づいて最適な回答を特定できます。
データセットが拡大するにつれて、ベクターデータベースは多様なモダリティのデータのスケーラビリティと効率的な保存を保証します。これにより、チャットボットはパフォーマンスを継続的に向上させ、顧客の問い合わせに対して正確で関連性の高い回答を提供することができます。
# スケーラビリティとコスト効率のバランス
スタートアップは、スケーラビリティを達成する一方でコスト効率も考慮する必要があります。データを構造化し、関連する特徴や属性を抽出することで、保存および処理の要件を削減し、コストを最小限に抑えることができます。多様なモダリティ機能を提供する既存のツールやフレームワークを利用することも、貴重な時間とリソースを節約することに役立ちます。これらのリソースは、最適化されたデータ構造やアルゴリズムを提供し、一からすべてを構築する必要を排除します。
データベースを選ぶ際には、MyScaleをコスト効率の良いソリューションとして検討することが重要です。MyScaleは密度が高くコスト効率の良いベクターデータベースであり、他のオプションに比べて低コストで高性能を提供します。データの構造化や前処理、既存のツールやフレームワークの活用、MyScaleのようなコスト効率の良いソリューションを検討することで、スタートアップはスケーラビリティとコスト効率のバランスを取ることができます。これらのアプローチは、パフォーマンスを最適化しつつ、利用可能なリソースを最大限に活用することで、スタートアップがコスト効率の良い方法で成長し、成功を収めることを可能にします。
# ケーススタディとベストプラクティス
ここでは、MyScaleを使用して多様なモダリティのカスタマーサービスチャットボットを迅速にスケールアップする方法について簡単に紹介します。この目的のために、我々はTaobao Live (opens new window)から派生した簡素化されたデータセットを使用しています。
# 必要条件のインストール
transformers
: CLIPモデルの実行tqdm
: 人間のための美しいプログレスバーclickhouse-connect
: MyScaleデータベースクライアント
python3 -m pip install transformers tqdm clickhouse-connect streamlit pandas lmdb torch
# データへの取り組み
まず、データセットの構造について見てみましょう。私たちはデータを2つのテーブルに分けています。
id | product_url | label |
---|---|---|
102946 | url_to_store_the image | Men's Long Sleeve Shirt |
データセットは、製品ID、製品画像、およびラベルの3つの列で構成されています。最初の列は各製品画像の一意の識別子として機能します。2列目には画像へのURLが含まれています。3列目は製品のラベルです。こちらが上述のproduct_url列の例です:
id | product_text | label |
---|---|---|
102946 | POOF C(1's)I MOCK NECK POCKET TEE | Men's Long Sleeve Shirt |
# MyScaleデータベーステーブルの作成
# データベースの操作
MyScaleでテーブルを作成するには、データベースバックエンドへの接続が必要です。Pythonクライアントに関する詳細なガイドはこのページ (opens new window)で確認できます。
SQL(Structured Query Language)に慣れていれば、MyScaleの操作はより簡単になります。MyScaleは構造化クエリとベクトル検索を組み合わせるため、ベクターデータベースの作成は従来のデータベースの作成とほぼ同じです。そして、ここではSQLで2つのベクターテーブルを作成する方法を示します:
CREATE TABLE IF NOT EXISTS TaoBaoData_image(
id String,
vector Array(Float32),
CONSTRAINT vec_len CHECK length(vector) = 512
) ENGINE = MergeTree ORDER BY id;
CREATE TABLE IF NOT EXISTS TaoBaoData_text(
id String,
vector Array(Float32),
CONSTRAINT vec_len CHECK length(vector) = 512
) ENGINE = MergeTree ORDER BY id;
# 特徴の抽出とデータベースの充填
CLIP (opens new window)は異なる形式(学術用語で「モーダル」と呼ばれる)のデータを統一された空間にマッチングする人気の方法であり、高性能なクロスモーダル検索を可能にします。このモデルは画像とテキストの両方をエンコードできます。以下に例を示します:
import torch
import clip
from PIL import Image
# CLIPモデルをロードする
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)
# 画像をロードして前処理する
image_path = "path_to_your_image.jpg"
image = Image.open(image_path).convert("RGB")
image_input = preprocess(image).unsqueeze(0).to(device)
# 画像をエンコードする
with torch.no_grad():
image_features = model.encode_image(image_input)
# テキストをエンコードする
text = "Your text here"
text_input = clip.tokenize([text]).to(device)
with torch.no_grad():
text_features = model.encode_text(text_input)
# 画像とテキストの特徴を出力する
print("Image features shape:", image_features.shape)
print("Text features shape:", text_features.shape)
# MyScaleにデータをアップロード
データが埋め込みに処理されたら、MyScaleにアップロードを行います。
# データセットからデータをアップロードする
client.insert("TaoBaoData_image",
data_image.to_records(index=False).tolist(),
column_names=data_image.columns.tolist())
client.insert("TaoBaoData_text",
data_text.to_records(index=False).tolist(),
column_names=data_text.columns.tolist())
# コサインを用いてベクターインデックスを作成する
client.command("""
ALTER TABLE TaoBaoData_image
ADD VECTOR INDEX image_feature_index feature
TYPE MSTG
('metric_type=Cosine')
""")
client.command("""
ALTER TABLE TaoBaoData_text
ADD VECTOR INDEX text_feature_index feature
TYPE MSTG
('metric_type=Cosine')
""")
# MyScaleで検索
ユーザーが質問を入力すると、その質問をベクターに変換してデータベースから検索を行います。この検索プロセスにより、トップKの商品画像とそれに対応する商品説明を取得します。次に、これらの商品説明をGPTモデルに渡して、推薦をさらに洗練させ、より詳細な商品紹介を提供します。また、最終的な会話結果には、商品画像のユーザーへの表示も含めます。
質問をエンコードする:
question = 'Do you have any black dress for women?'
emb_query = retriever.encode(question).tolist()
TaoBaoData_textデータセットを検索し、トップ2の商品情報を返す:
top_k = 2
results = client.query(f"""
SELECT id, product_text, distance(vector, {emb_query}) as dist
FROM TaoBaoData_text
ORDER BY dist LIMIT {top_k}
""")
summaries = {'id': [], 'product_text': []}
for res in results.named_results():
summaries['product_text'].append(res["product_text"])
summaries['id'].append(res["id"])
以下のようなdistが得られます:
{'id':['065906','104588'],
'product_text': ['Plus Size Womens Autumn New Arrival Elegant Temperament 2019 Concealing Belly Fashionable Mid-length Lace Dress.'
'2019 Summer New Arrival High-end Asymmetrical Shoulder Strap Chic Slimming Daily V-neck Dress for Women, Trendy.']}
その後、最初に述べたOpenAIのAPIを通じてこのリストをGPT4にプロンプトすることができます。例えば:
system_message = f"""
Based on the user's question, we have retrieved two items with the
following information. provide recommendations for these two items based on
the product text.
{summaries}
If the user requests to see the style, please return the corresponding
product IDs.
"""
商品IDがある場合、TaoBaoData_imageデータセットを検索して画像を取得することができます
results = client.query(f"""
SELECT id, product_url,
FROM TaoBaoData_image
WHERE id IN {summaries['id']}
""")
65906 | 104588 |
---|---|
これで、ユーザーにこの結果を返し、さらなる選択とやり取りを支援することができます。
同様のパイプラインは、画像検索にも使用できます。例えば、ユーザーが画像に示されているような衣類を見つけたい場合、画像の埋め込みを使って検索することができます。
# 結論
MyScaleは、マルチモーダルデータを効率的に扱うことができ、スタートアップにコスト効果的なソリューションを提供します。異なるモーダリティを統合し、リソース使用を最適化することで、MyScaleは顕著なコストをかけることなく顧客サービスの能力を向上させます。このアプローチにより、スタートアップはリソースを効率的に割り当て、ビジネスの重要な側面に集中することができます。スケーラビリティとコスト効率は、スタートアップの成功に不可欠であり、持続可能な成長を確保し、ROIを最大化することができます。マルチモーダルデータ処理におけるMyScaleの強みにより、スタートアップはコスト効果を維持しながら拡大することが可能です。MyScaleを採用することで、スタートアップはリソースを賢く管理し、競争の激しい市場で成功を収めることができます。