自動車ユーザレビューの意味的クラスタリングと課題分析
自動車メーカーとディーラーは日々膨大なユーザレビューを受け取りますが、これらのデータを手動で解析するのは困難です。all-MiniLM-L6-v2モデルを使用して、類似した意味を持つコメントをグループ化し、ユーザーの主な懸念点を効率的に抽出することができます。
all-MiniLM-L6-v2モデル概要
all-MiniLM-L6-v2はBERTアーキテクチャに基づく軽量モデルで、知識蒸留技術によりモデルサイズが大幅に縮小されています。このモデルは約22.7MBで、最大256トークンのテキスト長をサポートし、隠れ層次元は384です。
環境セットアップと構成
# all-MiniLM-L6-v2モデルの取得
docker pull all-minilm-l6-v2
# サービスの起動
docker run -d -p 9000:80 all-minilm-l6-v2
必要なPythonライブラリのインストール:
pip install requests numpy scikit-learn matplotlib pandas
データ処理フロー
コメントデータ収集と前処理
import re
import pandas as pd
def clean_text(text):
text = re.sub(r'[^\w\s]', '', text)
text = re.sub(r'\s+', ' ', text).strip()
return text
comments_df = pd.read_csv('auto_reviews.csv')
comments_df['cleaned_text'] = comments_df['raw_text'].apply(clean_text)
テキストベクトル生成
import requests
import numpy as np
def get_vector(txt, srv_url="http://localhost:9000/embed"):
payload = {
"text": txt,
"model": "mini_lm"
}
response = requests.post(srv_url, json=payload)
if response.status_code == 200:
return response.json()['vector']
else:
return [0] * 384
vectors = [get_vector(comment) for comment in comments_df['cleaned_text']]
embeddings = np.array(vectors)
意味クラスタリング分析
K-Meansアルゴリズム選択と適用
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt
inertia_vals = []
silhouette_scores = []
k_values = range(5, 20)
for k in k_values:
km = KMeans(n_clusters=k, random_state=42)
km.fit(embeddings)
inertia_vals.append(km.inertia_)
if k > 1:
score = silhouette_score(embeddings, km.labels_)
silhouette_scores.append(score)
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
plt.plot(k_values, inertia_vals, 'bo-')
plt.xlabel('クラスター数')
plt.ylabel('慣性')
plt.subplot(1, 2, 2)
plt.plot(range(6, 20), silhouette_scores, 'ro-')
plt.xlabel('クラスター数')
plt.ylabel('シルエットスコア')
plt.tight_layout()
plt.show()
クラスタリング結果の分析
optimal_k = 15
km = KMeans(n_clusters=optimal_k, random_state=42)
cluster_labels = km.fit_predict(embeddings)
comments_df['cluster'] = cluster_labels
cluster_counts = comments_df['cluster'].value_counts().sort_index()
print("各クラスターのコメント数:")
print(cluster_counts)
主要10課題の抽出
- 燃費に関する問題:実際の燃費が公称値を上回る。
- 変速機の不快感:低速走行時の換挡不順。
- 車内臭いの持続:新車特有の化学臭。
- 電子システム故障頻発:中控屏遅延やBluetooth接続不安定。
- サービス品質の低下:修理時間や部品供給の遅延。
- 騒音問題:高速運転時の風音やタイヤノイズ。
- 座席の快適性不足:腰痛や素材質の問題。
- メンテナンス費用の高さ:同クラス他ブランドと比較して割高。
- 車載システムの遅延:ナビ更新の複雑さや音声認識精度の低さ。
- 塗装品質の脆弱性:小さな傷でも底漆露出。
効果検証と可視化
t-SNEによるクラスタリングの可視化
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
tsne = TSNE(n_components=2, random_state=42)
embedded_2d = tsne.fit_transform(embeddings)
plt.figure(figsize=(12, 8))
scatter = plt.scatter(embedded_2d[:, 0], embedded_2d[:, 1],
c=cluster_labels, cmap='tab20', alpha=0.6)
plt.colorbar(scatter)
plt.title('自動車レビューのクラスタリング可視化')
plt.xlabel('t-SNE次元1')
plt.ylabel('t-SNE次元2')
plt.show()