はじめに
前回の記事では、Dataikuを使用してECサイトのレビュー文をネガポジ分析し、商品の評価を可視化する方法について紹介しました。しかし、レビュー文はしばしば多面的で、単一の評価だけでは、どの側面がポジティブに評価され、どの側面がネガティブに評価されているのかが分かりにくいことがあります。
そこで、今回は分割したレビュー文にトピック(例えば、「味」、「機能」、「デザイン」などのカテゴリ)を当てはめ、トピックごとにネガポジ分析を行う方法を紹介します。このアプローチでは、トピックごとの評価を把握することができ、より商品に対する具体的な改善点や強みを見つけやすくなります。
前編「Dataikuでレビューデータのネガポジ分析をする」はこちら
目次
- はじめに
- Dataikuでネガポジ分析
- まとめ
- Dataiku導入を考えている方へ
目的
ECサイトで売られている「炊飯器」のレビュー文から、詳細なネガポジの評価を知る。
作業イメージ
ECサイトに投稿されたレビューは、 様々な視点でコメントされていることが多いです。単純に一つのレビューをまとめてネガポジ分析にかけても、どの視点からのコメントかがわかりません。そこで、レビュー文を分割し、分割した文章ごとにネガポジ分析を行うことにしています。
今回のフローではデータ整形はビジュアルレシピを利用し、ネガポジ分析やトピック分類はPythonレシピを主に使用しています。
Dataikuでネガポジ分析
全体図
前処理の内容は基礎編と同じ処理を行っています。
1. データ整形
まず最初に、ECサイトから収集したレビューデータを整形します。製品番号ごとに収集されたレビュー情報(ASIN、 タイトル、 内容、 レビュアー、 etc。)は、レビュー内容が空白であったり、重複データが存在することがあります。これらを適切に処理し、分析に使用できるデータを作成していきます。
1.1 Stackレシピ
今回利用するデータは製品番号ごとにファイルが作成されているため、ビジュアルレシピのStackレシピを用いてデータを一つのファイルにまとめます。すべてのファイルでは同じカラムを持っているため、スキーマの設定はデフォルトのまま結合を行います。
1.2 Prepareレシピ
データセット内のレビューには、未記入なデータが存在します。今回のネガポジ分析ではレビュー文を利用するので、レビュー文が記録されているカラム(”内容”)が空のデータを削除します。
処理を行いたいカラム(”内容”)を選択し、Remove rows with on valueで空のデータを削除するスクリプトを設定します。
左側のステップに目的のスクリプトを設定し、RUNで実行します。
1.3 Distinctレシピ
ECサイトでは、サイズや色などの異なる製品に対して同じレビューが表示されることがあります。この場合、同じレビューがネガポジの集計に影響を及ぼし特定の製品に対する評価が不正確になる可能性があるため、重複する部分を削除する必要があります。データの重複判断に使用するカラムは自由に選択できますが、今回はデフォルトで全てのカラムを使用します。
2. トピックごとのネガポジ分析
文章に対してトピックを当てはめるためには、レビュー内容からトピックの設定とそれに対応する単語の準備が必要です。今回はこの過程を半自動で実装してみました。
レビュー文の分割、トピックの抽出、トピック判定、トピック判定の集計の順で処理を行います。
2.1 文章を分割しネガポジ判定
レビュー文を句点(。)で分割し、分割後の文に対してネガポジ判定を行いました。 最後にトピックごとのネガポジをレビュー単位で集計するため、元々のレビュー文ごとにインデックス番号を振っています。
2.2 トピック抽出
文章からトピックを抽出する方法としてLDA(Latent Dirichlet Allocation)を利用しています。これにより、文章中の単語を指定したクラス数にまとめることができ、各クラスを何らかのトピックとしてとらえることができます。
トピックで利用する単語の品詞を”名詞”と”形容詞”のみにしています。
2.3 トピックの設定
各トピックに対してトピック名を設定します。グループごとの単語から特徴をとらえて、トピック名を「味」、「製品」、「機能」、「その他」としました。今回のtopicとtagは同じとしています。
2.4 トピック判定
抽出したトピックを利用して、分割した文に対してトピック判定を行います。
DataikuにはPluginと呼ばれる、特定の処理をパッケージ化した機能があります。
今回はその中でも”Text Analysis”のOntology taggingを利用してトピック判定を行います。先ほどのトピックデータ(Topic_prepared)をオントロジーデータとして利用し、Split_NPの”Text”に対して判定します。
出力結果ではtagごとにカラムが生成され、各topicが項目として入力されます。また、トピック判定された単語がkeywordとして記録されています。
3. ネガポジ評価の集計
Split_TopicのデータをPythonレシピで加工し、トピックごとのネガポジ結果をインデックス番号でまとめます。
処理のロジックとしては、分割した文章のネガポジ結果をレビュー文ごとに割り当てたIndexで集計します。ネガポジの結果を数値化し、トピックごとに合計を求めることで最終的なレビュー文に対するトピックごとのネガポジを算出しています。レビュー文内でトピックに対するネガポジがないものにはNeutralを置いています。
トピックごとのネガポジ結果を元のレビュー文に結合するために、JoinレシピでFull_Topicを元のレビュー文とインデックス番号を持つFull_NPと結合します。
これでレビュー文に対して、トピックごとのネガポジ判定ができました。
以上でFlowの編集が終わりになります。
4. 可視化
作成したデータセットからグラフを作成します。DatasetsのChartsからグラフの作成ができます。
今回はトピックの「機能」についてのネガポジ結果を製品番号(”ASIN”)ごとに出力してみました。
DataikuのDashboradを利用すると、複数のグラフを同時に確認することができ、フィルタを設定すると特定の項目のみ表示させることができます。
最終的にネガポジの割合を円グラフ、レビュー文内の頻出単語を表すドーナツグラフ、製品番号ごとのレビュー数、元のデータセットをDashboradに設置し、フィルタ機能を使うことで、特定の製品と比較製品を比べることができました。
まとめ
今回は、レビュー文を分割し、トピックごとにネガポジ分析を行う方法を紹介しました。この方法により、単一の評価だけでは得られない詳細なフィードバックを得ることができ、商品に対する具体的な改善点や強みを把握できます。
実際のネガポジ判定にはHugging Faceを利用しているため、精度面では問題なく活用できました。ただし、トピック抽出については精度が良いとは言えないため、他のモデルと組み合わせることで精度向上を目指していくことが必要となりそうです。
Dataiku導入を考えている方へ
KeywalkerはDataiku社のパートナーとしてDataikuの導入支援を行っています。データ分析による業務改善にご興味がある方はぜひ、Keywalkerにご連絡ください。
またDataikuのユースケースや操作感を知りたい方は、Dataiku体験会を開催しておりますので、そちらに興味がある方もご連絡ください。
Keywalker 問い合わせフォーム:https://www.keywalker.co.jp/inquiry.html