SlideShare una empresa de Scribd logo
1 de 57
Descargar para leer sin conexión
Internship
at
Preferred Infrastructure

Sotaro Karasawa (sotarok)
Yet Another PHP Programmer
Agenda
• 目標
• 転置インデックス用ライブラリ libkorakuen
 –   中間発表までのおさらい
 –   新しいアプローチでの実装
 –   実装にあたってのポイント
 –   英語 Wikipedia のインデックス作成
 –   デモ
 –   libkorakuen のこれから
• インターンを終えて


                              Copyright © sotarok @ PFI.
目標
• 転置インデックス用のライブラリをつくる!
 – メモリに乗り切らないような大規模で使える
 – インデックスファイルを圧縮する
 – Sedue で使える




                     Copyright © sotarok @ PFI.
転置インデックス用ライブラリ
libkorakuen
中間発表までのアプローチ


   ⽂書            読み込み



                   libkorakuen
 Temporary
   Index
             On Memory
                             Encoder
               Index



   Index

                                 Copyright © sotarok @ PFI.
中間発表までのアプローチ


   ⽂書                           読み込み



                                    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.
中間発表までのアプローチ


   ⽂書            読み込み



                   libkorakuen
 Temporary
   Index
             On Memory
                             Encoder
               Index



   Index

                                 Copyright © sotarok @ PFI.
中間発表までのアプローチ


   ⽂書




 Temporary   書き出す         libkorakuen
   Index
                    On Memory
                                    Encoder
                      Index



   Index

                                        Copyright © sotarok @ PFI.
中間発表までのアプローチ


   ⽂書                   読み込み




 Temporary   書き出す         libkorakuen
   Index
                    On Memory
                                    Encoder
                      Index



   Index

                                        Copyright © sotarok @ PFI.
中間発表までのアプローチ


   ⽂書



                   libkorakuen
 Temporary
   Index
             On Memory
                             Encoder
               Index



   Index

                                 Copyright © sotarok @ PFI.
中間発表までのおさらい
• 中間発表時
  – ⼀応インデックスは作れた
  – 10万⽂書程度で実験もOK



ところが...




                    Copyright © sotarok @ PFI.
問題点
• ⼀時インデックスに,Tokyo Cabinet を使っていた




                          Copyright © sotarok @ PFI.
問題点
• ⼀時インデックスに,Tokyo Cabinet を使っていた


   Keyword   Index
  Keyword2   Index
     ...      ...




                          Copyright © sotarok @ PFI.
問題点
• ⼀時インデックスに,Tokyo Cabinet を使っていた


   Keyword   Index   Index2
  Keyword2   Index
     ...      ...




                              Copyright © sotarok @ PFI.
問題点
• ⼀時インデックスに,Tokyo Cabinet を使っていた


   Keyword   Index   Index2   Index3
  Keyword2   Index
     ...      ...




                                Copyright © sotarok @ PFI.
問題点
• ⼀時インデックスに,Tokyo Cabinet を使っていた


   Keyword   Index   Index2   Index3
  Keyword2   Index
     ...      ...


• メモリから⼀時インデックスに書き出すたびに
  Tokyo Cabinet上での「Append」が発⽣
• 巨大なデータを扱うと途中から⼊らなくなる

                                Copyright © sotarok @ PFI.
アプローチを考え直す


  英語のWikipediaすべてが目標




  英語のWikipediaを最低目標とし
   可能な限りスケールする設計
                        Copyright © sotarok @ PFI.
新しいアプローチ
•   MapReduce 的な考え⽅!
•   途中でインデックスを作成せずにすべて読み込む
•   それぞれのファイルをソートする
•   2つずつマージする
•   インデックスを作成する




                      Copyright © sotarok @ PFI.
読み込む
何も考えずにとりあえず読み込む
              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.
何も考えずにとりあえず読み込む
              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.
何も考えずにとりあえず読み込む
              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.
何も考えずにとりあえず読み込む
              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.
何も考えずにとりあえず読み込む
              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.
何も考えずにとりあえず読み込む
              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.
分割された⼀時ファイル

  ⽂書


              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.
ソートする
ソートする
                 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.
ソートする
                 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.
マージする
マージする

                     ソート済み    ソート済み          ソート済み
                    ⼀時ファイル   ⼀時ファイル   ...   ⼀時ファイル
 ⽂書                    1        2              n




      libkorakuen



  マージ済み
 ⼀時ファイル
    1
マージする

                     ソート済み    ソート済み          ソート済み
                    ⼀時ファイル   ⼀時ファイル   ...   ⼀時ファイル
 ⽂書                    3        4              n




      libkorakuen



  マージ済み              マージ済み
 ⼀時ファイル             ⼀時ファイル
    1                  2
マージする

                     ソート済み    ソート済み
                    ⼀時ファイル   ⼀時ファイル
 ⽂書                    n-1      n




      libkorakuen



  マージ済み              マージ済み          マージ済み
 ⼀時ファイル             ⼀時ファイル   ...   ⼀時ファイル
    1                  2              2/n
マージする

 ⽂書




libkorakuen



ひとつの大きな
  マージ済み
 ⼀時ファイル
インデックス作成
インデックス作成
              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 , ...), ...
インデックス作成
                    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 , ...), ...
インデックス作成
              インデックス!

 ⽂書




libkorakuen
ポイント
ポイント
• 簡潔で,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




                      Copyright © sotarok @ PFI.
これからの libkorakuen
これからの libkorakuen
• Sedue に
• テストケースかきまくる必要性
• ソート/マージ はスレッド使えば並列作業ができ
  るはず




                     Copyright © sotarok @ PFI.
インターンを終えて
成果として
• Tokyo Dystopia を使っていては作れない大きさの
  転置インデックスが作れるライブラリが作成でき
  た




                          Copyright © sotarok @ PFI.
やりたかったのにできなかった
• Sedue への組み込み
• PHP 関連のライブラリ
 – これは趣味でもできそうなので近いうち実装する




                     Copyright © sotarok @ PFI.
その他さまざまな思い
• 技術的なことに関して
 – アルゴリズムやデータ構造を考えてプログラムを
   組むこと
 – ライブラリを利用するか自分で実装するか
 – 実装の背景にある理論や研究
• 技術者として
 – 自分の知らない分野のことを勉強するのは楽しい
 – PHP とか怖くないという自信(何
• まとまらないので近⽇中にブログに書きます!


                     Copyright © sotarok @ PFI.
ありがとうございました
お世話になりました!

Más contenido relacionado

Más de Sotaro Karasawa

Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
 
第34回PHP勉強会発表資料 SimpleXML
第34回PHP勉強会発表資料 SimpleXML第34回PHP勉強会発表資料 SimpleXML
第34回PHP勉強会発表資料 SimpleXML
Sotaro Karasawa
 

Más de Sotaro Karasawa (16)

Ethna Updates
Ethna UpdatesEthna Updates
Ethna Updates
 
Openpear Project の紹介
Openpear Project の紹介Openpear Project の紹介
Openpear Project の紹介
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
 
PHP Source Code Search with PHP
PHP Source Code Search with PHPPHP Source Code Search with PHP
PHP Source Code Search with PHP
 
フレームワークxWordPress
フレームワークxWordPressフレームワークxWordPress
フレームワークxWordPress
 
Introduction of openpear
Introduction of openpearIntroduction of openpear
Introduction of openpear
 
超個人的宣伝と2008年PHPのまとめ
超個人的宣伝と2008年PHPのまとめ超個人的宣伝と2008年PHPのまとめ
超個人的宣伝と2008年PHPのまとめ
 
LT openpear@LL温泉
LT openpear@LL温泉LT openpear@LL温泉
LT openpear@LL温泉
 
PHP超入門@LL温泉
PHP超入門@LL温泉PHP超入門@LL温泉
PHP超入門@LL温泉
 
Mockingbirdの紹介LT@PHP勉強会
Mockingbirdの紹介LT@PHP勉強会Mockingbirdの紹介LT@PHP勉強会
Mockingbirdの紹介LT@PHP勉強会
 
Ethna的ActionとView@設計勉強会
Ethna的ActionとView@設計勉強会Ethna的ActionとView@設計勉強会
Ethna的ActionとView@設計勉強会
 
Mockingbirdイベントハンドリング@拡張機能勉強会
Mockingbirdイベントハンドリング@拡張機能勉強会Mockingbirdイベントハンドリング@拡張機能勉強会
Mockingbirdイベントハンドリング@拡張機能勉強会
 
Mockingbird@拡張機能勉強会
Mockingbird@拡張機能勉強会Mockingbird@拡張機能勉強会
Mockingbird@拡張機能勉強会
 
Mockingbirdの実装@拡張機能勉強会
Mockingbirdの実装@拡張機能勉強会Mockingbirdの実装@拡張機能勉強会
Mockingbirdの実装@拡張機能勉強会
 
Mockingbirdのタブバーの実装@拡張機能勉強会
Mockingbirdのタブバーの実装@拡張機能勉強会Mockingbirdのタブバーの実装@拡張機能勉強会
Mockingbirdのタブバーの実装@拡張機能勉強会
 
第34回PHP勉強会発表資料 SimpleXML
第34回PHP勉強会発表資料 SimpleXML第34回PHP勉強会発表資料 SimpleXML
第34回PHP勉強会発表資料 SimpleXML
 

Último

Último (11)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

Internship at PFI