Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Internship at PFI

885 views

Published on

インターン最終成果発表会@PFI

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Internship at PFI

  1. 1. Internship at Preferred Infrastructure Sotaro Karasawa (sotarok) Yet Another PHP Programmer
  2. 2. Agenda • 目標 • 転置インデックス用ライブラリ libkorakuen – 中間発表までのおさらい – 新しいアプローチでの実装 – 実装にあたってのポイント – 英語 Wikipedia のインデックス作成 – デモ – libkorakuen のこれから • インターンを終えて Copyright © sotarok @ PFI.
  3. 3. 目標 • 転置インデックス用のライブラリをつくる! – メモリに乗り切らないような大規模で使える – インデックスファイルを圧縮する – Sedue で使える Copyright © sotarok @ PFI.
  4. 4. 転置インデックス用ライブラリ libkorakuen
  5. 5. 中間発表までのアプローチ ⽂書 読み込み libkorakuen Temporary Index On Memory Encoder Index Index Copyright © sotarok @ PFI.
  6. 6. 中間発表までのアプローチ ⽂書 読み込み libkorakuen Temporary Index On Memory Encoder Index Keyword: Document (Pos, Pos, ...), Document (Pos , ...), ... Keyword: Document (Pos, Pos, ...), Document (Pos , ...), ... Index Keyword: Document (Pos, Pos, ...), Document (Pos , ...), ... ... Copyright © sotarok @ PFI.
  7. 7. 中間発表までのアプローチ ⽂書 読み込み libkorakuen Temporary Index On Memory Encoder Index Index Copyright © sotarok @ PFI.
  8. 8. 中間発表までのアプローチ ⽂書 Temporary 書き出す libkorakuen Index On Memory Encoder Index Index Copyright © sotarok @ PFI.
  9. 9. 中間発表までのアプローチ ⽂書 読み込み Temporary 書き出す libkorakuen Index On Memory Encoder Index Index Copyright © sotarok @ PFI.
  10. 10. 中間発表までのアプローチ ⽂書 libkorakuen Temporary Index On Memory Encoder Index Index Copyright © sotarok @ PFI.
  11. 11. 中間発表までのおさらい • 中間発表時 – ⼀応インデックスは作れた – 10万⽂書程度で実験もOK ところが... Copyright © sotarok @ PFI.
  12. 12. 問題点 • ⼀時インデックスに,Tokyo Cabinet を使っていた Copyright © sotarok @ PFI.
  13. 13. 問題点 • ⼀時インデックスに,Tokyo Cabinet を使っていた Keyword Index Keyword2 Index ... ... Copyright © sotarok @ PFI.
  14. 14. 問題点 • ⼀時インデックスに,Tokyo Cabinet を使っていた Keyword Index Index2 Keyword2 Index ... ... Copyright © sotarok @ PFI.
  15. 15. 問題点 • ⼀時インデックスに,Tokyo Cabinet を使っていた Keyword Index Index2 Index3 Keyword2 Index ... ... Copyright © sotarok @ PFI.
  16. 16. 問題点 • ⼀時インデックスに,Tokyo Cabinet を使っていた Keyword Index Index2 Index3 Keyword2 Index ... ... • メモリから⼀時インデックスに書き出すたびに Tokyo Cabinet上での「Append」が発⽣ • 巨大なデータを扱うと途中から⼊らなくなる Copyright © sotarok @ PFI.
  17. 17. アプローチを考え直す 英語のWikipediaすべてが目標 英語のWikipediaを最低目標とし 可能な限りスケールする設計 Copyright © sotarok @ PFI.
  18. 18. 新しいアプローチ • MapReduce 的な考え⽅! • 途中でインデックスを作成せずにすべて読み込む • それぞれのファイルをソートする • 2つずつマージする • インデックスを作成する Copyright © sotarok @ PFI.
  19. 19. 読み込む
  20. 20. 何も考えずにとりあえず読み込む On Memory keyword id doc id pos ⽂書 1 1 0 2 1 4 3 1 10 libkorakuen 4 2 0 5 2 8 1 2 12 6 3 0 ... ... ... Copyright © sotarok @ PFI.
  21. 21. 何も考えずにとりあえず読み込む On Memory keyword id doc id pos ⽂書 1 1 0 2 1 4 3 1 10 libkorakuen 4 2 0 5 2 8 1 2 12 6 3 0 ... ... ... Copyright © sotarok @ PFI.
  22. 22. 何も考えずにとりあえず読み込む On Memory keyword id doc id pos ⽂書 1 1 0 2 1 4 3 1 10 libkorakuen 4 2 0 5 2 8 1 2 12 6 3 0 ... ... ... Copyright © sotarok @ PFI.
  23. 23. 何も考えずにとりあえず読み込む On Memory keyword id doc id pos ⽂書 1 1 0 2 1 4 3 1 10 libkorakuen 4 2 0 5 2 8 1 2 12 6 3 0 ... ... ... Copyright © sotarok @ PFI.
  24. 24. 何も考えずにとりあえず読み込む On Memory keyword id doc id pos ⽂書 1 1 0 2 1 4 3 1 10 libkorakuen 4 2 0 5 2 8 1 2 12 6 3 0 ... ... ... Copyright © sotarok @ PFI.
  25. 25. 何も考えずにとりあえず読み込む On Memory keyword id doc id pos ⽂書 1 1 0 2 1 4 3 1 10 libkorakuen 4 2 0 5 2 8 1 2 12 6 3 0 ⼀時ファイル ... ... ... Copyright © sotarok @ PFI.
  26. 26. 分割された⼀時ファイル ⽂書 keyword id doc id pos 1 1 0 libkorakuen 2 1 4 3 1 10 4 2 0 5 2 8 1 2 12 ⼀時ファイル 6 3 0 ... ... ... Copyright © sotarok @ PFI.
  27. 27. ソートする
  28. 28. ソートする On Memory keyword id doc id pos ⽂書 1 1 0 2 1 4 3 1 10 libkorakuen 4 2 0 5 2 8 1 2 12 ⼀時ファイル 6 3 0 ... ... ... Copyright © sotarok @ PFI.
  29. 29. ソートする On Memory keyword id doc id pos ⽂書 1 1 0 1 2 12 2 1 4 libkorakuen 3 1 10 4 2 0 5 2 8 ⼀時ファイル 6 3 0 ... ... ... ソート済み ⼀時ファイル Copyright © sotarok @ PFI.
  30. 30. マージする
  31. 31. マージする ソート済み ソート済み ソート済み ⼀時ファイル ⼀時ファイル ... ⼀時ファイル ⽂書 1 2 n libkorakuen マージ済み ⼀時ファイル 1
  32. 32. マージする ソート済み ソート済み ソート済み ⼀時ファイル ⼀時ファイル ... ⼀時ファイル ⽂書 3 4 n libkorakuen マージ済み マージ済み ⼀時ファイル ⼀時ファイル 1 2
  33. 33. マージする ソート済み ソート済み ⼀時ファイル ⼀時ファイル ⽂書 n-1 n libkorakuen マージ済み マージ済み マージ済み ⼀時ファイル ⼀時ファイル ... ⼀時ファイル 1 2 2/n
  34. 34. マージする ⽂書 libkorakuen ひとつの大きな マージ済み ⼀時ファイル
  35. 35. インデックス作成
  36. 36. インデックス作成 Keyword Document (Pos, Pos, ...), Document (Pos , ...), ... Document (Pos , ...), ... ⽂書 Document (Pos , ...), ... Keyword Document (Pos, Pos, ...), Document (Pos , ...), ... libkorakuen Document (Pos , ...), ... Document (Pos , ...), ... Keyword Document (Pos, Pos, ...), Document (Pos , ...), ... ひとつの大きな マージ済み Document (Pos , ...), ... ⼀時ファイル Document (Pos , ...), ...
  37. 37. インデックス作成 Keyword Document (Pos, Pos, ...), pos Document (Pos , ...), ... 0 Document (Pos , ...), ... ⽂書 Document (Pos , ...), ... Keyword Document (Pos, Pos, ...), pos Document (Pos , ...), ... libkorakuen 122 Document (Pos , ...), ... Document (Pos , ...), ... Keyword Document (Pos, Pos, ...), ひとつの大きな pos Document (Pos , ...), ... マージ済み 456 Document (Pos , ...), ... ⼀時ファイル Document (Pos , ...), ...
  38. 38. インデックス作成 インデックス! ⽂書 libkorakuen
  39. 39. ポイント
  40. 40. ポイント • 簡潔で,Sedue にも使いやすそうなAPI – ⽂書数分だけ Addして – BuildIndexするだけ – Search で探す Copyright © sotarok @ PFI.
  41. 41. Add • 単語の分割やポジションはライブラリの外で • ⽂書ID(外部で管理してるものでOK) – 自動的に内部でIDを振りなおす • 単語とその出現場所のリスト(vector) – 単語IDも⽣成 Copyright © sotarok @ PFI.
  42. 42. Search • 単語をわたす (結果を⼊れるvectorもわたす) • その単語の出現するドキュメントとポジションが 得られる Copyright © sotarok @ PFI.
  43. 43. 圧縮 • 中間発表からかわらず,Variable Byte Code Copyright © sotarok @ PFI.
  44. 44. Variable Byte Code 3: 00000000 00000000 00000000 00000011 3: 10000011 Copyright © sotarok @ PFI.
  45. 45. Variable Byte Code 3: 00000000 00000000 00000000 00000011 3: 10000011 Byte ? Copyright © sotarok @ PFI.
  46. 46. 圧縮 • ドキュメントIDのリスト • 昇順にソートされている • 前の⽂書との差分に変換 • 差分とった整数をエンコード Copyright © sotarok @ PFI.
  47. 47. 英語インデックスの作成 • 単語数: 約 1500 万(たぶん) • ドキュメント: 約 300万 • 元⽂書: 8.9 GB • 作成時間: 1:30:37.09 • 作成後インデックス:6.1 GB – ドキュメントIDを振りなおしているおかげでほとん どがものすごく⼩さい整数 → 圧縮率良 Copyright © sotarok @ PFI.
  48. 48. デモ
  49. 49. その他のポイント • テストケースかきました – まだ GetKeywordID, GetDocID しかない Copyright © sotarok @ PFI.
  50. 50. その他のポイント2 • ライブラリ検証用プログラム (デモしたやつ) – ii_search – ii_check Copyright © sotarok @ PFI.
  51. 51. これからの libkorakuen
  52. 52. これからの libkorakuen • Sedue に • テストケースかきまくる必要性 • ソート/マージ はスレッド使えば並列作業ができ るはず Copyright © sotarok @ PFI.
  53. 53. インターンを終えて
  54. 54. 成果として • Tokyo Dystopia を使っていては作れない大きさの 転置インデックスが作れるライブラリが作成でき た Copyright © sotarok @ PFI.
  55. 55. やりたかったのにできなかった • Sedue への組み込み • PHP 関連のライブラリ – これは趣味でもできそうなので近いうち実装する Copyright © sotarok @ PFI.
  56. 56. その他さまざまな思い • 技術的なことに関して – アルゴリズムやデータ構造を考えてプログラムを 組むこと – ライブラリを利用するか自分で実装するか – 実装の背景にある理論や研究 • 技術者として – 自分の知らない分野のことを勉強するのは楽しい – PHP とか怖くないという自信(何 • まとまらないので近⽇中にブログに書きます! Copyright © sotarok @ PFI.
  57. 57. ありがとうございました お世話になりました!

×