SuikaWiki4

SuikaWiki4

[1] SuikaWiki4 は、 SuikaWiki の4つ目のメジャー・バージョンでした。

シェリング

/i/$id;terms → ちゃんと実装したので消した

文書の tfidf データ & 転置索引データを更新する

要・ID ロック (文書 XML キャッシュデータ作成のため)

要・ID ロック (文書 tfidf データ更新のため)

要・転置索引ロック

ちょっと遅い

/i/$id;related-$id2, /i/$id;unrelated-$id2

$id と $id2 は関係がある、またはないと学習させる

要・語重みロック (語重みベクトル更新のため)

/g/$nid

/g/id$id

要・ID ロック (グラフノード対応情報取得のため)

要・グラフロック (グラフノード追加のため)

/n/$names;search → 本実装完了

$names を含む文書を表示する

目標

  • 各 Wiki page (ID ベース) に関連 Wiki page (ID ベース) のリンクを出す
  • 各 Wiki page (名前ベース) に含む Wiki page (名前ベース) のリンクを出す

表示 (ID ベース)

  • Wiki page ID からノード ID を引く
  • ノード ID から隣接ノード ID を引く
  • 隣接ノード ID から Wiki page ID を引く

表示 (名前ベース) → 実装済み

  • Wiki page 名から転置索引を開く
  • 転置索引から Wiki page ID を得る

新規追加

  • Wiki page ID に対応するノード ID を決定する (要・グラフロック)
    • 空きノードがあれば、その ID にする
    • 空きノードがなければ、グラフにノードを追加し、そのうちの1つの ID にする
  • Wiki page 内容から文書 tfidf データを作成する (要・ID ロック) → 実装済み
  • tfidf 転置索引を更新する (要・転置索引ロック) → 実装済み

(最後の2ステップは少し遅い)

文書更新

  • Wiki page 内容から文書 tfidf データを更新する (要・ID ロック) → 実装済み
  • tfidf 転置索引を更新する (要・転置索引ロック) → 実装済み

(少し遅い)

シェリング更新

  • ある Wiki page ID について
  • Wiki page ID に対応するノード ID を決定する
    • ノード ID がなければ停止する
  • ノードの満足値を決定する
    • 2ノード間の満足・不満足判定を行い、満足率を求める
  • 満足値が閾値を下回らない場合、停止する
  • ノード移動を行う (要・グラフロック、要・ID ロック)
    • 隣接ノード幅優先探索、最大 20 ノードくらい?、見つからなければ停止する
    • ID・ノード関連付け情報を更新する

満足判定学習

  • ある 2 Wiki page IDs について、
  • tfidf データを読み込み、学習を行い、
  • 語重みベクトルを更新する (要・語重みロック)

tfidf データベース → 本実装済み

$db->id_tfidf isa SWE::DB::IDText

CVS: なし

キーは文書 ID、値は SWE::Data::FeatureVector を直列化した文字列。

転置索引データベース → 本実装済み

$db->name_inverted_index isa SWE::DB::HashedIndex

CVS: なし

キーは語、値は文書 ID と文書の TF・IDF 値のハッシュ。

メモ

[2] sw sw4 ids 12956 + sw3 14175

  1. 27131