Upload
sotaro-karasawa
View
2.768
Download
0
Embed Size (px)
DESCRIPTION
インターンシップ最終成果報告会@PFI
Citation preview
Sotaro Karasawa (sotarok)Yet Another PHP Programmer
InternshipatPreferred Infrastructure
Copyright © sotarok @ PFI.
Agenda• 目標• 転置インデックス用ライブラリ libkorakuen
– 中間発表までのおさらい– 新しいアプローチでの実装– 実装にあたってのポイント– 英語Wikipedia のインデックス作成– デモ– libkorakuenのこれから
• インターンを終えて
Copyright © sotarok @ PFI.
目標• 転置インデックス用のライブラリをつくる!
– メモリに乗り切らないような大規模で使える– インデックスファイルを圧縮する– Sedueで使える
転置インデックス用ライブラリlibkorakuen
Copyright © sotarok @ PFI.
中間発表までのアプローチ
⽂書
libkorakuenTemporaryIndex On Memory
Index Encoder
Index
読み込み
Copyright © sotarok @ PFI.
中間発表までのアプローチ
⽂書
libkorakuenTemporaryIndex On Memory
Index Encoder
Index
読み込み
Keyword: Document (Pos, Pos, ...), Document (Pos , ...), ...Keyword: Document (Pos, Pos, ...), Document (Pos , ...), ...Keyword: Document (Pos, Pos, ...), Document (Pos , ...), ......
Copyright © sotarok @ PFI.
中間発表までのアプローチ
⽂書
libkorakuenTemporaryIndex On Memory
Index Encoder
Index
読み込み
Copyright © sotarok @ PFI.
中間発表までのアプローチ
⽂書
libkorakuenTemporaryIndex On Memory
Index Encoder
Index
書き出す
Copyright © sotarok @ PFI.
中間発表までのアプローチ
⽂書
libkorakuenTemporaryIndex On Memory
Index Encoder
Index
読み込み
書き出す
Copyright © sotarok @ PFI.
中間発表までのアプローチ
⽂書
libkorakuenTemporaryIndex On Memory
Index Encoder
Index
Copyright © sotarok @ PFI.
中間発表までのおさらい• 中間発表時
– ⼀応インデックスは作れた– 10万⽂書程度で実験もOK
ところが...
Copyright © sotarok @ PFI.
問題点• ⼀時インデックスに,Tokyo Cabinet を使っていた
Copyright © sotarok @ PFI.
問題点• ⼀時インデックスに,Tokyo Cabinet を使っていた
IndexKeyword2......
IndexKeyword
Copyright © sotarok @ PFI.
問題点• ⼀時インデックスに,Tokyo Cabinet を使っていた
...IndexIndex
Keyword2...
Index2Keyword
Copyright © sotarok @ PFI.
問題点• ⼀時インデックスに,Tokyo Cabinet を使っていた
Index2
...IndexIndex
Keyword2...
Index3Keyword
Copyright © sotarok @ PFI.
問題点• ⼀時インデックスに,Tokyo Cabinet を使っていた
• メモリから⼀時インデックスに書き出すたびにTokyo Cabinet上での「Append」が発⽣
• 巨大なデータを扱うと途中から⼊らなくなる
Index2
...IndexIndex
Keyword2...
Index3Keyword
Copyright © sotarok @ PFI.
アプローチを考え直す
英語のWikipediaすべてが目標
英語のWikipediaを最低目標とし可能な限りスケールする設計
Copyright © sotarok @ PFI.
新しいアプローチ• MapReduce的な考え⽅!• 途中でインデックスを作成せずにすべて読み込む• それぞれのファイルをソートする• 2つずつマージする• インデックスを作成する
読み込む
Copyright © sotarok @ PFI.
何も考えずにとりあえず読み込む
41210130248251221
011
036
posdoc idkeyword id
... ......
⽂書
libkorakuen
On Memory
Copyright © sotarok @ PFI.
何も考えずにとりあえず読み込む
41210130248251221
011
036
posdoc idkeyword id
... ......
⽂書
libkorakuen
On Memory
Copyright © sotarok @ PFI.
何も考えずにとりあえず読み込む
41210130248251221
011
036
posdoc idkeyword id
... ......
⽂書
libkorakuen
On Memory
Copyright © sotarok @ PFI.
何も考えずにとりあえず読み込む
41210130248251221
011
036
posdoc idkeyword id
... ......
⽂書
libkorakuen
On Memory
Copyright © sotarok @ PFI.
何も考えずにとりあえず読み込む
41210130248251221
011
036
posdoc idkeyword id
... ......
⽂書
libkorakuen
On Memory
Copyright © sotarok @ PFI.
何も考えずにとりあえず読み込む
41210130248251221
011
036
posdoc idkeyword id
... ......
⽂書
libkorakuen
On Memory
⼀時ファイル
Copyright © sotarok @ PFI.
分割された⼀時ファイル
4121013024825
1221
011
036
posdoc idkeyword id
... ......
⽂書
libkorakuen
⼀時ファイル
ソートする
Copyright © sotarok @ PFI.
ソートする
1221
4121013024825
011
036
posdoc idkeyword id
... ......
⽂書
On Memory
⼀時ファイル
libkorakuen
Copyright © sotarok @ PFI.
ソートする
12214121013024825
011
036
posdoc idkeyword id
... ......
⽂書
On Memory
⼀時ファイル
libkorakuen
ソート済み⼀時ファイル
マージする
マージする
⽂書
libkorakuen
ソート済み⼀時ファイル
1
ソート済み⼀時ファイル
2
ソート済み⼀時ファイル
n...
マージ済み⼀時ファイル
1
マージする
⽂書
libkorakuen
ソート済み⼀時ファイル
3
ソート済み⼀時ファイル
4
ソート済み⼀時ファイル
n...
マージ済み⼀時ファイル
2
マージ済み⼀時ファイル
1
マージする
⽂書
libkorakuen
ソート済み⼀時ファイル
n-1
ソート済み⼀時ファイル
n
...マージ済み
⼀時ファイル2
マージ済み⼀時ファイル
1
マージ済み⼀時ファイル
2/n
マージする
⽂書
libkorakuen
ひとつの大きなマージ済み
⼀時ファイル
インデックス作成
インデックス作成
⽂書
ひとつの大きなマージ済み
⼀時ファイル
Keyword Document (Pos, Pos, ...),Document (Pos , ...), ...Document (Pos , ...), ...Document (Pos , ...), ...
Keyword Document (Pos, Pos, ...),Document (Pos , ...), ...Document (Pos , ...), ...Document (Pos , ...), ...
Keyword Document (Pos, Pos, ...),Document (Pos , ...), ...Document (Pos , ...), ...Document (Pos , ...), ...
libkorakuen
インデックス作成
⽂書
ひとつの大きなマージ済み
⼀時ファイル
Keyword Document (Pos, Pos, ...),Document (Pos , ...), ...Document (Pos , ...), ...Document (Pos , ...), ...
Keyword Document (Pos, Pos, ...),Document (Pos , ...), ...Document (Pos , ...), ...Document (Pos , ...), ...
Keyword Document (Pos, Pos, ...),Document (Pos , ...), ...Document (Pos , ...), ...Document (Pos , ...), ...
libkorakuen
pos0
pos122
pos456
インデックス作成
⽂書
インデックス!
libkorakuen
ポイント
Copyright © sotarok @ PFI.
ポイント• 簡潔で,Sedueにも使いやすそうなAPI
– ⽂書数分だけ Addして– BuildIndexするだけ– Search で探す
Copyright © sotarok @ PFI.
Add• 単語の分割やポジションはライブラリの外で• ⽂書ID(外部で管理してるものでOK)
– 自動的に内部でIDを振りなおす• 単語とその出現場所のリスト(vector)
– 単語IDも⽣成
Copyright © sotarok @ PFI.
Search• 単語をわたす (結果を⼊れるvectorもわたす)• その単語の出現するドキュメントとポジションが得られる
Copyright © sotarok @ PFI.
圧縮• 中間発表からかわらず,Variable Byte Code
Copyright © sotarok @ PFI.
Variable Byte Code
3: 00000000 00000000 00000000 00000011
3: 10000011
Copyright © sotarok @ PFI.
Variable Byte Code
3: 00000000 00000000 00000000 00000011
3: 10000011
��������
����Byte��������������������?
����
��������
Copyright © sotarok @ PFI.
圧縮• ドキュメントIDのリスト• 昇順にソートされている• 前の⽂書との差分に変換• 差分とった整数をエンコード
Copyright © sotarok @ PFI.
英語インデックスの作成• 単語数:約 1500 万(たぶん)• ドキュメント:約 300万• 元⽂書: 8.9 GB
• 作成時間: 1:30:37.09• 作成後インデックス:6.1 GB
– ドキュメントIDを振りなおしているおかげでほとんどがものすごく⼩さい整数→圧縮率良
デモ
Copyright © sotarok @ PFI.
その他のポイント• テストケースかきました
– まだ GetKeywordID, GetDocIDしかない
Copyright © sotarok @ PFI.
その他のポイント2• ライブラリ検証用プログラム (デモしたやつ)
– ii_search– ii_check
これからの libkorakuen
Copyright © sotarok @ PFI.
これからの libkorakuen• Sedueに• テストケースかきまくる必要性• ソート/マージはスレッド使えば並列作業ができるはず
インターンを終えて
Copyright © sotarok @ PFI.
成果として• Tokyo Dystopia を使っていては作れない大きさの転置インデックスが作れるライブラリが作成できた
Copyright © sotarok @ PFI.
やりたかったのにできなかった• Sedueへの組み込み• PHP 関連のライブラリ
– これは趣味でもできそうなので近いうち実装する
Copyright © sotarok @ PFI.
その他さまざまな思い• 技術的なことに関して
– アルゴリズムやデータ構造を考えてプログラムを組むこと
– ライブラリを利用するか自分で実装するか– 実装の背景にある理論や研究
• 技術者として– 自分の知らない分野のことを勉強するのは楽しい– PHP とか怖くないという自信(何
• まとまらないので近⽇中にブログに書きます!
ありがとうございましたお世話になりました!