グラフラグ使う時に結構その時は飛ばしたパートになるかなっていうので、
グラフラグ使う時に必要なデータベースだし、
そもそも一旦そのデータベースの存在みんな認識しといた方がいいんじゃねっていう、
そんなハロウィンと一番相性のいい回となっております。
一番真逆だしね。
しかもさグラフラグデータベースってのなんかもう2段も3段も先行っちゃってる気がしてて、
そもそもラグがあって、
でグラフラグがあって、
でグラフラグデータベースって話じゃないですか。
いや違うだろグラフデータベースだから。
ラグは関係ない。
そうかそうか。
そうだからなんか普通にリレーショナルデータベースとか、
そういうのの話をするのに比較的近いみたいな。
あ、今日はラグとは関係ない話?
うん。
えっとね、
一応つなげようと思えばつなげられるというか、
グラフラグをやる時に結局データをグラフ構造で持つんだよっていう話したじゃん。
なんか文章を、
そうだな。
私は侍ですみたいな。
めっちゃジャパニーズ。
そうだな。
私は東京に住んでます。
みたいになった時に、
私っていうノードと東京っていうノードがあって、
それに対して住んでいるっていうリブアットみたいなエッチが結ばれる、
みたいな関係性で文章を整理していくのがグラフラグのベースになる部分なんだよ。
で、そのグラフ構造、今の関係性、
こいつからこいつに対してこういう意味の矢印も出せるよっていう、
この関係性を格納しておく場所がまあ必要じゃん。
データ処理したらデータを置いておく場所が必要で、
そのデータを置いておくデータベースのことをグラフデータベースっていう。
なるほど。だからまあ全く関係ない話ではないってことですね。
ラグとデータベースは。
で、グラフラグがあるからグラフデータベースがあるわけではなくて、
もともとグラフデータベースっていうのはあって、
ただラグが盛り上がってきてグラフラグ盛り上がってきたから、
最近ちょっと注目度上がってるみたいな状態。
なるほど。
じゃあアップデートしていくんですね、今日は。
そうそうそうそう。
俺の中で熱量高いのは単純にグラフラグめちゃめちゃプッシュしてるっていう背景と、
あとネットワークサイエンスゴリゴリですみたいな話があったときに、
ネットワークサイエンスのデータも、
まあ別にグラフデータベースで持たなくてもできることはできるんだけど、
最終的にめちゃめちゃ効率よく進めようとしたらグラフデータベース用意しとかなきゃいけないんだよね。
そう言ってましたもんね、前回とかのエピソードでもね。
そうそうそう。
まあだから簡単に言うとこう、
グラフの分析をするとか、
グラフで物を扱うときにそれに合ったデータベース持っといた方がいいよね、
それがグラフラグですっていう話。
なるほど。はいはいはい、繋がった。
データをグラフで持つがもうね、正直イメージもない。
はいはいはい。
いやまあそうだよね。
どこにどういう風に管理してるのかっていうのも、
データベースって言われてもね、
色んなデータベースあるけどさっぱりイメージがつかん。
でも結構シンプルっちゃシンプルで、
普段みんなが使うデータベースの形って、
いわゆるリレーショナルデータベースってやつじゃない?
はい。
まあSQLとかで処理しやすいような、
まあ簡単に言うとExcelみたいな形で収まっているものというか。
そうだね、テーブル形式で表現できるようなデータの形だよね。
そうそうそうそう。
っていうのを扱ってるじゃん。
で、あれって、なんかこう、たくさんカラムがあって、
決まったもうこの形でデータが格納されてます、
この形で格納されてますっていう定義がびっちり決まっていて、
もう横にバーって長くても、
まあデータとしては特に問題なかったりもするじゃん。
そうだね、列がいっぱいあるとかね、行がいっぱいあるっていう。
で、その中にこう、この列の情報はこいつのことを1位に示してますよっていうプライマリーキーって呼ばれるものを、
なんかこう、持っておくみたいな感じじゃん。
例えばユーザーのIDだったり、それが日時で更新されるんだったら、
日付とユーザーのID、これがセットになって、
このセットはもう1個しかないから、その情報は全部ここに入ってますよみたいな感じだよね。
そうだね。
で、その形になってると。
ただ、じゃあそれがリレーショナルデータベースで、
グラフデータベースって何かっていうと、
なんかその、さっきの話みたいに、関係性が格納されている状態になってるので、
ざっくりイメージで言うと、ほんと2列とか3列の情報が入ってるだけのデータベースをたくさん持つみたいな感じ。
もっと展開する方法はたくさんあるから、あくまで一例だと思って、
詳しい人が見たら、それだけじゃねえよってなるのは承知の上でしゃべるけど、
例えば、ほんと3列だけの情報を例えば持つみたいな。
何かっていうと、どこに住んでるかテーブルみたいなのを例えば持つとする。
そうするとその中には、Aさんがどこに住んでるっていうので、
Aさんと住んでる場所っていうのが、ペアで入っているようなデータベースになる。
あとは、銀行のアカウント同士のお金の送金とかってなったら、
アカウントA、アカウントB、これが口座から口座に送金されたペアみたいな。
それに対して3列目があるとしたら、そこにいくら送金されたかみたいな数字が入る。
この1位の関係性が含まれているようなデータをたくさん持っておく場所がグラフデータベースみたいな。
なるほど。シンプルですね、そういう意味だと。
テーブルの中にいろんな情報を盛り込むんじゃなくて。
そうそう。っていうのがたくさんそういうのを持っておくと、
例えば銀行とかのデータとかでもよくそういう持ち方されるらしいんだけど、
人とアカウントID、人と口座番号みたいな感じだね。
人と口座番号のペアのグラフのデータベースがあって、
アカウントからアカウントへの送金のグラフのデータベースがあって、
っていうのを別々でバーって持っておいて、
こいつらをSQLみたいな話で言うとジョインしながらくっつけて、
誰が持ってるこのアカウントから誰が持ってるこのアカウントに送金したっていう情報を取れるように、
なるべくそれがフレキシブルにくっつけられたりできるようにシンプルな形でデータを持ちまくるみたいな、
そういう構造がこのグラフデータベースのベーシックな部分。
似ている用途で使われるのかなっていうのを今聞いてて思って、
どこからどこに送金したとか、何か方向のある動きみたいな情報を持たせるときには結構使えそうだなっていうのと、
パッと聞いてイメージしたのはスポーツとかの対戦票とかも似たような話かなと思ってて、
どことどこが何体なんで勝ったみたいな結果を収めていくだけのテーブルってあるじゃないですか、
星取り票的な、ああいうのでも表現できるのかなっていう、
情報量としてはそれくらいのシンプルなイメージ。
日本シリーズに合わせてきました。
日本シリーズと合わせてきましたよ。
所属の会社、この番組だったらバレてるけど、日本シリーズの対戦のまんまだから。
まんまですからね。裏日本シリーズやってるみたいな感じですからね。
裏日本シリーズ、今のところ2位1位?
今2位1位ですかね。
公開の前日に撮ってるからね。
そうですね。
だからなんかデータ、いろんな種類のデータ触ったことある身からすると、
逆に言うと関係性に特化したグラフだけだから、
それに似たような情報って別にリレーショナルデータベースの方でも持ってたりするじゃん。
確かに。
だから別にグラフデータベースで持たないとできないみたいなことではない。
そのグラフの構造を解き明かすのは。
だからそこまで大きく違うもんかっていうと、
パッと見は一緒なんだけど、
この関係性に特化した形でデータベースが構築されているっていう。
なんかあれですね、ややこしいですね。
関係性に特化されているデータっていうのと、
リレーショナルデータベースっていう従来のデータベースを直訳すると、
リレーショナルだから関係性なんだよね。
確かに確かに。
確かに確かに。
でもあれってリレーショナルデータベースどっちかっていうと、
テーブル間の関係性とかを結構大事にしているというか、
例えばお客さん、ユーザーテーブルとか、商品テーブルとか、店舗テーブルみたいな感じで、
それぞれの関係性がテーブルごとにあるのがリレーショナルデータベースのイメージで、
一方このグラフデータベースってなると、
どちらかというとテーブルの中でのノードとノードの関係性を持たせるデータベースみたいな。
ちょっと関係性の指しているものが違いますよね。
そうだね、そこを強調して持たせるようなところっていう風になってて、
だからちっちゃい塊で結構たくさん持っておいて、
それにプラス各ノードの属性用のテーブルとかも例えば持っておくと、
ユーザーのIDに対してこういう属性バーって付与されてますみたいなやつを、
例えばそのノードに付け加えてあげるとノードの中身の情報もリッチになるし、
関係性はシンプルなデータベースで持っておけるしみたいな感じにできる。
でこっちで持つ理由っていうのは、やっぱシンプルな関係性でバーって持っておくから、
その関係性をものすごく大規模なネットワークとかで、
例えば本当に何十万、何千万人とか何ならFacebookとかだったら何億人とかっていうような構造になったときに、
その関係性を処理するのがリレーショナルデータベースだとめちゃめちゃ重くなる一方で、
グラフデータベース専用のクエリみたいなのがあるのよ。
そうなんだ。
そういうのを処理する。
で、つまりリレーショナルデータベースでSQL使って関係性抽出したら、
テーブルを何個もジョインして一個一個の関係性に絞ってっていう風にやるじゃん。
けどそうじゃなくてグラフデータベースを処理するためのクエリっていうのがあって、
でそのクエリやるとその関係性を処理するのに特化した命令文がたくさんあるのよ。
それによってより高速にパターン検知とかができるっていうメリットもあったりする。
それは何?それ専用の言語があるんですか?
そうそうそうそう。SQLみたいな感じでちょっと覚えなきゃいけないやつがあって、
例えば一番有名なのがそのグラフデータベースで有名なのがNeo4jっていうサービスがあって、
これねグラフ系を触ったことある人とかは絶対聞いたことあるし、
なんならグラフラグとかのやってみたって人たちは大体文章から抽出したその単語同士の関係性のグラフ構造をNeo4jのデータベースに入れて、
それをラグにかけるみたいなことをやってたりするから一番メジャーなのはNeo4jってサービスなのね。
そうなんだ。
Neo4jの中ではCypherっていうそれを処理するグラフ用のクエリがあって、
Cypherクエリ、Cypherクエリとは言わないのかな、Cypherってやつがあって、
そうすると例えばこのユーザーからこのユーザーに対してとか、
このユーザーを起点に5手先までつながってる人たちがいる軍団だけ抽出するとか、
ちょっとSQLで条件つけるときと同じような感じでクエリベースで関係性を抽出してこれる。
そのノード起点でどれくらいの広さまで、長さまで、先のノードまで取得するみたいな、
そういうデータの取り方をするんですか。
そうです。
面白いですね。
なんかSQLとかでそれやろうとすると、まず起点になってる人とつながってる個数が何人いて、
つながってる先の人が持ってるノード数が何人いて、
これをウェア文の中で&で多分条件つけてとかっていうので5人先まで抽出しようとするじゃん。
だからリレーショナルデータベースだとそこまでたどり、パターンを検知しようとするとめちゃめちゃ大変なんだよね。
だけどそういうパターン検知とか関係性を検知するためのクエリのコマンドがたくさん用意されている、
ちょっとSQLとは別のものがあるから、
そのデータベースで持ってけばそのクエリが使える、当てられるみたいな。
そうなんですね。
クラウドのサービスの中にもグラフデータベースを扱うサービスってあるんですか。
あるあるある。多分各クラウドサービスにどんどん入り始めていて、
もともと持ってたんだけど、グラフラグが流行り始めてからその熱量が上がってるっていう感じ。
そうなんですね。やっぱグラフラグきっかけで充実してきてるんだ。
だから、1ヶ月半、2ヶ月前ぐらいに、Google Cloudでもスパナーグラフってやつが入って、
スパナーグラフ、もともとスパナーっていうサービスがあったところに、
もっと扱い、グラフデータ扱いやすくするよみたいな、
ちょっとビフォーとアフターがどう変わってるのか、詳細までは話せないんだけど、
そうやってグラフを解き明かすためのスパナーグラフっていうのが出てたり、
それがどこまで充実してるか、クエリとかデータベースの使いやすさとかっていうのが、
どこまで充実してるかわかんないけど、一応各サービスには入ってるらしい。
じゃあもう一般的に使われるようになってきてるんですね。
できるように、でもただちょっとやっぱコストとかがまだ使う人がたくさんいるわけじゃないから、
そんなに落ちてないっていうのもあるらしい。
データも出せるのにもそうだし、読み書きするのにもまだコストがちょっと高い。
多分Google Cloudとかで言うと、ビッグクエリとかの方がある程度抑えれる部分はあるはず。
まだ成長途中の、というか多分ここからどんどん整えていくフェーズにあるから。
じゃあやっぱりグラフラグ、自然言語系で使うっていう用途がメジャーなんですか?
いや、元々グラフデータベースっていう概念自体は結構根強く人気もあるし、
それだけで本とか出てるんだよ。一応持っておいてるんだけど。
初めての知識グラフ構築ガイドっていう、これは元々オライリーで英語版出てるやつの翻訳バージョンって感じで、
Neo4jの人が書いてるんだよね、それこそ。
ナレッジグラフってやつですね。
そうそう。ナレッジグラフっていうのは結局グラフラグのベースになってる、読み込ませるデータの話だから。
そういうのが元々あって、だから別にグラフラグの要素これには1ミリも書いてないの。
けどこんだけ分厚い。
じゃあどういう風に使ってるかで言うと、関係性にめちゃめちゃ特化したデータで、
それの特徴としてはリアルタイムにデータ更新ができるデータベースとして持っておくのがいいっていう風に言われていて、
なんでかって言うと、ある行動パターンに乗った人をすぐ検知できる。
パターン検知に強いっていう話したじゃん。関係性のパターン検知。
だから例えばよく使われているのだと、銀行間の送金とかのマネーロンしようとした時に、
マネーロンダリングする時に絶対このノード通るよねとか、めっちゃベーシックな話をするとか、
こういう回し方をしてるのって普通の取引じゃあんまないよねみたいな。
っていう取引のループみたいなのをどんどんそのデータベースにバーって、
どこのアカウントにいくら入ってったみたいなのをバーって入れてって、
そのパターンに検知したやつをアラートとしてあげるみたいなことができるから、
銀行の不正取引とか、あとはクレジットカードで不正に使われた時結構なんか来たりするじゃん、メールとか。
分かります分かります。
あれもその支払い、こんな関係性離れたノードのとこにいきなり支払いのエッジ繋がるみたいなところとか、
はいはいはい。
POSのデータとかを例えば見たらクレジットカードで、
昨日までこの土地にいたのに、次の日ここにいて、で、なんか怪しいところで金いきなり買い物してねとか、
っていうので不正検知みたいなのがされるとか。
うんうんうん。
っていうところのリアルタイムで物の流れとか、っていうどこに繋がったっていうパターンマッチングとかに強いっていう面があるから、
そういった不正検知だったりとか、そういったところに使われてたりもする。
最近、JCBとかめちゃめちゃ厳しいっすよ。
あ、そうなんだ。
もう海外旅行行くって言わないで、海外で決済とかすると、すぐ引っかかって連絡来たり、変な話すぐ止まっちゃう。
へー。
向こうが勝手に止めてくれるんですけど、ありがた迷惑なもので。
たしかに。
マスターカードとかね、ゆるいんすよ。
これ、たぶんその、なんだ、マスターとかビザとか、そういう話で違うんじゃないかなと思うんですけど、もしかしたらカード会社レベルなのかもしれないですけど。
でもあれじゃない?やっぱJCBは国内発行の、一応国内のサービスだから、
国内での決済は安心だけど、海外になると、みたいな。
一方でビザとかマスターとかMexとかってなったら、あれなのかな。
そもそもグローバルに使う体になってるから、そこの敷地はゆるいけど、別のとこがめっちゃ厳しいとかあるかもしれない。
ありそうですよね。たぶんそのセキュリティレベルは設定できるんですけど。
厳しめにしてるんだ。
厳しめになってると連絡来たりしますね。
そういう検知がすぐできるんですね。
あとは今まで使われてたので、たぶんたっちゃん的にもあってなるのは、グラフニューラルネットワーク。
レコメンドとかで結構使われるじゃん。
そうですね。
グラフニューラルネットワークって。
あれって従来持ってた特徴量、それぞれ独立な特徴量バーって持ってて、それの総合値で判断するっていうだけじゃなくて、
誰がどれ見てたかっていうのに合わせてそこのエッジに結ばれたからこいつと似てるし、これレコメンドしようみたいな。
そういう消費したコンテンツとユーザーの関係性をベースにレコメンドの商品を出したりするみたいなのがあるから、あれも裏でグラフデータベースである程度持ってる部分はある。
そうっすよね、絶対。
Amazonとかの商品の閲覧履歴とか、似たようなユーザーが、この商品買った似たようなユーザーってこういう商品も買ってますよみたいなところとか。
あれ結構精度高くできるのがグラフニューラルネットワークっすよね。
そうそうそう、だからそれも別にテーブルデータで関係性持っておけばいいっていう話もあるから、一概に言えないんだよね、そのグラフデータベースで持ってるよって訳じゃなくても別にある程度テーブルデータでどうにかなるというか。
そうですね、ただユーザー数が多くなったりとか、アイテム数が多くなった時のその次元数の爆発、結局組み合わせの数、パターン数がどんどん増えていくから。
そうだね。
自分の解決策としてのグラフニューラルネットワークみたいな話もあるので、効率的にデータ持てるんですよね、小さな容量で。
それで使われてたりするから、これまでにもうすでに何回も多分グラフデータベースに対する注目度っていうのは上がっては一定になり、上がっては一定になりみたいな感じで熱量は常に上がり続けてきてたはずだ。
確かに確かに、いやそうだよな。
え、なんかその話聞いて思ったのは、もうブロックチェーンじゃんって思ったんですよ。
あー、はいはいはい。
でもそうだと思うよ。
そうですよね、ビットコインが生まれたのが二千何年?
10年よりも前くらいですよね確かに。
うん、そうだね。
っていうところで同じ仕組み、結局ブロックチェーン同士のブロック同士のつながりを結局どことどこにこのトランザクションが発生したかだけを持たせているものがブロックチェーンなわけで、
それって今のグラフデータベースとまさにそのままなのかなと思っていて。
あーそうだね、そうまさにまさに。
ですよね。
データ、もうちょっとだから複雑にデータを持たせてるから改ざんができないっていう話だけど、でもそう、全員の取引の上で成り立っているから、そのベースにあるのはそうだね、そういうところはあるはず。
それこそイーサリアムとかでトランザクションを作ろうとすると、どこからどこにアドレスの、2つのアドレスのトランザクションだけをデータベースとして持たせて、実際にそこに何を送ったかとか、
メタデータみたいなものはまた別のデータベースに、データベースというかストレージに保存しとく。あくまでそのそこの保存している場所のURLだけをトランザクションに持たせるみたいな仕組みだから。
そうだね。
使い分けをうまくやっている、そのデータの量が大きくならないように、あくまでそのトランザクションだけをデータベースには持たせておいて、重くなるコンテンツはストレージに置いておくみたいな。
はいはいはいはい。
うん。
っていうのが昔から使われてたんだなーっていうのは今思い出しましたね。
確かにそこの発想は、もしかしたらここインスピレーションを受けている可能性はなくはないね。
うん、そうっすよね。
実際にそのパターン検知で、eBayとかの取引を見ながら、不正取引あるなーみたいなところとかを見つけたりもするらしいから。
あ、そうなんね。
そうそうそう。だからそういう不正検知とかに強い、こういう交換の関係性の上に成り立っていると保証できるのか、じゃあそれどんどん積み上げる仕組みにしよう、みたいな発想はあってもおかしくないかも。
うんうんうん。
めっちゃ有名な話の可能性もあるけどね、俺らが今。
としこにーとか言っときながら。
そうね。この世界、業界の人にとって当たり前かもしれないですけどね。
まあでも普段やってなかったら馴染みないというか。
そうだね。
少なくとも自分は馴染みがなかったっすね。
でもだからこうやって持つっていう、なんか方法だけ知ってるだけでも実は広がる世界結構あるなーみたいな。
そうですね。このデータってどうやってデータベースに格納するんだっけっていう話になったときに選択肢として持てるというか。
そうそうそうそう。あとはなんかこう交換のパターン検知。もしかしたらね、こうECサイト作るとかってなったときの、
あの、不正、これなんか悪いことに使われてる気がするぞ、みたいな検出とかには使えるかもしれない。
まあそうですよね。トランザクションっていうのはいろんなとこで起きるから、そのユーザーが購買したという情報もそうだし、ユーザーへのレコメンドとか、
もうなんかログデータそのものってもうトランザクションのもうそのものなんで、それをどう管理するかって結構悩みの種というか。
だから多分あんまりこう、多分ポピュラーなデータの持たれ方ではない。でも使ってるところはめちゃめちゃ使ってるっていう感じ。
まだまだかな。
これからなんですかね、そこ。
そうだね、多分その、自分たちが使ってるメインのクラウドサービスにガッツリ入ってるとかってなると、多分扱いやすくはなるから。
そうですよね。
ほらだって、それでね、いきなりNeo4jって全然別サーバーにデータを格納してみたいな話になっちゃうから、
例えばでかい会社とかでやろうとすると、セキュリティ観点をチェックしなきゃいけなくてとか、
今持ってるデータベースでダメなんですかみたいな、なんか倫理の壁とかがあるじゃん、絶対。
そうだよね。
けど、Googleクラウドとかの中に入ってたら、別にテスト的にインスタンスショット立ち上げたいっすぐらいだったら、そんなに細かい倫理とかやんなくていいし。
で、しかも普通のラグからグラフラグにしたときに変わる世界って、単純なマシンラーニングからディープラーニングレベルで変わるかで言うとそんなこともないというか、
そうなんだ。
多分、ちょっとこのモデル流行ってるらしいから使うのちょっと強い版みたいな感じかな。今の感覚ではね。
すぐにパッと使ってみようっていう状況にも、ようやくその準備が整ってきたぐらいなんですかね。
うん、多分そうだと思う。
手元にあるデータをデータベースに入れてみようっていう、まだ状況にもなってないっていうのはリアルなとこな気がする。
いやそう、マジそう。で、しかもあとはそのグラフを扱おうとしたときの学習コストだよね。
はいはいはい、確かにね。
さっきCypherって話したけど、SQLも流派があるじゃん。
まあありますね、いろんな、
PoSGreyとか、
MySQLとかね。
で、BigQueryでも、そうMySQLあって、BigQueryもちょっとさ、こうあの文法違うところあったりとか、
っていうのがある中でCypherっていうのがあって、SparkLっていうのがあって、
で、なんかGQLっていうのもそれと多分並んでるんだと思うんだけど、また別のがあってみたいな。
あ、そうか。
そう、プラットフォームによって採用しているものが違うから、またむずいみたいな。
GQ、グラフQLのこと?また別?
あ、そう、グラフQL。
グラフQLか。
結構ウェブサイト制作とかでもね、使われる、最近使われるようになってきてるよね。
多分グラフQLと一緒だと思う。
うんうん。
あ、そうなんだ。
うちも詳しくないですけど、ウェブサイトを作るときにページをどういうふうに持たせるかみたいなときの効率化の方法の一つとして、
グラフ構造を使ったウェブのフロントとかバックの仕組みみたいなところに使えるよみたいなことを。
あ、そうなんだ。
ちょうどうちのチームのウェブサイトを制作している、フロント側やっているメンバーが、
これ使いたいんでやりますって言って、これまでちょっと教えてもらいましたね。
あ、そうなんだ。俺もね、そこが今のところ一番カバー範囲としては強めだよ。
あ、そうなんですね。