internship at pfi

Post on 21-May-2015

2.762 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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 とか怖くないという自信(何

• まとまらないので近⽇中にブログに書きます!

ありがとうございましたお世話になりました!

top related