<?xml version="1.0" encoding="utf-8" ?>


<?xml-stylesheet href="http://d.hatena.ne.jp/naoya/rssxsl" type="text/xsl" media="screen"?>


<rdf:RDF
	xmlns="http://purl.org/rss/1.0/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xml:lang="ja">
<channel rdf:about="http://d.hatena.ne.jp/naoya/rss">
	<title>naoyaのはてなダイアリー</title>
	<link>http://d.hatena.ne.jp/naoya/</link>
	<description>naoyaのはてなダイアリー</description>
	
	<dc:creator>naoya</dc:creator>
	<dc:date>2009-09-30T18:03:15+09:00</dc:date>
	<items>
	<rdf:Seq>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/naoya/20090930/1254301069"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/naoya/20090911/1252670407"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/naoya/20090910/1252567847"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/naoya/20090905/1252109184"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/naoya/20090804/1249380645"/>
	</rdf:Seq>
	</items>
</channel>



<item rdf:about="http://d.hatena.ne.jp/naoya/20090930/1254301069">
	<title> ソフトウェアアーキテクトが知るべき97のこと / 池袋ジュンク堂で鈴木雄介さん、小野和俊さんとイベント</title>
	<link>http://d.hatena.ne.jp/naoya/20090930/1254301069</link>
	<description> ”97 Things Every Software Architect Should Know” という洋書の邦訳が、”ソフトウェアアーキテクトが知るべき97のこと” (www.oreilly.co.jp, www.amazon.co.jp)というタイトルで 10月5日、オライリーから発売です。 ソフトウェアアーキテクトが知るべき97のこと 作者: Ric</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>"97 Things Every Software Architect Should Know" という洋書の邦訳が、"ソフトウェアアーキテクトが知るべき97のこと" (<a href="http://www.oreilly.co.jp/books/9784873114293/">www.oreilly.co.jp</a>, <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873114292/naoyadyndnsor-22/ref=nosim">www.amazon.co.jp</a>)というタイトルで 10月5日、オライリーから発売です。</p>
			<div class="hatena-asin-detail">
                                <a href="http://d.hatena.ne.jp/asin/4873114292/naoyadyndnsor-22"><img src="http://ecx.images-amazon.com/images/I/51pmeliK4bL._SL160_.jpg" class="hatena-asin-detail-image" alt="ソフトウェアアーキテクトが知るべき97のこと" title="ソフトウェアアーキテクトが知るべき97のこと"></a>
                                <div class="hatena-asin-detail-info">
                                        <p class="hatena-asin-detail-title"><a href="http://d.hatena.ne.jp/asin/4873114292/naoyadyndnsor-22">ソフトウェアアーキテクトが知るべき97のこと</a></p>
                                        <ul>
                                                <li><span class="hatena-asin-detail-label">作者:</span> <a href="http://d.hatena.ne.jp/keyword/Richard%20Monson%2dHaefel" class="keyword">Richard Monson-Haefel</a>, <a href="http://d.hatena.ne.jp/keyword/%ce%eb%cc%da%cd%ba%b2%f0" class="keyword">鈴木雄介</a>, <a href="http://d.hatena.ne.jp/keyword/%c4%b9%c8%f8%b9%e2%b9%b0" class="keyword">長尾高弘</a></li>
                                                <li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a href="http://d.hatena.ne.jp/keyword/%a5%aa%a5%e9%a5%a4%a5%ea%a1%bc%a5%b8%a5%e3%a5%d1%a5%f3" class="keyword">オライリージャパン</a></li>
                                                <li><span class="hatena-asin-detail-label">発売日:</span> 2009/10/05</li>
                                                <li><span class="hatena-asin-detail-label">メディア:</span> 単行本（ソフトカバー）</li>
                                                       <li><span class="hatena-asin-detail-label">購入</span>: 5人 <span class="hatena-asin-detail-label">クリック</span>: 139回</li>
                                                       <li><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873114292/naoyadyndnsor-22/" target="_blank">Amazon.co.jpで詳細を見る</a></li>
                                        </ul>
                                </div>
                                <div class="hatena-asin-detail-foot"></div>
                        </div>

			<p>第一線で活躍するソフトウェア・アーキテクト達が、独自の視点でアーキテクトという職業やソフトウェア開発にまつわる事柄についてのエッセイをそれぞれ執筆、それが 97 本あるというコラム集です。</p>
			<p>邦訳版では、日本人のアーキテクト、開発者による書き下ろしが収録されています。監訳者の鈴木雄介さん (<a href="http://www.arclamp.jp/">arclamp.jp</a>) からのお誘いで、自分も「手段的な技術と陳腐化しない本質的な技術」という題のコラムを一本書かせていただきました。</p>
			<h4> 10月17日(土)、出版記念トークイベントを池袋ジュンク堂にて</h4>
			<p>書籍の出版を記念したトークイベントが、10月17日(土) の 19:00 から、池袋ジュンク堂で開催されます。</p>
			<ul>
				<li> <a href="http://www.junkudo.co.jp/newevent/evtalk.html#20091017ikebukuro" target="_blank">http://www.junkudo.co.jp/newevent/evtalk.html#20091017ikebukuro</a></li>
			</ul>
			<p>鈴木雄介さん、それから私と同じく執筆者の <a href="http://blog.livedoor.jp/lalha">小野和俊さん</a> と 3名で、書籍のテーマに沿った形でのトークセッションを行う予定です。</p>
			<p>近所にお住まいでお時間のある方は、よろしければご来場くださいませ。なお、来場にあたっては電話もしくは来店での予約が必要とのことですので、リンク先を参照の上お問い合わせください。</p>
		</div>
]]></content:encoded>
	<dc:creator>naoya</dc:creator>
	<dc:date>2009-09-30T17:57:49+09:00</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/naoya/20090911/1252670407">
	<title> YAPC::Asia 2日目 「はてなブックマークのシステムについて」</title>
	<link>http://d.hatena.ne.jp/naoya/20090911/1252670407</link>
	<description> 2日目の発表も終えました。資料を公開します。 はてなブックマークのシステムについてView more presentations from Naoya Ito. 今日も少し駆け足気味でした。YACP::Asia 2009、今年も楽しかったです。Hackathon 出ずに京都に戻らなければならなかったのが悔やまれます。 発</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>2日目の発表も終えました。資料を公開します。</p>
			<p><div style="width:425px;text-align:left" id="__ss_1983437"><a href="http://www.slideshare.net/naoya1977/ss-1983437" style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="はてなブックマークのシステムについて">はてなブックマークのシステムについて</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=hatenabookmarkyapc2009-090911065220-phpapp01&stripped_title=ss-1983437" ></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=hatenabookmarkyapc2009-090911065220-phpapp01&stripped_title=ss-1983437" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a href="http://www.slideshare.net/" style="text-decoration:underline;">presentations</a> from <a href="http://www.slideshare.net/naoya1977" style="text-decoration:underline;">Naoya Ito</a>.</div></div></p>
			<p>今日も少し駆け足気味でした。YACP::Asia 2009、今年も楽しかったです。Hackathon 出ずに京都に戻らなければならなかったのが悔やまれます。</p>
			<h4> 発表の様子</h4>
			<p><a href="http://f.hatena.ne.jp/naoya/20090912072506" class="hatena-fotolife" target="_blank"><img src="http://f.hatena.ne.jp/images/fotolife/n/naoya/20090912/20090912072506.jpg" alt="f:id:naoya:20090912072506j:image:w500" title="f:id:naoya:20090912072506j:image:w500" class="hatena-fotolife" width="500"></a></p>
			<p>撮影: <a href="http://d.hatena.ne.jp/hirose31/">id:hirose31</a></p>
		</div>
]]></content:encoded>
	<dc:creator>naoya</dc:creator>
	<dc:date>2009-09-11T21:00:07+09:00</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/naoya/20090910/1252567847">
	<title> YAPC::Asia 2009 1日目 「Perlで圧縮」の資料</title>
	<link>http://d.hatena.ne.jp/naoya/20090910/1252567847</link>
	<description> 1日目の発表を終えました。資料を公開します。 Perlで圧縮View more presentations from Naoya Ito. 発表の方は少し駆け足になってしまいました。明日ははてなブックマークのシステム事例の話をしたいと思います。 発表の様子 via: http://yapcasia2009.ficia.com/ </description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>1日目の発表を終えました。資料を公開します。</p>
			<p><div style="width:425px;text-align:left" id="__ss_1976750"><a href="http://www.slideshare.net/naoya1977/perl-1976750" style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Perlで圧縮">Perlで圧縮</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=perlcompression-090910022349-phpapp01&stripped_title=perl-1976750" ></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=perlcompression-090910022349-phpapp01&stripped_title=perl-1976750" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a href="http://www.slideshare.net/" style="text-decoration:underline;">presentations</a> from <a href="http://www.slideshare.net/naoya1977" style="text-decoration:underline;">Naoya Ito</a>.</div></div></p>
			<p>発表の方は少し駆け足になってしまいました。明日ははてなブックマークのシステム事例の話をしたいと思います。</p>
			<h4> 発表の様子</h4>
			<p><img width="500" src="http://yapcasia2009.pst.ficia.com/m/Xr0LoV6j3hGyL2XiqAW5CQ.jpg"></p>
			<p>via: <a href="http://yapcasia2009.ficia.com/" target="_blank">http://yapcasia2009.ficia.com/</a></p>
		</div>
]]></content:encoded>
	<dc:creator>naoya</dc:creator>
	<dc:date>2009-09-10T16:30:47+09:00</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/naoya/20090905/1252109184">
	<title> YAPC::Asia 2009</title>
	<link>http://d.hatena.ne.jp/naoya/20090905/1252109184</link>
	<description> 来週 9月10, 11日は、東京は東工大で開催される YAPC::Asia 2009 に行く予定です。スピーカーとして2枠、いただきました。 9月10日 「Perlで圧縮」 10日には Perlで圧縮 と題して、データ圧縮の概論と Perl でデータ圧縮を行うに当たっての TIPS 的なところを紹介します。こ</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>来週 9月10, 11日は、東京は東工大で開催される <a href="http://conferences.yapcasia.org/ya2009/">YAPC::Asia 2009</a> に行く予定です。スピーカーとして2枠、いただきました。</p>
			<h4> 9月10日 「Perlで圧縮」</h4>
			<p>10日には <a href="http://conferences.yapcasia.org/ya2009/talk/2211">Perlで圧縮</a> と題して、データ圧縮の概論と Perl でデータ圧縮を行うに当たっての TIPS 的なところを紹介します。ここのところなぜかデータ圧縮の魅力に取り憑かれてしまいまして、今回も思わず圧縮の話を submit してしまいました。</p>
			<p>データ圧縮は、データの保存領域コストを節約するという目的だけなく、I/O 性能を向上させるという観点でも重要です。圧縮を行いたい場合、多くの場合はよく枯れたオープンな実装を用いるだけで事足りるとは思いますが、各種実装の使い分け基準はそれほど自明ではありません。また場合によっては、そのアプリケーションに特化した圧縮実装を自前で用意するといったことも検討に値します。その辺も含めて、Perl でのケースを絡めながら 20分ほどお話できればと思っています。</p>
			<h4> 9月11日 「はてなブックマークのシステムについて」</h4>
			<p>11日には <a href="http://conferences.yapcasia.org/ya2009/talk/2198">はてなブックマークのシステムについて</a> 紹介します。</p>
			<p>はてなブックマークは昨年11月25日に大規模なリニューアルを行いました。リニューアルにあたってはシステムの再構築を行っています。あれから半年とちょっとが経ちましたが、その運用期間で得られた新しいノウハウや知見、また新機能開発で用いた手法なども含めて、Perl で組まれた中~大規模システムのひとつの事例として紹介できればと思っています。こちらは 40分のセッションです。</p>
		</div>
]]></content:encoded>
	<dc:creator>naoya</dc:creator>
	<dc:date>2009-09-05T09:06:24+09:00</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/naoya/20090804/1249380645">
	<title> γ符号、δ符号、ゴロム符号による圧縮効果</title>
	<link>http://d.hatena.ne.jp/naoya/20090804/1249380645</link>
	<description> 通常の整数は 32 ビットは 4 バイトの固定長によるバイナリ符号ですが、小さな数字がたくさん出現し、大きな数字はほとんど出現しないという確率分布のもとでは無駄なビットが目立ちます。 Variable Byte Code (Byte Aligned 符号とも呼ばれます) は整数の符号化手法の一つ</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>通常の整数は 32 ビットは 4 バイトの固定長によるバイナリ符号ですが、小さな数字がたくさん出現し、大きな数字はほとんど出現しないという確率分布のもとでは無駄なビットが目立ちます。</p>
			<p>Variable Byte Code (Byte Aligned 符号とも呼ばれます) は整数の符号化手法の一つで、この無駄を幾分解消します。詳しくは Introduction to Information Retrieval (以下 IIR) の第5章に掲載されています。(<a href="http://nlp.stanford.edu/IR-book/html/htmledition/variable-byte-codes-1.html" target="_blank">http://nlp.stanford.edu/IR-book/html/htmledition/variable-byte-codes-1.html</a> で公開されています) Variable Byte Code はその名の通りバイトレベルの可変長符号で、1バイトの先頭1ビットを continuation ビットとして扱い、続く 7 ビットでバイナリ符号を行います。小さな数字を 1 バイトで表現し、大きな数字でも複数バイトで表現できる符号化手法です。</p>
			<p>例として 5 や 130 といった数値を符号化するとそれぞれ</p>

			<table>
				<tr><th>数値</th><th>固定長バイナリ符号</th><th>Variable Byte Code</th></tr>
				<tr><td>5</td><td>00000000 00000000 00000000 00000101</td><td>10000101</td></tr>
				<tr><td>130</td><td>00000000 00000000 00000000 10000010</td><td>00000001 10000010</td></tr>

			</table>
			<p>となって、固定長符号では上位の3バイトが無駄になりがちなところ、Variable Byte Code では無駄が少ないことが分かります。</p>
			<p>このように整数の符号化手法によっては小さな数字をより小さな符号長で表現することができ、結果として圧縮効果が得られます。Variable Byte Code 以外にもγ符号やδ符号、ゴロム符号など整数の符号化には多数の手法があります。そしてそれらの手法でなぜ圧縮効果が得られるのか、というところを見ていこうというのが今回の話の主旨です。</p>
			<h4> 検索エンジンの転置インデックスを圧縮する</h4>
			<p>例えば検索エンジンの転置インデックスでは、文書IDを整数で扱い、整数の並びで索引を表現します。「perl という単語が含まれる文書は [ 3, 5, 20, 21, 23, 76, 77, 78 ... ] です」という具合です。これらの整数を符号化するのに固定長バイナリ符号ではなく、ちょっとした前処理を施してから Variable Byte Code を使うと圧縮効果が得られます。</p>
			<p>ちょっとした前処理というのは、文書ID をそのまま使うのではなく、前の数字との差分で同じリストを表現するように変形してやります。[ 3, 5, 20, 21, 23, 76, 77, 78 ] → [ 3, 2, 15, 1, 2, 53, 1, 1 ] です。こうしてやると小さな数字がたくさん出現するようになります。全体として小さな数字の出現確率が高ければ Variable Byte Code で圧縮効果が得られるのは直感的に分かります。</p>
			<h4> ビットレベルの符号化 ・・・ γ符号, δ符号</h4>
			<p>ところで Variable Byte Code はバイトレベルの符号化なので、どんなに小さな数字でも 1 バイトは 8 ビット未満にまで小さくして表現することはできません。バイトレベルではなくビットレベルでの整数の符号化手法は多数ありますが、ポピュラーなのは γ符号, δ符号でしょうか。</p>
			<p>γ符号は整数 x を、</p>
			<ul>
				<li> 1 + floor(log x) を unary 符号で</li>
				<li> x - 2<sup>floor(log x)</sup> をバイナリ表現した floor(log x) ビットで</li>
			</ul>
			<p>する符号化手法です。unary 符号は 1 を 3 を 110, 4 を 1110, 5 を 11110 ... とビットの立っている数で整数を表現する符号化手法です。γ符号における unary 符号部は、続くバイナリ部分のビット数を表現します。</p>
			<p>これだけだとよくわからないので、Managing Gigabytes (以下 MG) にある γ符号の例を示します。x = 9 の場合</p>
			<ul>
				<li> floor(log x) = 3 より、1 + floor(log x) = 4 → 4 を unary 符号で符号化 → 1110 (これはバイナリ部分が 3 ビットであることを示す)</li>
				<li> 9 - 2<sup>floor(log 9)</sup> = 9 - 2<sup>3</sup> = 9 - 8 = 1 → 1 を 3 ビットで表現 → 001</li>
			</ul>
			<p>となり、結果として 9 は 1110 001 というビット列で符号化されます。</p>
			<p>一方の δ符号はγ符号で unary 符号を使うところを、γ符号で符号化したものです。それぞれの手法で小さな整数がどのように符号化されるかを以下に示します。MG の P.117 は Table 3.6 から引用します。</p>

			<table>
				<tr><th>整数 x</th><th>unary符号</th><th>γ符号</th><th>δ符号</th></tr>
				<tr><td>1</td><td>0</td><td>0</td><td>0</td></tr>
				<tr><td>2</td><td>10</td><td>10 0</td><td>100 0</td></tr>
				<tr><td>3</td><td>110</td><td>10 1</td><td>100 1</td></tr>
				<tr><td>4</td><td>1110</td><td>110 00</td><td>101 00</td></tr>
				<tr><td>5</td><td>11110</td><td>110 01</td><td>101 01</td></tr>
				<tr><td>6</td><td>111110</td><td>110 10</td><td>101 10</td></tr>
				<tr><td>7</td><td>1111110</td><td>110 11</td><td>101 11</td></tr>
				<tr><td>8</td><td>11111110</td><td>1110 000</td><td>11000 000</td></tr>
				<tr><td>9</td><td>111111110</td><td>1110 001</td><td>11000 001</td></tr>
				<tr><td>10</td><td>1111111110</td><td>1110 010</td><td>11000 010</td></tr>

			</table>
			<p>となります。γ符号、δ符号両者ともに、小さな数字は 8 ビット以下で表現できていることが分かります。</p>
			<p>ロイターのニュース記事を集めた <a href="http://www.daviddlewis.com/resources/testcollections/rcv1/">RCV1</a> のような一般的な文書コーパスを対象に転置インデックスを構築した際は Variable Byte Code よりもγ符号、δ符号で文書IDを符号化する方が全体として圧縮率は高いそうです。IIR の第5章によれば、RCV1 の転置インデックス (の postings file) は  32 ビット固定のバイナリ符号で 400MB になるところ、Variable Byte Code で 116 MB、γ符号で 101 MB になるそうです。</p>
			<h4> なぜγ符号やδ符号で圧縮されるのか</h4>
			<p>それで、γ符号やδ符号のあらましは分かったのですが、なぜこれらの符号でそのような圧縮効果が得られるのかがしばらく理解できていませんでした。今回改めて MG の第3章を読んで理解したことを記します。</p>
			<p>ポイントになるのは固定長バイナリ符号、γ符号やδ符号をはじめとする整数の符号化が、暗黙的に確率モデルを内包しているという所です。以下、そこを見ていきます。</p>
			<p>γ符号、δ符号共に、整数 x が分かると符号長 l<sub>x</sub> が分かります。γ符号は unary 符号部が 1 + logx, バイナリ部分が logx なので 2logx + 1 ビット, δ符号はγ符号の unary 符号部をγ符号に変えたものなので、そこから定式化できます。</p>
			<ul>
				<li> γ符号 : l<sub>x</sub> = 1 + 2logx ビット</li>
				<li> δ符号: l<sub>x</sub> = 1 + logx + 2log(1 + log x) ビット</li>
			</ul>
			<p>となります。x に対する符号長が定式化できるとあとはシャノンの情報量の式 l<sub>x</sub> = -log Pr[x] から、符号確率 Pr[x] は Pr[x] = 2<sup>-l<sub>x</sub></sup> として求められます。この式から多少の近似を用いて導くと</p>
			<ul>
				<li> γ符号: Pr[x] = 1 / 2x<sup>2</sup></li>
				<li> δ符号: Pr[x] = 1 / 2x(logx)<sup>2</sup></li>
			</ul>
			<p>という分布が得られます。これが各符号が暗に持つ確率分布です。</p>
			<p>ギャップリストを固定長バイナリ符号で表現した場合よりも、これらの符号で符号化した方が圧縮できるということは、この各符号の確率分布がギャップリストにより適した分布になっている、と言えそうです。実際には、ギャップリストが持つ実際の確率分布と各符号化手法が暗黙に持つ確率分布の違いが小さければ小さいほど、最適な符号長となります。<a href="http://en.wikipedia.org/wiki/Universal_code_(data_compression)">Wikipedia の Univeral code</a> によれば、二つの確率分布の距離は Kullback-Leibler ダイバージェンス (KLダイバージェンス) で定量化することができて、この値が小さいほど最適な符号長に近づくとのことです。</p>
			<p>"Universal code" (ユニバーサル符号) という言葉が出てきました。<span class="footnote"><a href="/naoya/#f1" name="fn1" title="ユニバーサル符号と日本語で書くと、LZ法などの&#34;入力データが長くなるにつれて圧縮率が情報源のエントロピーに収束するという性質を有する符号&#34; (http://www.it.ss.titech.ac.jp/uyematsu/intro-j.html より) の意味のこともあるようですが、英語でははこちらは Universal source coding と呼ぶようです。Wikipedia にも両者を混同しないように、とあります">*1</a></span> 整数の符号化の文脈でユニバーサル符号というのは、確率分布が monotonic (整数を i としたとき Pr[i] ≧ Pr[i + 1] ・・・ つまり、大きい数ほど出現確率が下がる) な分布のとき、その分布が実際にはどんな分布であるかに関わらず、最適な符号の定数倍程度の長さの符号長に符号化できる符号化手法だそうです。γ符号やδ符号はユニバーサル符号です。Wikipedia によると、ユニバーサル符号の分布は冪上則な分布 1/n<sup>2</sup> に近似することができて、この分布に対してはユニバーサル符号が最適に近い符号長を実現することが分かっています。IIR 5章によると、γ符号はギャップリストをエントロピーの 2 ~ 3 倍程度に抑えることができるそう。</p>
			<p>まとめます。γ符号やδ符号は暗黙的に確率モデルを内包していて、それがギャップリストを表現するのにより適した確率分布となり、結果として圧縮効果が得られます。また、ユニバーサル符号としてのγ符号、δ符号は実際の確率分布がわからなくても、符号長を最適な平均符号長の定数倍に収められるという特徴を持っています。ですから、ギャップリストが実際にどのような分布になっているかは分からなくても、γ符号やδ符号で符号化すると、とにかく結構な圧縮率で圧縮できるというわけです。</p>
			<h4> 幾何分布に最適なゴロム符号</h4>
			<p>ユニバーサル符号は実際の確率分布に関わらず圧縮を実現するのですが、ギャップリストの実際の確率分布を仮定して、その確率分布に適したモデルを考えるとどうなるでしょう。転置インデックスのギャップリストはベルヌーイ試行でモデル化することができ、その結果として確率分布は幾何分布 (<a href="http://ja.wikipedia.org/wiki/%E5%B9%BE%E4%BD%95%E5%88%86%E5%B8%83">ja.wikipedia.org</a>) になります。</p>
			<p>このモデル化に関しては、MG 輪読会で <a href="http://d.hatena.ne.jp/sleepy_yoshi/">id:sleepy_yoshi</a> さんの説明が分かりやすかったです。 [ 4, 3, ... ] というギャップリストは、4 が出た後、5, 6 が出ないで、7 が出たということを示します。これを定式化すると、ある単語が確率 (1-p) の確率で x - 1 回出現せず、その後に確率 p で単語が 1 回出現する確率 Pr[x] = (1-p)<sup>x-1</sup>p となって、幾何分布となります。</p>
			<p>そして幾何分布に対して最適な符号長を達成する符号化手法としてゴロム符号 (<a href="http://en.wikipedia.org/wiki/Golomb_coding">en.wikipedia.org</a>) が良く知られています。MG によるとこれは参考文献 [5] で証明されているとのことです。ゴロム符号はパラメータフリーなγ符号やδ符号とは異なり、符号長を調整するためのパラメータが必要になります。このパラメータは転置インデックスの場合、全体の文書数や単語の数から求めることができます。よって、ギャップリストを圧縮するのに、ゴロム符号は良い選択肢となります。</p>
			<p>MG 第3章の途中までですが、整数の符号化によって圧縮効果が得られる云々、というのはこんなところになります。</p>
			<h4> まとめ</h4>
			<p>整数の符号化手法によってギャップリストを圧縮するにあたって、なぜそれで圧縮されるのかを見てきました。</p>
			<p>整数の符号化手法は他にも色々あるのですが、ここでは自分がよく目にする Variable Byte Code、γ符号、δ符号、ゴロム符号について見てきました。整数の符号化が面白いのは、符号化対象が整数であるという特徴から、符号化の手法そのものが暗黙のうちに確率モデルを規定するというところです。この確率モデルが与える確率分布によって、どの程度の符号長で整数群が表現できるかが決まり、それが結果として最適に近い分布であるほど圧縮効果が得られるということでした。</p>
			<div class="hatena-asin-detail">
                                <a href="http://d.hatena.ne.jp/asin/1558605703/naoyadyndnsor-22"><img src="http://ecx.images-amazon.com/images/I/41HKJYHTQDL._SL160_.jpg" class="hatena-asin-detail-image" alt="Managing Gigabytes: Compressing and Indexing Documents and Images, Second Edition (The Morgan Kaufmann Series in Multimedia Information and Systems)" title="Managing Gigabytes: Compressing and Indexing Documents and Images, Second Edition (The Morgan Kaufmann Series in Multimedia Information and Systems)"></a>
                                <div class="hatena-asin-detail-info">
                                        <p class="hatena-asin-detail-title"><a href="http://d.hatena.ne.jp/asin/1558605703/naoyadyndnsor-22">Managing Gigabytes: Compressing and Indexing Documents and Images, Second Edition (The Morgan Kaufmann Series in Multimedia Information and Systems)</a></p>
                                        <ul>
                                                <li><span class="hatena-asin-detail-label">作者:</span> <a href="http://d.hatena.ne.jp/keyword/Ian%20H%2e%20Witten" class="keyword">Ian H. Witten</a>, <a href="http://d.hatena.ne.jp/keyword/Alistair%20Moffat" class="keyword">Alistair Moffat</a>, <a href="http://d.hatena.ne.jp/keyword/Timothy%20C%2e%20Bell" class="keyword">Timothy C. Bell</a></li>
                                                <li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a href="http://d.hatena.ne.jp/keyword/Morgan%20Kaufmann" class="keyword">Morgan Kaufmann</a></li>
                                                <li><span class="hatena-asin-detail-label">発売日:</span> 1999/05/15</li>
                                                <li><span class="hatena-asin-detail-label">メディア:</span> ハードカバー</li>
                                                       <li><span class="hatena-asin-detail-label">購入</span>: 3人 <span class="hatena-asin-detail-label">クリック</span>: 1回</li>
                                                       <li><a href="http://www.amazon.co.jp/exec/obidos/ASIN/1558605703/naoyadyndnsor-22/" target="_blank">Amazon.co.jpで詳細を見る</a></li>
                                        </ul>
                                </div>
                                <div class="hatena-asin-detail-foot"></div>
                        </div>

			<h4> 参考文献, URL</h4>
			<ul>
				<li> [1] C. D. Manning, P. Raghavan, H. Schutze , <i><a href="http://d.hatena.ne.jp/asin/0521865719/naoyadyndnsor-22">Introduction to Information Retrieval</a></i>, Cambridge University Press, 2008</li>
				<li> [2] Ian H. Witten, Alistair Moffat, Timothy C. Bell, <i><a href="http://d.hatena.ne.jp/asin/1558605703/naoyadyndnsor-22">Managing Gigabytes: Compressing and Indexing Documents and Images</a></i>, Morgan Kaufmann Publisher, 1999</li>
				<li> [3] <i><a href="http://en.wikipedia.org/wiki/Universal_code_(data_compression)">Universal code (data compression)</a></i>, Wikipedia</li>
				<li> [4] Gallager, R. van Voorhis, <i>Optimal source codes for geometrically distributed integer alphabets</i>, IEEE Transactions on Information Theory, 1975</li>
				<li> [5] 広井誠, <i><a href="http://www.geocities.jp/m_hiroi/light/pyalgo30.html">Algorithms with Python / 整数の符号化</a></i>, 2007</li>
				<li> [6] 岡野原大輔, "圧縮アルゴリズムの基礎・応用・実例", C Magazine 2006年 1月号, ソフトバンククリエイティブ</li>
			</ul>
			<p>[1] の第5章で、転置インデックスの圧縮の話があります。Variable Byte Code とγ符号についての解説が中心です。[2] でも同様に転置インデックスの圧縮として整数の符号化が解説されています。[2] の解説の方がより濃度は濃いです。[3] にはユニバーサル符号について概要があります。[4] ではゴロム符号が、幾何分布に対して最適な符号長を与えることについて言及されているそうです。(未読です)</p>
			<p>[5], [6] には各種整数符号化の実装方法があります。[5] には Python による実装、[6] には C++ のそれが記載されています。Perl による拙作の習作は <a href="http://d.hatena.ne.jp/naoya/20081015/1224084885">id:naoya:20081015:1224084885</a> などをご覧ください。</p>
		</div>
		<div class="footnote">
			<p class="footnote"><a href="/naoya/#fn1" name="f1">*1</a>：ユニバーサル符号と日本語で書くと、LZ法などの&#34;入力データが長くなるにつれて圧縮率が情報源のエントロピーに収束するという性質を有する符号&#34; (<a href="http://www.it.ss.titech.ac.jp/uyematsu/intro-j.html" target="_blank">http://www.it.ss.titech.ac.jp/uyematsu/intro-j.html</a> より) の意味のこともあるようですが、英語でははこちらは Universal source coding と呼ぶようです。Wikipedia にも両者を混同しないように、とあります</p>
		</div>
]]></content:encoded>
	<dc:creator>naoya</dc:creator>
	<dc:date>2009-08-04T19:10:45+09:00</dc:date>
</item>
</rdf:RDF>
