宇野が作ったプログラムの利用法 ー ビジネスと研究を中心に


カウンター by  SOHO COUNTER

当ホームページの公開プログラムのコーナーには、データマイニング系のアルゴリズムなど、巨大なデータを効率良く扱うためのプログラムがいろいろとあります。が、それらのプログラムは基礎的な処理を高速化するために作られていますので、ある程度の高い機能を持つアプリケーション、例えば、音声認識とか画像検索など、ユーザが直接的に使えるようなデータ処理を提供いるわけではありません。しかしながら、基礎的な問題というものはどこにでも現れるので、「速度の改善が必要」、「データが大きすぎて何もできない」というような場面では利用できる可能性が大いにあります。しかし、「いったいどんなことに使えるのか」わかりにくいのは事実です。そこで、このページでは、宇野のプログラムが利用できる場面、および上手な利用法について簡単に解説したいと思います。

まずは、利用者ごとに利用のしかたを大まかに解説しましょう。他のページと同じように、「一般」「ビジネス」「(他分野の)研究者」という区分を用います。

  一般の方 

一般的なユーザが使うソフトは、基本的に操作に関する機能が充実しているものが向いています。専門的な、こったことをするものよりも、目で見てわかりやすいソフトのほうが使い出がある、ということです。これは、データを解析するソフトにも当てはまるでしょう。個人ユースで巨大なデータを解析したい、という要求もそれほど多くないと思いますし。この点からは、宇野のプログラムを一般の方が直接使う、という場面は想像しにくいです。しかしながら、宇野のプログラムを使ったソフトを使う、ということはあるかもしれません。

  ビジネスの方

ビジネスとしてソフトを見た場合、役に立つものはやはり、企業活動に資するもの、だと思います。高速な計算が必要な場面は、巨大なデータの解析、あるいはオンラインサービスなどで用いる、中規模の問題を非常に短時間で解くようなアプリケーションを作る場合でしょう。代表的なものには、レコメンデーションエンジン、ナビゲーションシステム、画像検索、などが挙げられると思います。宇野のプログラムはこれらに非常に当てはまりが良いのですが、それ自体を直接的にレコメンデーションに使う、ということは難しいと思います。宇野のプログラムは、列挙型の問題、つまり、かれこれの条件を満たす解を全部見つけてください、というタイプの問題を高速に解くことができます。中でも、データの中から良く現れる構造(ものの組合せとか列とか)を見つけ出す頻出パターンマイニングのプログラムと、データの中のどれとどれが似ているかを調べて、似ているものの組をすべて見つけ出すタイプのアルゴリズムは使いでがあると思います。しかし、良く現れるものが見つかっても、それをそのまま出力してレコメンデーションを行なうのは難しいでしょう。しかし、「どの本とどの本の組合せがよく売れているか」「同じような本を買うような顧客の購買パターンはどの程度有るのか」ということを、巨大な購買データから機械的に調べ上げることができれば、その調べ上げたデータをもとにすりことで、より効果的なレコメンデーションができるでしょう。同じようなことは、DM発送先を決める問題などマーケッティングの分野、典型的な故障のパターンを見つけ出す故障診断、WebクリックなどWebサイト情報の分析など、多くの場面で見られると思います。このような場面で、巨大なデータを扱った解析がしたい、とても速い時間で解析を終了させたい、というときには、宇野のプログラムは利用価値が高いと思われます。

  (他分野の)研究者の方 

研究の分野では、計算パワーを使うものと言えば、シミュレーション、データ解析、可視化、といった作業でしょうか。近年巨大なデータを抱えることが多くなったので、データ解析では特に高速化の要求が高いのです(シミュレーションも、粒度を上げればいくらでも計算パワーが必要ですが)。データ解析なりシミュレーションなりのプログラムは、幾つかの計算の処理を組合わせて作られています。もしもその中で、宇野プログラムで解けるものがあり、かつそれが全体の中でボトルネックとなっていれば、高速化ができます。が、しかし、このようぴったりとはまるケースは少ないと思いますので、モデルを変える、計算することを変える、といった、処理を少しシフトして、宇野のプログラムの問題に合わせることができれば、「ちょっと違うことをするがやたらと速い」プログラムができると思います。

 

といった所だと思います。共通して言えることは 「モデル作り、インタフェース作りは自分でしなければ行けない」というところでしょうか。高速なアプリケーションを作るための道具を提供していると考えていただければいいと思います。では次に、よく見られる問題いくつかについて、宇野プラグラムの利用の仕方についてどのように考えるのか、例を見てみましょう。

 

  レコメンデーション 

レコメンデーションとは、顧客の購買履歴、行動履歴などを自動的に分析し、自動的に各顧客の嗜好にあったおすすめの商品を提示することを言います。顧客の行動履歴が十分に取れていれば、その顧客の嗜好を知ることもできると思うのですが、それではごく一部のお得さんにしかおすすめが提示できません。そこで、他の人の行動履歴も参考にして、行動履歴がちょっとしか取れていない顧客に対してもおすすめを提示しよう、というのがレコメンデーションの本質だと思います。ある商品をオンラインで買うと「この商品を買った人は他にもこのようなものを買っています」と品物がたくさんでてくる、ということが良くありますが、あれもこの商品を買った他の人、のデータを参考にしておすすめを選んでいるわけです。

レコメンデーションに関しては、顧客の嗜好分析が重要です。そのためには、「どのような買い方をする人が多いか」「どの人とどの人の買い方が似ているか、あるいは共通項があるか」といった点を調べる必要があります。データが小さければ簡単ですが、これを大規模なデータ、100万以上の顧客で行なうことは大変です。そのような場合に宇野のプログラムが役に立ちます。例えば、多くの顧客に共通して買われている品物の組を見つけたり、買い方が似ている顧客をグループ化しておすすめの内容を絞り込んだり、といったことが非常に短時間できます。しかしながら、共通して買われる品物、あるいはグループ化した顧客のデータなどを使ってどのようにおすすめ商品を決めるか、という問題は、宇野のプログラムでは解けませんので、通常の方法を使う、あるいは一工夫が必要になります。モデルの面では新規性は無いわけですが、データが巨大であれば、サンプルの多さから精度を上げることができるかもしれません。そうなると、案外単純な方法でも、難しい工夫なしでも、いいおすすめができるかもしれません。

 

  画像検索・画像認識 

最近の画像処理では、画像のデータ自体を扱うのではなく、画像からある種の特徴量を抽出して、それをもとに検索や認識をしよう、というスタイルが本流になりつつあるようです。そうなると、同じような特徴量を持つものが似ている画像と判断されるわけです。画像データは数が巨大であることが多いので、宇野のプログラムで基礎的な処理ができそうです。宇野のプログラム、sachica やSSPC は、文字列データや集合データの中から似ているものの組を見つけるので、画像を特徴を表すアイテム集合・文字に変換して比較することで、似ている画像の組を全て見つけられそうです。「指定した画像に似た画像を見つける」といういわゆる検索でなく、「データの中から似ているものの組を見つけている」ので、通常の画像検索とは異なることを注意しておいてください。また、似ている画像が全てわかれば、それを使って画像のクラスタリング、つまりは画像の分類ができたり、画像検索用のインデックスを作ったりすることができそうです。これらの処理も、非常に高速でできると思います。データの中から似たものが見つけられれば、コピーや引用の関係が見つけられますし、著作権侵害をしている画像を見つけることもできるかもしれません。巨大データでも高速処理できるので、画像の一部を取り出した画像のデータを作っておき、部分的に画像を利用しているものを見つけることもできるかもしれません。sachica や SSPCは、画像を文字や集合データに変換することはできませんので、そこには何か他の方法が必要です。また、出てきたデータは似ている画像の組なので、莫大です。これを整理・統合して見やすくする方法は、他に考えなければ行けません。

画像の類似性が調べられると、画像の分類ができそうです。似ている画像の間に枝をはってネットワークを作ると、似ている画像ネットワークが作れます。これに従来のネットワークをクラスタリングする手法を適用すれば、お手軽にクラスタリングができそうです。また、画像の類似性をもとにして、映像の類似性も調べられるかもしれません。映像は画像のつながりですので、それぞれの画像の特徴を表す文字、あるいはアイテム集合の列と考えらます。すると、sachica を使って、映像データの中から似たシーンの組を全て見つけ出す、ということができそうです。

似ている画像、同じ被写体を含む画像は、多くの特徴を共有するはずです。似た画像を調べてクラスタリングし、それらに共通の特徴を見つけてもいいですが、「最初から多くの画像に共通して含まれる特徴の組合せ」を見つけてもいいでしょう。このような目的には宇野のプログラムLCMがぴったり合います。産総研の津田さんによる、LCMを使って画像分類のエンジンを作った研究もあります。そのほかにも、もう少し画像を直接的に扱う、文字認識、顔認識や画像データとして蓄えられている実験結果の解析を行なう、といった問題にも、このような基礎的なプログラムが活躍する機会はありそうです。

 

  ゲノム解析 

ゲノム情報は、生体の持つDNAがどのような塩基の配列でできているかを表す文字列データです。これによって、遺伝子の働きが決まってくると言われています。ゲノムデータは、巨大で、個体ごとに変異があり、かつ読み取りをする際にもエラーがあります。ですので、キーワード検索のような完全一致による検索をベースにシステムを作ることはできません。計算をするときは、「曖昧な一致」で重要なのです。sachica は似ている文字列を見つけ出すことできますので、つまりは曖昧に一致する文字列を見つられます。これを使うと、様々なゲノム解析ができます。

  アセンブリング    ある個体のゲノムを読み取るときに行なう処理です。DNAの塩基配列は、巻物を読むようにすべていっぺんに読むことはできないので、ちぎって少しずつ、1000文字程度ずつ読み取ります。全体を復元するには、重なり合うところを見つけて、パズルのピースをつなげるようにして全体を復元するのです。この際、重なり合う部分を見つける、という作業が、多数の部分配列の中から似ている部分文字列を含むものを見つける問題になり、sachica を使って解くことができます。重なり方を見つけた後は、他の処理が必要なのですが、個々についても現在他のアルゴリズムを開発中です。

  貼り付け    すでに読み取りが完了したゲノム(例えば人間など)に、新しく読み取ったゲノム(他の人間)の断片配列を貼り付けます。貼り付けるというのは、断片配列に一番近いところを見つけて、その配列の本来の場所を見つけることです。本来同じものの対応を見ることには意味がないように見えますが、個体ごと(個人ごと)にちょっと(ちょっとと言っても100万カ所くらいです。ゲノム全体から見ればごく一部ですが。)ずつ違いがありますので、その違いが何かを調べることができます。こういった少々の変異は病気の原因になったり、あるいは毛の色や身長の差などの違いとして出てくることがあります。もう少し大きな変異を見ると、人とチンパンジーといった種の違いを見ることもできます。アセンブリングするのは非常に手間がかかるので、貼り付けを使うことでゲノムの差が簡単に調べられるのです。

  種の分岐の調査    異なる種のゲノムを比較すると、どれくらい似ているかがわかります。ゲノムの変化は確率的に起こるので、これくら変化するにはどれくらいの時間がかかるか、というのがある程度推測できます。すると、2つの種が共通の祖先からどれくらい昔に別れたのかが推測できます。また、いくつもの種の違いを調べれば、系統樹を作ることもできます。違いを調べるには、似ているところの対応を見なければいけないので、sachicaのように似ている部分を短時間で見つけられるアルゴリズムが使えます。

 このほかにも、sachica を使っていろいろな操作ができます。

 − 読み取った塩基配列の中から、他の種の遺伝子に似ているものを全て調べ上げ、どのような遺伝子を持つか推測する

 − 遺伝子の類似性を調べて、クラスタリングや分類など類似関係を調べる。

 − 1つのゲノムの中に似ているものが多数現れるものを探して、繰り返し構造(反復配列)や典型的な繰り返しパターンを調べる

 − 多くの種に共通して現れる構造を見つける構造を見つける

 

このほか、多くの遺伝子が共通して持つ特徴をLCMを使って調べることで遺伝子の分類をする、という研究もあります(岡田吉史さんの研究です)。

 

  ネットワーク解析 

ネットワーク解析は、Webやインターネットなど実在するネットワーク、あるいは人間関係や組織図など概念のネットワークが持つ性質を調べるものです。「このネットワークは比較的大きくて密につながったグループが数多く存在する」「このネットワークでは、数ヶ所がハブのような中心的な役割をしているようだ」といったようなことを調べます。密な構造を調べるには、宇野のプログラム mace や pce が向いています。前者は極大クリーク、後者は疑似クリークを全て見つけるものです。クリークとは全ての頂点の間に枝がある部分グラフ(ネットワーク)で、疑似クリークはクリークに近い部分グラフです。また、LCMを使って、2部的な構造を持つ密な構造を調べ上げることもできます。

また、宇野プログラムを使うと、これらとは違った解析もできます。例えば TGE を使うと、ネットワークに含まれる全ての木構造(わっかを持たない部分グラフ)を全て見つけることができます。また、cypath を使うと、わっかやパスを全て見つけることができます。大きなネットワークでは解の数が大きすぎて現実的ではありませんが、ある程度小さめのネットワークであれば、今までと毛色の違う解析ができると思います。情報研の佐藤寛子さんの研究で、わっかの数を数えて化合物の検索精度をあげる、というものもあります。

少し違った視点から見ると、ネットワークが無いところに、類似性を用いてネットワークを作る、という方法もあります。文書や画像などの類似性から、似ているものがつながっているネットワーク、を作り、その解析をネットワーク解析の手法で行なうことで、いろいろな知見を得るというものです。ネットワークを作るところに、sachicaやSSPCが使えますので、巨大データでもなんとか解析することができます。解析の手法に関しては、何か他のものを考えないといけませんが。

 

その他の応用も、以下に書いておきます。

日本語・英語テキストデータの類似性の解析。sachicaにより引用やコピペなどが検出できる。類似するものが多いフレーズを見つけることで、はやりのフレーズなど頻出するフレーズも検出可能です。。同一文書、他の文書にほぼ含まれる文書なども見つけられる。既存手法では、文書全体の類似は調べられたが、部分的な類似は事実上不可能です。

OCRなどで読み込んだ、読み込みエラーを含む文章を、webなどの文章データとの類似する部分を調べ上げることで、明らかにおかしな間違いを自動的に修正する。sachica を見つけて各部分文字列に類似する部分文字列を見つけて、最も近いものに直すことで修正すればよいです。

Webなどの多量の電子文書から、最近使われているフレーズを自動抽出する。検索では「このフレーズは最近人気かどうか」とフレーズを特定しなければ行けないが、sachicaとmace を組合わせれば、自動的に最近はやっているフレーズが抽出できます。また、maxmotif を使うと、ワイルドカード付きの頻出文字列が見つけられる。ワイルドカード付きとは、"新しい電気??機" のようなもので、?に1文字ずつ何かが入る、ということです(例えば電気洗濯機とか電気食洗機とか)

アンケートデータや実験データなどの類似性解析:アンケートのデータ、あるいは実験のデータなどは、属性値を離散化することで、各項目が文字列であるデータに変換できる。これをsachicaで比較し、類似するデータの検出ができます。ここから、mace やpce で部分的に密な構造を見つけることでクラスタを発見する、顕著なパターンを見つける、といった展開ができます。

日本語・英語文書にキーワードなどの属性を持たせ、LCMを使って多くの文書に共通するキーワードを見つける。あるいは、共有するキーワードが多い文書集合を見つける。

多くのWebページ/Webサイトに共通してリンクされているページ/サイト群をLCMを使って見つけることで、似た内容を持つページ/サイト群を見つけると同時に、同じような興味を持つページ/サイト群を見つける。Web データは巨大であるため、高速アルゴリズムを用いないと計算資源がいくらあっても足りないです。

パケットログ、クレーム、不具合機器のログデータ等から故障・異常なものの一部に共通する属性の組合せをLCMで見つける。ぱっと見でわかりにくい、組合せ的かつ部分的な故障原因・異常原因の候補が見つかるかもしれません。

売り上げデータや顧客行動データ(webクリック)の組合せ的な解析。組合せて購買されるもの、訪れることが多い場所/ページなどがLCMで検出できる。特に顧客が異なる特性を持つ複数のグループに分かれると思われるときに有効です。

時間軸を持つデータ(顧客行動データや株価のデータなど)から時間軸に沿ったイベントの列(Aを買ってからBを買う)というパターンで良く現れるものを、LCMseqを使って見つける。LCMを使うと、一部の順序が入れ替わったものを同一視する(A を買って、BとCを順番問わずに買ってからCを買う)というパターンも、LCMを使うと見つけることができます。

 

 


 宇野毅明のホームページへ          情報学研究所のホームページへ