SlideShare a Scribd company logo
1 of 57
Download to read offline
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.
ありがとうございました
お世話になりました!

More Related Content

More from 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
 

More from 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
 

Recently uploaded

2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
ssuserbefd24
 
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
atsushi061452
 

Recently uploaded (12)

5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
 
情報を表現するときのポイント
情報を表現するときのポイント情報を表現するときのポイント
情報を表現するときのポイント
 
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
 
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
 
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
 
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
 
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )
 
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
 
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 

Internship at PFI