Mercurial > hg > Papers > 2012 > JavaKuche
changeset 9:dffb9ea9d1a9 draft
fix
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 08 Sep 2012 08:36:17 +0900 |
parents | 2d7dc1332fff |
children | a7ae614deffc |
files | index.html |
diffstat | 1 files changed, 64 insertions(+), 56 deletions(-) [+] |
line wrap: on
line diff
--- a/index.html Sat Sep 08 08:20:17 2012 +0900 +++ b/index.html Sat Sep 08 08:36:17 2012 +0900 @@ -412,37 +412,46 @@ <p>次に,具体的な利用例としてPageRankのGraphDBでの表現について発表する.</p> </article> - + <article> + <li>TinkerPopによるPageRankの実装</li> + <ul> + <li>PageRankアルゴリズム</li> + <li>PageとPageRankのGraphDBによる表現</li> + <li>TinkerPopによるPageRankの計算</li> + <li>Pipesによる走査</li> + <li>PageRankの計算にかかる時間</li> + </ul> + </article> <article> - <h3>Google の PageRank アルゴリズム</h3> + <h3>GoogleのPageRankアルゴリズム</h3> <ul> - <li>Google の Webページ検索エンジンに使われているアルゴリズム。</li> + <li>GoogleのWebページ検索エンジンに使われているアルゴリズム。</li> <li>あるページの『重要度』を示す値で、各ページ毎に持っている。 </li> - <li>PageRank が高いほど検索結果の上位に表示される。</li> + <li>PageRankが高いほど検索結果の上位に表示される。</li> <li>『多くの良質なページからリンクされているページは、やはり良質なページである』という考えのアルゴリズム<br></li> - <li>GraphDB は PageRank の計算に向いている。</li> + <li>GraphDBはPageRankの計算に向いている。</li> </ul> </article> <article> - <h3>Page と PageRank の GraphDB による表現</h3> + <h3>PageとPageRankのGraphDBによる表現</h3> <ul> - <li>アンサイクロペディアの各ページを GraphDB で表す。</li> - <li>1 Vertex が1つのページを表す。</li> - <li>各Vertex は Page Title と PageRank を Property として持つ。</li> + <li>アンサイクロペディアの各ページをGraphDBで表す。</li> + <li>1Vertexが1つのページを表す。</li> + <li>各VertexはPageTitleとPageRankをPropertyとして持つ。</li> <li>リンクは "HAS_LINK" という関係で表される。</li> - <li>PageRank は double で初期値は 0.15 , 最大値はページ数*0.15</li> - <li>アンサイクロペディアでは URI はページタイトルと同じ。</li> - <li>URI に対してユニークな Vertex ID を割り振る。</li> + <li>PageRankはdoubleで初期値は 0.15 , 最大値はページ数*0.15</li> + <li>アンサイクロペディアではURIはページタイトルと同じ。</li> + <li>URIに対してユニークなVertexID を割り振る。</li> </ul> </article> <article> - <h3>TinkerPop による PageRank の計算</h3> + <h3>TinkerPopによるPageRankの計算</h3> <ul> - <li>○は Vertex を、→ は Edge を表す。</li> + <li>○はVertexを、→ はEdgeを表す。</li> <p class="center"> <img src="./pic/graph.png" style="height:70%;"> </p> @@ -451,31 +460,31 @@ </article> <article> - <h3>PageRank アルゴリズム</h3> + <h3>PageRankアルゴリズム</h3> <ul> - <li>PageRank は次の計算式で求めることができる。</li> + <li>PageRankは次の計算式で求めることができる。</li> <pre> PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))</pre> - <li>PR(A) は A というページの PageRank を表す。</li> + <li>PR(A) は A というページのPageRankを表す。</li> <li>d は定数で 0.85</li> <li>C(T1) は T1 というページがリンクを張っている数を表す。 </li> <li>T1...Tn は A をリンクしているページなので、C(T1)...C(Tn) は 0 にならない。</li> - <li>Google の PageRank はこれを改良したものである。</li> + <li>GoogleのPageRankはこれを改良したものである。</li> <!-- - <li>PageRank はリンクを張ってくるページの PageRank が加算される。 </li> - <li>この時加算される PageRank はリンクの数で割られた値となる。</li> + <li>PageRankはリンクを張ってくるページのPageRankが加算される。 </li> + <li>この時加算されるPageRankはリンクの数で割られた値となる。</li> --> </ul> </article> <article> - <h3>PageRank の取得</h3> + <h3>PageRankの取得</h3> <ul> - <li>TinkerPop 上で PageRank の値を出すために以下の2つの値が必要</li> + <li>TinkerPop上でPageRankの値を出すために以下の2つの値が必要</li> <ul> - <li>リンク("HasLink")の関係を張ってくる Vertex の取得</li> - <li>リンクしてくる Vertex がどれだけリンクを張っているかを取得</li> - <small><p>*各ページの情報は XML から取り出し Blueprints を用いて TinkerGraph に書き込み済み。</p></small> + <li>リンク("HasLink")の関係を張ってくるVertexの取得</li> + <li>リンクしてくるVertexがどれだけリンクを張っているかを取得</li> + <small><p>*各ページの情報はXMLから取り出しBlueprintsを用いてTinkerGraphに書き込み済み。</p></small> <p class="center"> <img src="./pic/page_rank.png" style="height:40%;"> </p> @@ -485,7 +494,7 @@ </article> <article> - <h3>Pipes による走査</h3> + <h3>Pipesによる走査</h3> <ul> <li>あるページへとリンクを張るページ(Vertex)の取得</li> <pre> @@ -494,7 +503,7 @@ pipe.start(graph.getVertex(id)); pipe.in("HasLink"); for (Object inVerObj : pipe) { - Vertex inVer = (Vertex)inVerObj; + VertexinVer = (Vertex)inVerObj; : } </pre> <p class="center"> @@ -502,10 +511,9 @@ </p> </ul> </article> - <article> - <h3>Pipes による走査</h3> + <h3>Pipesによる走査</h3> <ul> <li>あるページが張っているリンクの数の取得</li> <pre> @@ -522,17 +530,17 @@ </article> <article> - <h3>TinkerPop による PageRank の計算</h3> + <h3>TinkerPopによるPageRankの計算</h3> <ul> <pre> final double weight = 0.85; double sum = 0.0; double pageRank = 0.0; -Vertex v = graph.getVertex(id); +Vertexv = graph.getVertex(id); GremlinPipeline pipe = new GremlinPipeline(); pipe.start(graph.getVertex(id)).in("HasLink"); for (Object inVerObj : pipe) { - Vertex inVer = (Vertex) inVerObj; + VertexinVer = (Vertex) inVerObj; Object inVerId = inVer.getId(); GremlinPipeline inPipe = new GremlinPipeline(); inPipe.start(graph.getVertex(inVerId)).out("HasLink"); @@ -549,7 +557,7 @@ <article> <h3>計算結果</h3> <ul> - <li>アンサイクロペディア内で PageRank の高いページ</li> + <li>アンサイクロペディア内でPageRankの高いページ</li> <li>総ページ数: 242014 ページ</li> <table> <tr> @@ -591,9 +599,9 @@ </article> <article> - <h3>PageRank の計算にかかる時間</h3> + <h3>PageRankの計算にかかる時間</h3> <ul> - <li>PageRank は 10 回程の計算でほぼ収束した。</li> + <li>PageRankは 10 回程の計算でほぼ収束した。</li> <table> <td> <img src="./pic/pageRank.png" style="height:70%;"> @@ -602,12 +610,12 @@ <img src="./pic/computePageRank.png" style="height:70%;"> </td> </table> - <li>PageRank の計算は10回行うとして、ページ数に対してかかる時間を測ってみた。</li> + <li>PageRankの計算は10回行うとして、ページ数に対してかかる時間を測ってみた。</li> </ul> </article> <article> - <h3>PageRank の計算にかかる時間</h3> + <h3>PageRankの計算にかかる時間</h3> <ul> <li>各ページ数で行う10回計算をそれぞれ10回ずつタイムを測り平均をとった。</li> <table> @@ -649,7 +657,7 @@ <article> - <h3>PageRank の計算にかかる時間</h3> + <h3>PageRankの計算にかかる時間</h3> <ul> <img src="./pic/pageRankCompare.png"> </ul> @@ -658,36 +666,36 @@ <article> <h3>まとめ</h3> <ul> - <li>今回、TinkerPop を用いてアンサイクロペディアの各ページの PageRank を求めた。</li> - <li>各ページと Vertex, リンクの関係を Edge で表すことで各ページ間の関係を TinkerPop 上で表した。 </li> - <li>Gremlin を用いて各 Vertex を渡り歩ことで PageRank の計算を行った。</li> - <li>全 Vertex に対しての計算量は Vertex の数に比例していることが確認できた。 </li> + <li>今回、TinkerPopを用いてアンサイクロペディアの各ページのPageRankを求めた。</li> + <li>各ページとVertex, リンクの関係をEdgeで表すことで各ページ間の関係をTinkerPop上で表した。 </li> + <li>Gremlin を用いて各Vertexを渡り歩ことでPageRankの計算を行った。</li> + <li>全Vertexに対しての計算量はVertexの数に比例していることが確認できた。 </li> </ul> </article> <article> <h3>今日の勉強会で覚えておきたいこと</h3> <ul> - <li>Graph の関係を表すようなデータは GraphDB で表現しやすい。</li> - <li>GraphDB では Vertex 間を渡り歩く(Traverse)ことでデータの取得を行う。 </li> - <li>GraphDB は局所性のあるデータを高速に計算することができる。</li> + <li>Graph の関係を表すようなデータはGraphDBで表現しやすい。</li> + <li>GraphDBではVertex間を渡り歩く(Traverse)ことでデータの取得を行う。 </li> + <li>GraphDBは局所性のあるデータを高速に計算することができる。</li> </ul> </article> <article> <h3>参考文献・サイト</h3> <ul> - <small><li>[1] Google の秘密 - PageRank 徹底解説<br> + <small><li>[1]Googleの秘密 -PageRank徹底解説<br> <a href="http://homepage2.nifty.com/baba_hajime/wais/pagerank.html">http://homepage2.nifty.com/baba_hajime/wais/pagerank.html</a></li></small> - <small><li>[2] Lawrence Page, Sergey Brin, Rajeev Motwani, Terry Winograd, 'The PageRank Citation Ranking: Bringing Order to the Web', 1998,<br> + <small><li>[2] LawrencePage, Sergey Brin, Rajeev Motwani, Terry Winograd, 'ThePageRankCitation Ranking: Bringing Order to the Web', 1998,<br> <a href="http://www-db.stanford.edu/~backrub/pageranksub.ps">http://www-db.stanford.edu/~backrub/pageranksub.ps</a></li></small> - <small><li>[3] The PageRank Algorithm<br> + <small><li>[3] ThePageRankAlgorithm<br> <a href="http://pr.efactory.de/e-pagerank-algorithm.shtml">http://pr.efactory.de/e-pagerank-algorithm.shtml</a></li></small> - <small><li>[4] グラフデータベースを用いた PageRank 実装の試み:スケーラブルなグラフ処理系に向けて<br> + <small><li>[4] グラフデータベースを用いたPageRank実装の試み:スケーラブルなグラフ処理系に向けて<br> <a href="http://live-e.naist.jp/sensor_overlay/5/doc/hanai.pdf">http://live-e.naist.jp/sensor_overlay/5/doc/hanai.pdf</a></li></small> <!-- - <small><li>Taher H. Haveliwala, 'Efficient Computation of PageRank', Stanford Technical Report, 1999,<br> + <small><li>Taher H. Haveliwala, 'Efficient Computation ofPageRank', Stanford Technical Report, 1999,<br> <a href="http://dbpubs.stanford.edu:8090/pub/1999-31">http://dbpubs.stanford.edu:8090/pub/1999-31</a></li> --> </small> @@ -697,14 +705,14 @@ <article> - <h3>なぜ PageRank なのか</h3> + <h3>なぜPageRankなのか</h3> <ul> - <li>PageRank は Page と Page のリンクの有無を利用して計算できる。</li> - <li>GraphDB は Vertex と Vertex を結ぶ Edge を走査(Traverse)することで、 + <li>PageRankはPageとPageのリンクの有無を利用して計算できる。</li> + <li>GraphDBはVertexとVertexを結ぶEdgeを走査(Traverse)することで、 目的のデータを得るようなデータベースである。</li> - <li>また、GraphDB は局所性のあるデータを高速に計算することができる。 </li> - <li>PageRank の Page の関係は GraphDB の Vertex と Edge で表すことができる<li> - <li>また、Page の数が増えても局所的な計算ができるため GraphDB は PageRank + <li>また、GraphDBは局所性のあるデータを高速に計算することができる。 </li> + <li>PageRankのPageの関係はGraphDBのVertexとEdgeで表すことができる<li> + <li>また、Pageの数が増えても局所的な計算ができるためGraphDBはPageRank を求める DB に向いている。</li> </ul> </article>