車ユーザレビューの意味クラスタリングによる主要10問題点の抽出

自動車ユーザレビューの意味的クラスタリングと課題分析

自動車メーカーとディーラーは日々膨大なユーザレビューを受け取りますが、これらのデータを手動で解析するのは困難です。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()

タグ: NLP 自然言語処理 車ユーザレビュー分析 意味クラスタリング all-MiniLM-L6-v2

5月23日 09:33 投稿