大規模データ処理に対する アルゴリズム理論からのアプローチ 宇野 毅明 (国立情報学研究所 &総合研究大学院大学) 2007年4月23日 第20回 回路とシステム軽井沢ワークショップ データ中心科学の発達 データ中心の科学 ・ 近年、IT技術の発達で、大規模なデータが半自動的に収集で きるようになった (POS、web、文書、顧客データ、財務、利用者、人事…) 既存のデータを使って何かを得たい データの選別 モデル化 データ処理 いわば、データを出発点とした問題解決の科学 (人工知能、データマイニング、自然言語処理、セマンティックweb… 近年の情報学でもメジャーな研究スタイル) データ中心科学の特徴 ・ データが整形されていない 目的がはっきりしない、あるいは異なる目的のために集められたデータを用いるため、 必要なものがすぐ取り出せるとは限らない。また、ノイズや不正確な情報も含まれうる。 ・ 目的関数があいまい データが情報の塊のようなものなので、そこから得られるものはやはり情報であること が多い(知識、特徴分析といったもの)。それら情報の価値は数理的な尺度では計りにく い。また、従来の最適化とは異なる尺度を用いることが多い。(グラフクラス、シークエ ンス、情報量、隣接性、類似度、頻出度・・・) ・ データが巨大で、構造を持つ 半自動で集められたデータであるので、データは通常、巨大である。しかし各 項目が持つ属性は少なく、疎である。 ・ データ処理は比較的簡単なものが多い データ処理の計算は、最適化のような複雑ではなく、 組合せの検索や整形などいくつかの簡単な処理の組合せ データ処理の変化 ▪ 不ぞろいなデータから有用な情報を得るには複雑で豊かなモデ ルを解く必要がある ▪ そのためには、解く問題を複雑にする必要がある ▪ 比較・統計量 全対比較・組合せ的な統計量 ▪ キーワード検索 パターンマイニング ▪ 完全一致 類似検索 データベース ▪ 最適化 列挙 ・ このように処理が変化すると、既存のアルゴリズムを用いて行っ た場合に、非常に時間がかかることがある 例) 全対比較を通常の検索を用いて行うと、レコード数だけのクエ リを必要とする 複雑かつ大量の計算を効率良く行う手法の開発が重要 アルゴリズム理論の利点 ・ 大規模な計算には、アルゴリズム理論に基づいた技術が有効 アルゴリズム理論による高速化は、問題の大きさに対する計算 時間の増加を抑える 計算の結果は変化しない 100項目 100万項目 2-3倍 10000倍 データが巨大になるほど、アルゴリズム改良の加速率は上がる 今、巨大データにできること ・ データベースの構築(データ構造) ・ キーワード検索 ・ ソート、整列 ・ フィルタリング ・ 統計量の計算 ・ 圧縮 ・ 最短路検索 ... 1次的な処理が多い。組合せ的な構造を処理するものは少ない より高度な解析のため、より複雑な基礎処理アルゴリズムが必要 類似文字列の列挙 データベースから類似する項目を見つける ・ データベースの項目の中で、似た項目のペアを全て見つけたい (項目のペア全てについて、 2項関係が成り立つかを調べる) ・ 類似している項目の検出は、 データベース解析の基礎的な手法 基礎的なツールがあれば、使い方しだいで いろいろなことができる (大域的な類似性、データの局所的な関連の構造・・・) 類似項目発見の計算時間 ・ 似たもののペアを全て見つけるさい、項目のペア全てについて、 単純に全対比較を行うと項目数の2乗の時間がかかる 項目数が100万を越えるころか現実的には解けなくなる 100万×100万 ÷100万(演算per秒) = 100万秒 ・ 類似検索を使う手もあるが、100万回のクエリを実行しなければ ならない。類似検索は完全一致より大幅に時間がかかる 1秒間にクエリが1000回できるとして、1000秒 問題が大きいので、平均的な意味でよいので、 計算オーダーの小さいアルゴリズムがほしい 応用1:似ているwebページの発見 ・ web 検索を行うと、よく似た内容、あるいは引用しているものを 多量に見つけることがある ニュース記事、レビューの記事の一部など ・ あらかじめ、類似しているページをグループのように検出でき れば、こういった似たものをひとくくりにでき、検索エンジンの効率 化にもつながる (検索結果を出してから似たものを見つける、という方法もあり) ・ さらに、例えば、最近のホットな話題は何ですか、 というような検索もできるかもしれない 応用2:リンクが似ているwebページ ・ リンク先、あるいはリンク元が、集合として似ているページは、 よく似ていると考えられる サッカーのページ、料理のページ、地域のページ ・ グループ化すれば、コミュニティー発見、著名なトピック、web の構造の解析など、いろいろなことがやりやすくなる ・ さらに、例えば、「スパムサイト」の検出にも使えるかも (レポート課題のコピーの検出、とか) 応用3:長い文章の比較 ・ (文庫本のような)長い文章がいくつかあるときに、類似する部 分がどことどこにあるかを検出したい 長い文章の比較はそれ自体が大変(時間がかかる)ので、 複数あると手が出ない ・ 長い文章を、短い文字列にスライスし、全体を比較する 大域的に似た部分は、局所的に似ている ところを多く含むと思われる つまり、似ている短い文字列のペアを多く含む ・ 短い文字列の全対比較からアプローチできる 応用4: ゲノムの比較 ・ 異なる種のゲノムを比較して、類似するところを見つけ出したい - 2つの染色体の比較(1億文字以上) - 複数の、短い染色体の比較(バクテリアなど:400万程度) - 両方とも、ゲノムをスライスして全対比較する ATGCCGCG GCGTGTAC GCCTCTAT TGCGTTTC TGTAATGA ... ・ ATGCCGCG と AAGCCGCC ・ GCCTCTAT と GCTTCTAA ・ TGTAATGA と GGTAATGG ... 応用5: 特異的な部分を見つける ・ 似ているものがない項目は、データの中で特異的な部分と考え られる - 携帯電話・クレジットカードの不正使用 - 制御システムの故障・異常の発見 - 実験データから新しいものを発見 - マーカーの設計 (「宇野毅明のホームページは、”助教授, 宇野毅明の研究”で検索するとユニークに定まる) ・ 比較的大きなデータが複数あるような場合でも、特異な項目を 多く含むもの、他のどのデータとも、似ている部分が少ないもの は、特異なデータだと考えられる ・ 「似ている項目の数」は、データがエラーを含む際の統計量とし て使えるかも知れない 応用5+: マイクロアレイのデザイン ・ マイクロアレイは調べたいDNAに、ある特定の短い文字列(20 文字程度)が含まれているかどうかを検出する実験装置(いっぺ んにたくさん実験できる) ・ 特定の遺伝子(あるいは変化)が含まれているか、たくさんの微 生物が含まれているコロニーの中に、特定の生物種がいるか、と いったことを調べる際に使われる ・ 短い文字列が、他の場所にも含まれていると、検出が効率良く できない 固有の短い文字列があらかじめわかっているとうれしい 問題設定:短い文字列の比較 ・ 具体的に見るため、扱うデータベースと問題を具体化する 問題: 各項目が同じ長さ l の短い文字列(50文字程度)である データベースを入力したときに、文字列のペアで異なり数が d 文 字以下である組を全て見つけよ (ハミング距離がd 以下) ・ 長くて、ある程度似ている文字列は、このような似ている部分 列をある一定数以上含む ATGCCGCG GCGTGTAC GCCTCTAT TGCGTTTC TGTAATGA ... ・ ATGCCGCG と AAGCCGCC ・ GCCTCTAT と GCTTCTAA ・ TGTAATGA と GGTAATGG ... 問題の難しさ ・ 全ての項目が同じだと、およそ(項目数2) 個の出力がある l を定数だと思えば、単純な全対比較のアルゴリズムが 計算量の意味では最適になる 計算量理論的には面白くない問題 ・ 現実には、やたらと似てるものがあるものを比較しても意味が無い 出力は少ないと仮定する ATGCCGCG GCGTGTAC GCCTCTAT TGCGTTTC TGTAATGA ... ・ ATGCCGCG と AAGCCGCC ・ GCCTCTAT と GCTTCTAA ・ TGTAATGA と GGTAATGG ... 基本のアイディア:文字列の分割 ・ 各文字列を、k(>d) 個のブロックに分割する ・ k-d 個のブロックの場所を指定したときに、そこがまったく等しく て、かつハミング距離がd 以下となるようなペアを全て見つけよ、 という部分問題を考える 各文字列の k-d 個のブロックをつなげてキーにし、ソートをす る。同じものはグループになる。それを総当りで比較すればよい ・ k-d 個のグループ数が大きければ、平均的にグループのメン バー数は小さくなるので、総当りで比較してもたいしたことない 全ての場合を尽くす ・ 先の部分問題を、全ての場所の組合せについて解く 2つの文字列が似てれば、必ずどこか k-d 個のブロックが同じ 必ずどれかの組合せで見つかる ・ 部分問題は、バケツソートやRadixソートで速く解ける ・ 組合せの数は kCd 。のk=5 で d=2 なら10通り ソート10回 +α で解ける。全対比較よりもかなり高速 ・各文字の数から、1文字比較した場合に等しくなる確率を求め、 適切な分割数 k を使用する 例題 ・ ABC、ABD、ACC、EFG、FFG、AFG、GAB のペアでハミ ング距離が1以下のものを求めよ A A A E F A G B B C F F F A C D C G G G B G A A A E F A A B B C F F F B C D C G G G A A A A E F G B C B F F F A C C D G G G B A A A A E F G B B C F F F A C D C G G G B 重複の回避 ・ まったく同じ文字列があると、全てのブロックの組合せで見 つかるので、 kCd 。回出力される 重複を回避する必要がある ・ 各見つかったペアについて、選択されていないブロックが選 択したブロックの間にあったら出力しないようにする 等しいブロックが一番左端によっている場合にのみ出力 メモリに解を保持せずとも、重複が回避できる イメージ的には ・ 似ているもののペアを探す問題は、マトリクスのセルの中で必 要なものを全て見つける問題 ・ 全対比較は、マトリクスのセルをすべて見ていることに対応 ・ 分類によるアルゴリズムは、 分類を順々にしていると思えば、 木構造の探索を行っていることに対応 実験:長さ20文字で異なり数 d を変化 10000 1000 d=0 d=1 d=2 d=3 10 20 00 70 00 22 95 3 0.1 70 0 1 20 0 計算時間(秒) 100 長さ(1000文字) ゲノムの比較 染色体と染色体を比較する - 1億以上の文字列の比較になるので、非常に時間がかかる - アラインメントでは部分が入れ替わった構造が見つけられない ・ 比較するゲノムを、オーバーラップするようにスライスし、全対比較 ・ 縦横に比較するゲノムをおき マトリクスを作って類似するペアが あるセルの色を白くする (実際は細長い四角でいい) 類似する構造が見える ゲノムの比較 (1) ヒト21番染色体とチンパンジー22番染色体の比較 ・長さ3000万の配列×2 から、30文字の切片を3000万個取る ・ 似ている部分配列のペアの数に応じて、各ドットの明るさを変える ヒト 21番染色体 ・ 白い部分が 「似ている可能性のある部分」 チ ン ・ 黒い部分が パ 「(絶対に)似ていない部分」 ン ジ ・ 格子模様は、繰り返し 配列を拾っている PCで 1時間で可能 ー 22 番 染 色 体 ゲノムの比較 (2) ヒトX染色体とマウスX染色体の比較 ・ 30文字で間違い2文 字以下のペアを列挙 ・ 長さ3000、幅300 の領域に3つペア があれば点を打つ PCで 1時間で可能 X ・ ノイズをかなり 除去できている マ ウ ス 染 色 体 ヒトX番染色体 ゲノムの比較 (3) バクテリアを30種 ABC順の取得し つなげて比較 PCで 1時間で可能 (マイクロアレイ用の)固有な配列のデザイン ・ マイクロアレイの設計には、ゲノム配列中でなるべく他の部分と 似ていない配列が使えるとありがたい ・ 配列の長さは20文字、のように決まっているので、 対象となるゲノムの全て20文字の部分配列を比較し、 似ているものがないもの、を見つければよい ・ 似ている文字列の数、はある種の統計量として利用できるかも しれない 100Mベース、25文字、間違い2文字まで、くらいなら PCで 1時間で可能 ゲノムの読み取り ・ ゲノム配列は、そのままひも状のものを一度に読むことはできない。 通常、一度に500文字程度しか読めない。 ・ そこで、染色体を10万文字程度の長さにぶつ切りにし、大腸菌に移 植して増殖させる ・ 増殖したものをさらにぶつ切りにし、500文字程度ずつ読み、つなげ る(できたものをBAC配列と言う) ・ BAC配列をさらにつなげて、もとの染色体を作る 重なり部分の検出 ・ 短い配列を読んだとき、あるいはBAC配列を作ったとき、それがもとの 染色体、BAC配列のどの位置にあったかはわからない 配列を構成する際に使える情報は「どことどこが重なるか」 ・ 機械の読み取りエラーや大腸菌が増殖する際のコピーミスも起こりうる ので、「完全に重なる」ではなく「だいたい重なる」でなければいけない ・ BAC1つ作るのに、100-1000万文字の比較が必要 BAC配列の比較 ・ ゲノム全体の配列を決める際には、BAC同士がどのようにつ ながるかを調べる必要がある ・ しかし、どの配列とどの配列がオーバーラップしているか調べ るのは、大変。(前述のアセンブリをミスしていると、微妙に異な るところが出て、重ならなくなる) ・ 既存の手法は、直接的でない 手段を使って比較をしていて、 ときどきオーバーラップしそうな ところを落としてしまう ・ この手法なら全対比較可能 PCで 1ペア1秒 課題点 ・ マウス13番染色体の未解読領域に対して、この相同検索アルゴリズ ムの適用を行っている 既にいくつかの空白部分が埋まった ・ 比較は高速にできるようになった。しかし、比較した結果をどう使うか、 どのような点に留意する必要があるか、といった点は、まだまだ明らか でない - 実験の指針を出すためには、 何を出力する必要があるか - どの程度の精度が必要か - どこまで処理を自動化すべきか - エラーをどのように扱うべきか 既存のアセンブリングソフトでは 見つからない、特殊な重なり方を している相同領域が見つかる。 どう解釈すべきか? 類似部分(アイテム)集合の列挙 問題の定義 入力: 部分集合族(トランザクションデータベース) D = {T1,…,Tn} ( ただし、各 Ti はアイテム集合 E = {1,…,n} の部分集合) + 閾値 θ 出力: |Ti∩Tj| がθより大きいような、 全てのTi 、Tjのペア 例: 閾値 θ=2 のとき、 (A,B), (A,C), (A,D), (A,E) (C,D), (C,E), (D,E) D = A: 1,2,5,6,7 B: 2,3,4,5 C: 1,2,7,8,9 D: 1,7,9 E: 2,7,9 F: 2 D が巨大かつ疎で(各Ti が平均的に小さい)、出力の数がそれ ほど多くない( ||D|| の数倍)状況での高速化を考える 単純に全対比較すると ・ 単純に全対比較するアルゴリズムを考える D = for i=1 to |D|-1 for j=i to |D| if |Ti∩Tj|≧ θ then output (Ti, Tj ) A: 1,2,5,6,7 B: 2,3,4,5 C: 1,2,7,8,9 D: 1,7,9 E: 2,7,9 F: 2 ・ 共通部分の計算は、各 Ti をアイテム順でソートしておき、Ti 、Tj をマージソートのように並行してスキャンすればよい。 時間はO(|Ti |+| Tj|) ・ 全体の計算時間は ∑i,j(|Ti |+| Tj|) = 2n ||D|| かなり時間がかかると見てよい 振り分けによる高速化 ・各Ti に対し、|Ti∩Tj|がθ以上になるものを見つける問題を考える ・ 各アイテム e に対して、e を含む部分集合の集合を D(e) とする ・ Ti が含む各 e に対して、D(e) の各 T に対して、カウントを1つ増 やす、という作業をする 全ての e∈Ti についてこの作業をすると、各 Tj のカウントは |Ti∩Tj| になる for each e∈Ti for each Tj∈ D(e), j>i, do c(T)++ ・ D(e) を添え字順にソートしておくと、j>i である Tj∈ D(e) を見つけるのも簡単 D = A: 1,2,5,6,7 B: 2,3,4,5 C: 1,2,7,8,9 D: 1,7,9 E: 2,7,9 F: 2 振り分けの計算時間 for each e∈Ti for each Tj∈ D(e), j>i, do c(T)++ ・ 計算時間は ∑j ∑e∈Ti |{ Tj∈D(e), i<j}| = ∑e |D(e)|2 |D(e)| が平均的に小さければ、かなり速い D = A: 1,2,5,6,7 B: 2,3,4,5 C: 1,2,7,8,9 D: 1,7,9 E: 2,7,9 F: 2 1再帰呼び出しの計算時間のイメージ ・ 共通部分による計算は D(e) と D(e) のをスキャンする D(X) を n-t 回スキャンし、 データベースの t より大きな アイテムをスキャンする ・ 振り分けは D(X) に含まれるトラン ザ クションの t のをスキャンする t より 大きなアイテムをスキャンする + t t (n-t)個 計算実験 ・ webリンクのデータの一部を使用 - ノード数 550万、枝数1300万 - Pentium4 3.2GHz、メモリ2GB ・ リンク先 20個以上 288684個、20個以上共有する ペア数が143683844個、計算時間、約8分 ・ リンク元 20個以上が 138914個、20個以上共有する ペア数が18846527個、計算時間、約3分 ・ 方向を無視して、リンクが 100個以上あるものが 152131個、 100個以上共有するペア数が32451468個、計算時間、約7分 ・方向を無視して、リンクが20個以上あるものが370377 個、 20個以上共有するペア数が152919813個、計算時間、約14分 簡単に追加できる条件 ・ |A∩B| が、|A| のα倍以上 、(and/or) |B| のα倍以上 ・ |A∩B| / |A∪B| ≧ α ・ |A∪B| -|A∩B| ≦ θ など。 この手の、共通部分や和集合の大きさから計算できる評価値 であれば、簡単に評価できる ・ 計算時間は、ほぼ線形で増えていくと思われるので、多少 大きなデータでも大丈夫であろう その他列挙的なアルゴリズム クリーク列挙問題 グラフのクリーク: 部分グラフで、全ての頂点間に枝があるもの (2部クリーク:完全2部グラフになっている部分グラフ) ・ クリークは、グラフの中の密な構造をあらわす クラスタ、コミュニティーなどをあらわす ・ 極大クリークの列挙は比較的高速にできる(秒速10万個) ・ クリークっぽい構造の列挙もできる 頻出パターンの列挙 ・ データベースの中に多く現れるパターンを頻出パターンという データの解析、特徴分析、知識・ルール発見に使える データベース 実験1 実験2 実験3 実験4 ● ▲ ▲ ● ▲ ● ● ▲ ● ● ● ▲ ● ▲ ● ● ● ▲ ● ● ▲ ▲ ▲ ▲ 実験結果 頻出する パターンを抽出 ATGCGCCGTA TAGCGGGTGG TTCGCGTTAG GGATATAAAT GCGCCAAATA ATAATGTATTA TTGAAGGGCG ACAGTCTCTCA ATAAGCGGCT ゲノム情報 ・ 実験1● ,実験3 ▲ ・ 実験2● ,実験4● ・ 実験2●, 実験3 ▲, 実験4● ・ 実験2▲ ,実験3 ▲ . . . ・ ATGCAT ・ CCCGGGTAA ・ GGCGTTA ・ ATAAGGG . . . ・ グラフ、木、文字列、時系列など、多くのパターンが扱える ・ 頻出パターンの列挙は、通常非常に高速で行える ・ 極大性を考慮することで効率よい計算ができる 各種サブグラフ列挙問題 列挙問題: 与えられた問題の解を全て重複なく見つけ出す問題 ・ グラフの2点間を結ぶパス ・ グラフのサイクル ・ 部分木 ・ マッチング ・ 全張木 A ・ 高速だが、解の数が大きい ・ サイクルの代わりにコードレス サイクルを使う、といった工夫が必要 B … まとめ ・ データ中心の科学: あいまいな目的と不ぞろいなデータ ・類似する項目のペアを列挙する出力数依存型のアルゴリズム 異なりの場所に注目し、分類による絞込みを行う ・ 部分的な比較を用いて、大域的な類似構造を検出するモデル ・ ゲノムの比較: ヒト、チンパンジー、マウスの染色体の比較 バクテリアゲノムの多対多比較 アセンブリングの高速化 ・ データマイニングなどでの応用を意識した、より複雑なモデルに 対する高速アルゴリズムの開発 ・ツールとしての完成度を高める(解の圧縮など)
© Copyright 2024 ExpyDoc