ハードフォークはブロックチェーン社会でWait&See

Vitalik Buterinによるブロックチェーンのフォークについてのブログ解説、その2回目。毎回謎のタイトルが付いてますが気にしないでください。今回は、2つ目のHRタグまでの内容です。

if a change is non-contentious, then it can generally be done safely no matter what the format of the fork is.

前のパートでハードフォークが批判される理由が挙げられました。Vitalik先生はそれに異を唱えます。議論が巻き起こらないような変更内容なら、ハードフォークだろうとソフトフォークだろうと安全に行われるといってます。ハードフォークが常態化した現状を見れば、妥当とされるハードフォークというものの存在が分かると思います。

ハードフォークが批判されるとき、強制的だといわれることがある。だけど、ソフトでもハードでも、変更内容に100%のユーザーが同意しないなら、「それを望まないユーザーがいる変更」をすることになるのです。ネットワークやブロックチェーンのネットワーク効果の世界では、自分たちの好みや意見よりもマジョリティの参加しているネットワークに参加せざるを得なくなるわけです。ハードフォークかソフトフォークかで強制かどうかが決まるわけではないのです。あくまで

仕様変更の内容

次第ということになります。

However, there is an essential difference between hard forks and soft forks: hard forks are opt-in, whereas soft forks allow users no “opting” at all. In order for a user to join a hard forked chain, they must personally install the software package that implements the fork rules, and the set of users that disagrees with a rule change even more strongly than they value network effects can theoretically simply stay on the old chain – and, practically speaking, such an event has already happened.

ハードフォークとソフトフォークの違いは強制か非強制かではなく、「オプトイン型」か「選択の余地なし」かです。ハードフォークしたチェーンに同意するユーザーは、新しいソフトウェアをインストールする必要があります。ネットワーク効果よりも自分の意見や好みを重視したいユーザーは、古いチェーンにい続ければいいだけです。後者はEthereum Clasicとして実際に存在します。

 In the case of soft forks, however, if the fork succeeds the unforked chain does not exist. Hence, soft forks clearly institutionally favor coercion over secession, whereas hard forks have the opposite bias.

ソフトフォークした場合、分岐したチェーンなどないので、問答無用で新プロトコルのチェーン上にい続けなければなりません。もしくは完全に参加を止めるか。これこそが、字義通りの強制に他ならないわけです。ハードフォークには脱退して好きな道を歩く自由があります。最近流行った「好きなことをして稼ぐ」みたいなことを実現するフォークだということです。

ハードフォークが強制だといわれるのは、ソフトウェアのインストールしなおしが必須だからだと、Vitalikはいってます。ソフトフォークなら、そのまま同じツールを使い続けられますからね。だけど、ツールの使い方に目が行きがちな鉄器ーじゃなかったwテッキーなあなた。大切なのはツールの使い方じゃない。受け入れたくないことを強制されるかどうかなのです。

これを書いていて、宇多田ヒカルのリスクが脳内に流れてきました。

懐かしいですね~。15年以上も昔ですか。

変えられないものを受け入れる力 そして受け入れられないものを変える力をちょうだいよ。

ニーバーの祈りから採ったといわれるこのフレーズ。ハードフォークこそ、この力を与えたもうフォークなのです。

ハードフォークはブロックチェーン社会で義経を逃す

日本人の判官びいきの源流、義経と弁慶をソフトフォークが殺す・・・。

弁慶のドット絵

 

妙な書き出しで始まりましたが、Ethereumのフォークについての話です。

最近はハードフォークが当たり前で、以前の大騒ぎは何だったのかという感じです。つい1年前までは、ハードフォークさせるなんて非国民、いや非ブロックチェーン民のような雰囲気が、日本国内ではありました。何故なら、非中央集権とはなんだったのか的な思想的な理由。

日本国内というのがミソで、海外の専門家はそう考える人ばかりではなさそうなんですよ。Ethereum開発者のVitalik Buterinも、ハードフォーク支持者です。今年の3月に、次のようなブログエントリを上げています。

この中でVitalikは、ソフトフォークが正義という考え方が誤解に基づいていると説いています。上の段落から順に解説してみます。今回は、最初の<hr>タグまで。

まず、ソフトフォークとハードフォークが端的にどういうことをするのか、分かりやすい言葉で説明があります。

ソフトフォーク
valid とみなす transaction を減らすやり方。アップグレードなしでも、チェーン上にい続けることができる
ハードフォーク
フォーク 前まで invalid だった トランザクション も valid とするかもしれないので、ユーザーは フォークしたチェーンの上にいたければ、クライアントアップグレードが必要。

ということです。とても分かりやすいと思います。そして、ハードフォークにも2種類あるということです。

Strictly Expanded Hard Fork
validとみなされるトランザクションを拡張するハードフォーク。フォーク前のルールは、フォーク後のルールのソフトフォークにあたる
Bilateral Hard Fork
互換性のない2つのルールに分岐するハードフォーク

THE DAO事件の例でいえば、次のようになるかと思います。

ソフトフォーク
アタッカーのアドレス対象のトランザクションが、validではなくなる。現実には採用されなかった
ハードフォーク
実際にBilateral Hard Forkとして採用された。ETH/ETCとして2つのルールに分裂した

次に、ハードフォーク・ソフトフォークそれぞれの利点といわれるものが列挙されます。

ハードフォーク
  • 開発者が互換性の憂いなく存分に振るえる
ソフトフォーク
  • ユーザーに優しい。だってアップグレードが必要ないから
  • チェーンの分裂を起こしにくいから優れてる
  • miner と validator の同意さえ得れば済む。ハードフォークはユーザーのオプトインが必要。

と、ソフトフォークの利点ばかりが取り上げられがちなのに加えて、ハードフォーク支持者は”乗っ取りを企てている”と批判されたりすると、Vitalikはいいます。あるいは、チェーンの分岐を招くから悪いことだといわれると。確かにビットコインゴールドなど、乗っ取りしたかったかのようなハードフォークは存在します。しかし、それは絶対に防ぐべきことなのでしょうか?リアルワールドでは、善悪は白黒簡単にスイッチのように決められているでしょうか?

なんだか悪いようなことをする人たちにも人権はあるんではないだろうか?その「悪」の行為も、もしかして思わぬ副産物を生んだりするんではないだろうかという視点はいりませんか。政治とか社会って、そんなに単純に正義が決まるもんではない。そもそも、OSSにも息づくハッカー精神てのは、そういう態度のはずだったのでは???善とか悪の背後にある仕組みをハックして明らかにし、改造してしまえ!って態度だったはず。

私は、ブロックチェーンやスマートコントラクトでカッチリした契約社会になるのが、嫌なんですよ。そういう社会になると・・・

弁慶が勧進帳を偽造して義経を逃がせない、血も涙も物語性もない社会ということになるから

てめえらの血は何色だ!判官びいきの精神はどこへ行った!w

続く。

Block Gas Limitの設定の反映

前回のエントリで、Ethereumのブロックサイズを決めるBlock Gas Limit(BGL)はマイナーの投票で決められると書きました。しかし、投票結果がどう実際のブロックに反映されるのかがわからなかった。

そうしたら、偶然ピンポイントな回答が書いてあるエントリが見つかりました(感謝)

どうやら、「最新のブロックの採掘に成功したマイナーの設定が、次のブロックのBGLとして採用される」という仕様らしいです。そして、1回で動かせるのは前回のBGLの1/1024だけらしいです。増加に投票することも減少に投票することもできるようです。

ここで、マイニングプールの投票行動を知ることができます。

https://www.etherchain.org/tools/gasLimitVoting

表中の項目は推測ですが、左から

  • Vote Up リミット増加に投票した回数
  • Vote Down 同じく現象への投票回数
  • Largest Upvote 増加へ投票して最大どれだけのガスリミットになったか。
  • Lowest Downvote 同じく減少へ投票して最小どれだけのガスリミットになったか

と思われます。

現状、BGLは800万程度で推移しているようです。

アタックがあるとマイナーにBGLを変化させる要請があったりするようです。

Ethereumがトランザクションの過半数を占めているらしい

ビットコインはスケーラビリティの問題に行き当たっており、その解決のためブロックサイズをどうするかという論争が延々と続きました。そして、方針の違いからハードフォークを起こしました。いまではハードフォークは、スケーラビリティと無関係の動機からも起る様になっています。

ビットコインとその分派のブロックサイズ

下記のようになっています。

  • ビットコインアンリミテッド 可変(市場にゆだねる)
  • ビットコインコアのSegWit導入 (ブロックウェイトが4Mまで)
  • ビットコインクラシック 2M
  • ビットコインキャッシュ 8M

最近ハードフォークしたゴールドなどについては調べてないのですが、ブロックサイズとスケーラビリティというのは、厄介な問題であり続けてきたわけです。

じゃあ、Ethereumはどうなのか?Contractに欠陥があって大金が盗まれたりしていますし(これはスケーラビリティと無関係)、最近はICOがあると混雑することもあるようです。しかし、ビットコインのようには騒ぎになっていないように見えます。

ここを見ると、驚いたことに暗号通貨のトランザクションの過半数をEthreumのトランザクションが占めていることになってます。ちょっと驚きました。Ethereumがどうして多くのトランザクションをさばけているのか?スケーラビリティでビットコインのような論争に陥っていないのはどうしてなのか?とても興味の沸くところです。

やはりブロックサイズがスケーラビリティにとって影響の大きなところなので、Ethereumのブロックサイズがどうなっているか調べました。

Block Gas Limit

結論からいうと、Ethereum にはBlock Gas Limit というものが存在します。Gas Limitには2種類あって、それは Transaction Gas Limit と Block Size Gas Limit です。

Transaction Gas Limit
ユーザーがトランザクションをEthereumに送るときに設定する、消費されるGasの制限値。無限にGasが消費されて無一文になるのを防ぐためのものです。
Block Gas Limit
ひとつのブロックに含めることができるGasの合計量。マイナーによる設定値

ひとつのブロックに含むことが出来るトランザクションは、Transaction Gas Limitの合計がBlock Gas Limit以下に制限されるわけです。

A~Eの5つのトランザクションがあって、それぞれのTransaction Gas Limit が10、20、30、40、50であるとします。そのとき、Block Gas Limit = 100であるなら、ブロックに入れられるトランザクションは、

A(10)+B(20)+C(30)+D(40)、B(20)+C(30)+E(50)、D(40)+E(50)

などになります。

そして、Block Gas Limitはマイナーがクライアントで指定します。Gethの場合、–targetgaslimitオプションになります。

マイナーが上記オプションで指定することがBlock Gas Limitへの投票となるらしい・・・のですが、単なる多数決なのか何なのか、調べないとよくわかりません。

Bitcoin Unlimited どう違うのか?

この仕組みは、Bitcoin Ultimateのエマージェントコンセンサスと似ています。エマージェントコンセンサスも、マイナーがブロックサイズに影響のあるいくつかのパラメーターを指定して、あとは市場でブロックサイズが調節されます。

どちらにしても、固定されないブロックサイズを持ったチェーンがどのように機能しているのか、興味深いです。Ethereumが、攻撃されながらもトランザクションを大量に処理できているのはなぜか?これは実は、技術にとどまらない本質が潜んでいそうです。

この後も掘り下げていきます。

Bitcoinが混乱していく中で、Ethereumの利点がハッキリしていく

ビットコインが分裂するとかしないとかで、最初にやりだしたのは誰なのかしらという感じになってますが、ここへ来てナードの産物が必ず通る道に差し掛かってるようです。

Nerd vs. Geek

仕事を手伝っているEdgarさんが、3月にこんなことを書いてます。

Why Ethereum is great for payments

内容は、「支払いにおいてEthereumがBitcoinより優れた手段である」という主張です。理由として、以下を挙げています。

UTXOの直感的な分かりにくさ

Bitcoinの場合、ユーザーが手数料の金額を見て「あれ?」と感じる場面があるということですね。

斎藤から吉田に100bitcoin送りたいとき、Walletは斎藤が持っているbitcoin(正確には未使用のトランザクション・UTXO)をかき集めて100bitcoin以上にしてから、吉田に送ります。集めた100bitcoinを超えた金額は、自分自身に向けたトランザクションになります。

例えば、

UTXO (10+30+30+50) = 120

斎藤 → (100) 吉田

斎藤 → (20) 斎藤

このチマチマしたトランザクションを発生させる仕様のため、トランザクションの構成によっては(テッキーでない)ユーザーの直感と実際の手数料の金額が乖離する場合があるということです。送金額と手数料が、リニアの関係からかけ離れるんですね。

Ethereumのトランザクションは、誰が誰にX ETH送るという直感的な情報を持っています。

セキュリティ確保

Walletの秘密鍵の管理などセキュリティ確保の面でも、Ethereumは有利です。

Bitcoinのスクリプト言語は制限があり、複雑なことをするに向いていません。一方、Ethereumはチューリング完全なプログラム言語を備え、複雑なセキュリティ仕様を実現することが容易です。複数の秘密鍵を別々の場所に保管しても管理しやすくしたり、Walletに支払いを止めさせる権限より初期化する権限を上位にしたりといったルールを比較的容易に記述できます。

Bitcoinでやると、こう(http://fc16.ifca.ai/bitcoin/papers/MES16.pdf)なります。これを理解して実装する暇のあるやつはいないということです。

スケーラビリティ

Bitocoinが分裂の危機を迎えたり乗り越えそうになったりしていますが、その主な理由はスケーラビリティを確保するための方針がまとまらないことにあります。Ethereumは、この点でもよいポジションにあります。

Edgar先生曰く

An established governance procedure for capacity increases, not an endless political food-fight.

Ethereumには、確立したキャパシティ増加プロセスのためのガバナンスがある。終わらない政治のフードファイトの代わりに、です。

スケーラビリティ確保に役立っているEthereumのデザインについては、別の記事で書こうと思います。

結局これら3点すべて、「技術者や学者特有の考え方の癖」に原因が求められます。Edgar先生曰く、ビットコインコアの開発メンバーには、現在は数学者が多く参加しているそうです。すると、こういった人種は潔癖症なことが多く、仕様などについて延々と議論という名のバトルが展開されたりするわけです。延々とです。

Ethereumの中心人物のVitalikは、20歳前後ととても若いです。そのせいか、古参の原理主義者の限界をやすやすと超えた発想をできるのかもしれません。Vitalikを中心としたEthereumコミュニティは、THE DAOの事件でのソフトフォークとハードフォークの件、あの大事件をむしろシステムを見る視点を本質的に一つ上のレベルに導いてしまいました(少なくとも私は導かれた)。何しろ、ハードフォークして当たり前という世界が開けそうなことに、ここ20年で一番未来を感じました、私は。

日本のオジサンたちにはこれがわからんのですよ。 例の斉藤賢爾さんも、ビットコインのほうがEthereumよりマシなどといってるのですから。ソフトフォークのほうがハードフォークよりマシともいっておられる。パラダイムが古いんです。

日本のテック野郎にEdgar先生のエントリから、次の言葉を送ります。

Busting out of the nerd ghetto(オタクのスラム街から抜け出せ)

もうね、セガサターンがプレステに負けたときから私はこういってますよ。技術や製品の普及の秘訣は、オタクとパンピーの構成員における割合が適正であることです。Bitcoinは、やたらと知名度が上がった状態で大混乱しているわけで、とてもよくない状態だと思います。

 

ブロックチェーンのfork/日本人エンジニアの客観信仰

雑誌・現代思想でビットコインとブロックチェーン特集があったので、急遽購入。野口悠紀雄氏や慶応SFCの斉藤賢爾氏など有名どころが寄稿してます。

私は、栃木県に住んでいる英国人のEdmund Edgarさんの仕事をときどき手伝っているのですが、彼はブロックチェーンやビットコインに詳しいんです。ちなみに彼は日本語ペラペラです(笑) そこで色々と話を聞き出したり、その手の英語サイトの議論やブログを読んでいます。そして、少なくとも中年以上の日本人ITエンジニアや研究者は、1周遅れのパラダイムにしがみついている人がほとんどじゃないかという思いが強くなってます。

ナイーブというか潔癖症というか、とにかくカチッと固まった世界しか相手にしたくないようなのですよね。客観信仰とでもいいましょうか。

昨年夏に、EthereumのTHE DAOコントラクトのバグを突かれることで、不正にETHが数十億円分奪取される事件がありました。その対応としてソフトフォークとハードフォークという2つの対応が考えられる中で、現実にはハードフォークで対応されました。ソフトフォークは、以前のブロックチェーンの仕様と互換性を保ちつつ、盗んだ奴の口座を凍結する対応。ハードフォークは互換性なく完全な新しいブロックチェーンへの移行です。

斉藤賢爾氏のような人からすると、特にハードフォークはありえないような話らしいんですよね。彼によると、ビットコインも含めブロックチェーンの設計から間違っているそうなんですよ。そのことについて「現代思想」の女性経済学者との対談で語るところによると

「あなたたちは、自分たちのやっていることをわかっていますよね?」

という気分だそうですが。いや、彼らはどう見てもわかっていますよ?

斉藤さんやある割合の日本人エンジニアの感覚は、

「ブロックチェーンがフォークすることは歴史が分岐することとなる、よって好ましくない」

だと思います。しかし、Ethereumの開発中心人物で若干20歳のVitalik中心に展開されるフォークについての議論を追うと、フォークそれ自体がとんでもない間違いとは思っておらず、問題にもされていないように見える。THE DAO事件が起きてしまったから後付けでというわけでもないはずです。私の英語がたいしたことないとはいえ、この印象は間違っていないと思います。

Ethereumの公式ブログのVitalikのポストです。Edgarさんに教えてもらいました。

The Subjectivity / Exploitability Tradeoff

私はこの”Subjectivocracy”という単語を見て衝撃を受けました。主観主義とでも訳すべきでしょうか。客観主義がダメであるというのは昔っからの私の持論ですが、西洋哲学の本場の人たち自体客観信仰している人ばかりではないんですね。

  • Subjectivity  → 主観
  • Objectivity → 客観

ですが、このエントリを読むと、日本人エンジニアや研究者が神聖視していると思われる客観性は、同時にCURSE(呪い)でもあるとVitalikはいっています。

Objectivity has often been hailed as one of the primary features of Bitcoin, and indeed it has many benefits. However, at the same time it is also a curse.

客観性はビットコインの主な特徴として歓迎されているし、事実役に立つことも多い。しかし、同時に呪いでもあるんだ。(拙訳)

エントリはけっこう長いのですが、是非読んでみて欲しいです。システムがSubjective(主観的)であるとき、Not exploitable(攻撃しにくい)がマネージコストがかかる。Objective(客観的)であるとき、オートでシステムが維持できるが攻撃しやすい。そのトレードオフだということです。オートでAIっぽく世界が進行する・・・60年代70年代生まれのパソコン少年が喜びそうな世界ですねwwww だけど、本場のあちらの人たちはもっと大人のようです。

ハードフォークすることを歴史の分岐だから好ましくないとするのではなく、それぞれが自分の好む(主観的な)世界を選択することができるという考え方。こちらのほうが断然よいと思いませんか?

Edmund Edgarさんは、Subjectivocracyを実装したRealyty Tokenというプロジェクトを構想しています。これがまた刺激的なんですが、今一生懸命ホワイトペーパー読んでます(笑)

EthereumとBitcoin、それぞれのトランザクション

EthereumとBitcoinそれぞれについて、トランザクションがどういう構造をしているか調べてみたいと思います。

Ethereum

  • nonce
  • メッセージの受領人
  • 送信者を特定する署名
  • 送受信されるEtherの量
  • オプショナルなデータフィールド。Contractに送られるmessageを格納できる。
  • STARTGAS値
  • GASPRICE値

Ethereumのトランザクションは、「誰から誰にどれだけのEtherを送る」という情報を単純に持っているようです。nonceは、マイニングのときに求めるあれなのかどうかは、まだ不明です。

Bitcoin

  • バージョン
  • トランザクションインプット数
  • トランザクションインプット
  • トランザクションアウトプット数
  • トランザクションアウトプット
  • Locktime

一方Bitcoinは、トランザクションインプットとトランザクションアウトプットの集合体です。これは「Bitocin+トランザクションアウトプット」のキーワードで検索してくるとたくさん出てきますが、誰かにビットコインを送金したいアカウントは、

  1. 自分が使える未使用トランザクションアウトプットをかき集める(トランザクションインプット)
  2. それを送り先アカウントの使える未使用トランザクションアウトプットとして生成する(トランザクションアウトプット)

という手順で送金を行います(間違っていたら指摘してください)。Locktimeはトランザクションの処理にまつわるUNIXタイムスタンプか、またはブロック高です。

手数料

トランザクションをブロックチェーンに取り込むには、マイナーに対して支払う手数料が必要です。

Ethereumは、STARTGAS値とGASPRICE値から手数料が求められます。Bitcoinは、トランザクションアウトプットとインプットの差額が手数料になっています。それぞれどういう計算で手数料が求められるのかは、詳しく調べていません。Ethereumについては、

Estimating transaction costs

ここを見るとよいかと思います。

Contract間通信のためのトランザクション

Ethereumの場合は、送金だけではなくContractでいろいろな処理を行うことができます。Contractのメソッドを呼び出すためにはMessageを投げますが、EthereumのトランザクションはMessageをそのデータフィールドに格納できます。

日本のAI界隈は新興宗教と同じ

百人一首の話の続きで2ちゃんねるのことを書こうと思ったんですが、ちょっと別の話を書きます。

西垣通先生と西川アサキさん

3年前くらいまではビッグデータ、その次に来てる自意識過剰さん御用達ワードが人工知能なわけですが。どうも、シンギュラリティが来るとか職を奪うという方向の盛り上がりばかりに見えるのはなんでかなと、考えたわけです。シンギュラリティは来ると前提して、喜んだり受け入れるか、怖がるかどちらかしかないように見える。

西垣通さんという情報学の先生がいます。西垣さんは一貫してAIというかITの限界を説かれてまして、私の問題意識と合うのです。そこで、去年西垣さんのセミナーに参加したことがあるのですが。そのセミナーには、西垣さんのほかに西川アサキという若手哲学者も登壇してましてね。AIは大したことない派の西垣さんVS.AIが人間の知能を持てない理由がわからないよ派の西川さんという図式でした。

海外のAI事情はそれほどしっかり調べてないですけど、例えばこんな記事もありますね。

The End Is A.I.: The Singularity Is Sci-Fi’s Faith-Based Initiative

シンギュラリティの本場アメリカより、日本のほうがいわばAI信者が多いのではないかな。

AI信者という新興宗教信者

AIにすべて滅ぼしてしまって欲しいAI信者が、日本にはたくさんいる。教祖はレイ・カーツワイル。なぜか?

人間より優れたAIがすべてを変えてくれる(壊してくれる)と考えれば、いけてない人間(生物)である私も自意識を保てる

と考える人が多くいるからですよ。人間としていけておらず、生物としてもいけていない。だからAIでみんな滅びちゃえ。そういう表現を、「俺は頭がいいし哲学までしちゃってる」という高い自意識も込めてできてしまうことが、人工知能凄い系の流行現象の本質ですね。一昔前の「希望は戦争」のようなものです。

名古屋でとてもユニークな人工知能の講義を聞かせてくれた女性研究者もね、やたら忙しいせいかAIに人間を越えてほしいと思ってるみたいだったし・・・。社会システムもますます行き詰ったとき、ええじゃないかを踊りだすのではなくAIに何とかしてほしいと願う。

西垣さんは、もう70近い方で家族もおり好々爺のような方です。いっぽう西川アサキさん。アラフォー独身です。セミナーでのファッションがSFみたいなコスプレのようなファッションで、これまたこじらせ感が。黒のレザーが多く使われていたような記憶です。サイバーパンクではないんですが・・・。

こういう対照的なおふたりの、AIに対する賛否とパーソナリティと人生。いろいろ示唆的だと思いませんか。私も40オーバー独身です。そんな私が思うに、人工知能は奥深いですが、アルゴリズムは全部人工知能にされてしまう勢いの最近の風潮は、少子化や草食化や独身の交際相手なし70%と根が同じと思いますよ。

私は生物として強力でい続けたいと思います!フォースのともにあらんことを!

ちはやぶる 神代も聞かず 人工知能 シンギュラリティ 人智超えるとは(3)

(2)から3か月も経ってしまった。この問題こそ私のモチベーションなので、何年かけても続けますけどね。

  1. 1,000,000種類の記号の中からランダムに31の記号を選択する(重複を許す)
  2. 選んだ31の記号を、これまたランダムに並べる
  3. 1と2を1,000,000回繰り返す

この100万人1首を超高速処理するAIカルタというのを仮定して、いまのエンターテイメントが100万人1首になっていっているという私の憤りを書きました。

感じませんかね・・・。インターネットにしても、「面白い記事」という「型」があってそこへ当てはめたものばかりになってません?Facebookに流れてくる「面白いネタ」ってみんなこれだし、そういうのを馬鹿にする人種(例えばはてなー)だって、別の「型」に則ってるだけなんですよ。そして、だんだん型ですらなくなって高速記号処理に近づいて行ってるわけです。

Perfumeが主題歌を担当した映画「ちはやふる」を見て競技カルタを始めて、「心が豊かになった」という人がいる。最初の数文字で決まり手を判別して高速で札を取りに行く。この点で、競技カルタは高速記号処理に見えるわけです。AI100万人1首では心は豊かになりそうもない。じゃあ、百人一首はどうして心を豊かにできるのか?私の考えでは、時間の積み重ねである「歴史」と「身体」が存在するからだと思います。それは「意味」と言い換えてもいいと考えてます。飛躍があるように見えるでしょうけど、まあそれはおいおい説明するとして。

どうも人工知能の分野では、意味についてあまり扱いたくないのでしょうかね。深層学習流行りの最近では、ますます意味は知能の対象外になっているように見えますね。時間と身体を無視して、一次元的な記号列による表象ですべての知能活動を賄えるとしてしまう・・・。彼らは感情は知能の部分要素と思っているか、理性より劣ったものとして切り捨てているようです。

「人工知能」脳に近づくと、左が右と大差なく見えるようになっていきます。ゲシュタルト崩壊ともいいます。ところで、ゲシュタルト崩壊という現象も知能について考えるにあたって興味深いですね。

理系の研究所にいて人工知能を研究しているような人は、「面白くない自分」を気にして劣等感を抱いていたりします(笑) そこで、

「感情は知能に劣る。感情があるせいで冷静な判断を人間は下せないので、人間を超えた人工知能に様々な課題を解決してもらおう」

このようなことを考えているわけです。このことが正しいかどうかは置いておきます。最近のように社会全体が人工知能人工知能ということで、全分野で働く人の脳みそがAIっぽくなっていっている、とりわけエンタメ分野が面白くなさすぎるがウンコすぎると私は怒っているわけです。

次回 2ちゃんねるのコピペ文化へ続く

検索エンジン自作入門/ wiserのPython移植(7)

検索エンジン自作入門/ wiserのPython移植(5)で作ったmerge_postings を呼び出す側の、二つの関数 merge_inverted_index と update_postingsを実装します。

最初に update_postings から。これはストレージ上のポスティングリストとメモリ上のポスティングリストをマージして、その結果をストレージに保存します。引数はメモリ上の転置インデックスのエントリです。書籍は77ページ。

fetch_postings は、トークンIDでトークンに紐づくポスティングリストをストレージから検索します(2行目)。ストレージに該当するトークンがなければエラーを返します(13、16行目)。あれば、メモリ上のポスティングリストとマージした結果でdb_update_postings でストレージを更新します(8行目)。

次にmerge_inverted_indexです。ふたつのメモリ上の転置インデックスをマージします。引数はマージするふたつの転置インデックスです。書籍は79ページ。

書籍ではマクロ HASH_FIND_INT  で行っているマージ先からのトークンの検索は、関数 find_token_from_index で行っています(3行目)。merge_postings でポスティングリストをマージしているのは、update_postings と同じです(7行目)。

これで、転置インデックスの構築する部分で残るは、検索対象の文書(書籍と同じようにWikipediaにしようと思ってます)をインポートする処理だけとなりました。だいぶかかってしまった・・・。次回はWikipediaで提供するXMLをlxmlを利用してインポートする処理を作ります。

正直、設計にしろPythonの使い方にしろこれでいいのかなと思いながら作ってますが、Wikipediaから転置インデックスが作れればまずはOKということにします。