Internship at PFI

3,024 views

Published on

インターンシップ最終成果報告会@PFI

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,024
On SlideShare
0
From Embeds
0
Number of Embeds
1,678
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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. ありがとうございました お世話になりました!

×