レビューグラフ解析アルゴリズム評価用のTripAdvisorデータセットローダ


概要

スパムレビュア発見アルゴリズムの評価用データセットに加えて,
イリノイ大学で公開されている TripAdvisor データセットを読み込むパッケージを作成しました.

インストール

パッケージは PyPI に登録してあるので,次のコマンドでインストールできます.

$ pip install --upgrade rgmining-tripadvisor-dataset

なお,このインストール中に元データ配布先からファイルをダウンロードするので,
ある程度の時間を要します.(参考: pip install中に他所からデータファイルを取得する

グラフデータの読み込み

rgmining-tripadvisor-datasetにはtripadvosirモジュールが含まれており,load関数をエクスポートしています.
この関数はレビューグラフオブジェクトを受け取り, TripAdvisor データセットのレビューデータを追加します.

このグラフオブジェクトは,グラフインターフェイスを実装し次のメソッドを持っている必要があります.

  • new_reviewer(name): name という名前を持つレビュアーオブジェクトを作成して返す.
  • new_product(name): name という名前を持つ商品オブジェクトを作成して返す.
  • add_review(reviewer, product, rating, date): date に投稿された reviewer による product へのスコアが rating であるレビューを追加する.なお rating は 0 以上 1 以下に正規化されているものとする.

先日紹介した,Fraud Eagle, FRAUDAR は共にこのグラフインターフェイスを実装しているので,
TripAdvisor データセットを読み込むことができます.

Fraud Eagle で解析する場合(事前に pip install --upgrade rgmining-fraud-eagle が必要),

import fraud_eagle as feagle
import tripadvisor

graph = feagle.ReviewGraph(0.25) # パラメータは適当に決めた.
tripadvisor.load(graph)

print("Start iterations.")
max_iteration = 10000
for i in range(max_iteration):

   # Run one iteration.
   diff = graph.update()
   print("Iteration %d ends. (diff=%s)", i + 1, diff)

   # 最大修正量が 10^-5 ならば収束したと思う
   if diff < 10**-5:
       break

# レビュアーごとに特異度を出力.
for r in graph.reviewers:
    print(r.name, r.anomalous_score)

# 特異度を考慮したレビューサマリを出力.
for p in graph.products:
    print(p.name, p.summary)

FRAUDAR で解析する場合(事前に pip install --upgrade rgmining-fraudar が必要),

import fraudar
import tripadvisor

graph = fraudar.ReviewGraph(10) # パラメータは適当に決めた.
tripadvisor.load(graph)

graph.update()

# スパマーと判断されたレビュアーを出力.
for r in graph.reviewers:
    if r.anomalous_score == 1:
        print(r.name)

# スパマーを無視したレビューサマリを出力.
for p in graph.products:
    print(p.name, p.summary)

まとめ

レビューグラフのマイニングアルゴリズム評価用に,
イリノイ大学で公開されている TripAdvisor データセットを読み込むパッケージを作成しました.
グラフインターフェイスを実装しているグラフオブジェクトであれば,このパッケージを利用できるので,
我々が作成したアルゴリズム以外のアルゴリズムを実装評価する際にも利用できます.