Menthasをv3.2にアップデートした

随分前から少しづつ進めていたんですが、Menthasのアップデートを年末にひっそりと行いました。

以下今回のアップデート内容です。

  • React移行
    • VueからReactに移行した*1
  • ニュースカテゴリをスワイプで切り替えられるように
    • 最初はreact-slickを使っていたがライブラリを使わずにつくりたかったのでscroll-snap-typeなどcssを使って実装することに
  • CSSの細かい調整
    • 特にスマホで閲覧しているときにタイトルとか見にくいなと思ったので微調整
    • タイトルのテキスト色を微妙に変えたり
  • パフォーマンス改善
  • 具体的なコードは https://github.com/ytanaka-/menthas/pull/69 を参照

ハマっていたところ

scroll-snapでカテゴリを切り替えたときに、navigationのインジケーターやurlの方も同期的に変えたかった。しかしスワイプによるDOMの移動はCSS側に状態があり、これによってReact側でのstateの制御が難しい。結局コンポーネントのonScrollからev.target.scrollLeft で移動量を取得してカテゴリの長さ分動いたら切り替わったことにしている。しかしこのやり方だと完全に切り替わった後でないとインジケーターが動かないので完璧ではない(本当はスライドの量に応じてインジケーターも動いてほしい)。

IntersectionObserverでisIntersectingを使いながら監視するやり方も試したが、素早く動かすとうまく動作しなかったりして安定しなかった(特に2つ飛ばしくらいでチャンネル切り替えたりすぐ戻したりしたとき)。プロダクションレベルで同じことをやるなら、scroll-snapで制御するのでなく全てReact側で完結するような仕組みの方が良さそう*2

あと /javascript みたいなurlで直接特定のカテゴリに遷移したいときに scrollBehavior = "unset" しつつscrollIntoViewでscrollさせて表示している。このやり方は後輩に教えてもらったんだけど、カルーセルみたいなUIを作るときには良いアイデアだなと感じた。

今後どうするか

ローディングを表示している部分で従来のuseStateを使う方法でなく、React.Suspenseを使う方式に変更したいと思っている。 Suspenseが提唱しているデータ層からのthrowをUIがcatchして表示するというパラダイムは面白いと思ったし、componentのコードが簡潔になる感じがして良い感触を得たため。

そういえば最近はてな社から企業技術ブログ: エンジニアの技術ブログコミュニティというキュレーションサービスがリリースされていて、こちらが結構良い感じにみえる。なのでそろそろ当初のMenthasの役割も終わりつつあるのかなーとも感じている*3

自分的には新しいシステムなり、なんなりを来年は作れればいいかなと思っている。

それでは良いお年を!

*1:Reactにしたのは仕事で使っているのが選定理由として大きい

*2:cssのtransformをReact側で動かすみたいな。でも矢印キーとかタッチ端末の対応が大変そうだし、今回は楽をしてしまった

*3:スマホでの体験はイマイチに感じているのでその辺の改良とか、ニュース選択のアルゴリズムを良くするとか、そういう工夫はまだ余地がありそう

気分良く働ける場所に住む

最近メンタルの調子が良いというか気分良く仕事ができている。なぜなのかその理由を考えてみた。

オフィスの近くに住んでみる

4月に大学を辞めることにしたので、仕事に集中するためにオフィスに歩いていける場所に住むことにした、きっかけとしてはこれが大きかったと思う。 リモートワーク全盛ということで去年の夏頃に海老名市に引っ越していたのだが、元々海老名に引っ越したのは貯金のために一番大きな固定費である家賃を削ることが目的だった。

そして目的通りお金は溜まったが、なんというか仕事のパフォーマンスがどんどん落ちていく感覚があった(それがなぜかはわからなかった)。 プログラマということもあってリモートワークそれ自体に支障はなかったと思う。運動はしていたし、飯も基本的に自炊していたし、休日は車で外出して箱根とか熱海とか行きたいところに行っていたので不満はなかった。 肉体的には非常に健康的な生活を送っていたと思う。しかしなぜか仕事のパフォーマンスは落ちていた。とはいえオフィスは結構遠くて、帰宅ラッシュの中帰るのはつらいので中々できていなかった。

横浜に戻った結果、結論として自分の場合仕事はオフィスでやるべきということがわかった。 個人的に

オフィス + 徒歩圏>>> リモートワーク >> オフィス + 満員電車通勤

くらいな感じがある。

こういう家よりもオフィスで仕事をする方が捗ることと似た状況として、大学受験の頃を思い出す。 自分は予備校へは家庭の事情で行けなかったので宅浪をすることになったのだが、当時は正直孤独とプレッシャーで頭がおかしくなりそうだった。 その中でなんとか図書館を使ってやりくりしていたが、運良く大学に入学できた後に、自習室や友人など他者の存在は自分にとって必要なものだったと痛感した。

効率性を考えるのであれば、移動時間を考えなくて良い家の方が勉強にしても仕事にしても良いことになる。でもやはり他者の存在は不可欠なんだと思う。知らない他者でも、誰かとともに同じ作業を自習室で共有することとか、昼食や空き時間に誰かと話すことを通して、理由は不明だが精神的に良い影響があって、それが仕事や勉強に良い影響を与える。

ここから推論するに自宅と自習室が変わらないタイプならリモートワーク向きだと思うが、そうではないひともいるということかもしれない。

あとはそれなりに良いマンションにしたので防音性が高かったり、部屋の品質が高い(水道水が不味くないとか、換気設備の音がうるさくないとか)ことがメンタルに良い影響を与えてるんだと思う。

パフォーマンスは非線形だが、家賃は線形

僕の印象として富裕層というのはいわゆる高級住宅地とか都心部に住んでいる感覚がある。つまり家に金をかけているということだ。 これはお金があるからその余裕の対価として家に金を掛けるようになったと思っていたのだが、実は逆なのかもしれないと思い始めた。 つまり家にお金をかけたから金を稼げるようになったということだ。

自分が仮説として考えているのは以下のような2種類の構造である。

コストに対するリターンは線形的に良くなるパターンと非線形的に良くなるパターンがあって、家というのは立地と専有面積の掛け算で決まるので線形的に良くなるが、人間のパフォーマンスは非線形的になっていくのでないかと思っている。

例えば倍くらい大きな家に住んだらだいたい家賃は2倍になるが、2倍優秀なプログラマを雇おうと思ったら4倍くらい払わないとダメだろう。超優秀なひとを望むなら10倍くらい必要になるかもしれない。 人材の希少性から、仕事のパフォーマンスに対するリターンは非線形なカーブを描く。だからある一定の水準を超えると家<<収入になるのだと思う。

つまり家に金をかけることが浪費になるか投資になるかは仕事のパフォーマンスのフェーズが図のグラフのどの辺りにあるかどうかで答えが変わるため、どちらが正しいというわけではないということだ。新卒とかで豪邸に住むのは浪費だと思うが(上記の図でいうと重なってる点の左側)、それなりのポジションにあってパフォーマンスを得られるならそれは投資になる。

高級住宅地なら住み心地、都心に住むなら通勤時間の短縮で余計なストレスを回避し、パフォーマンスを上げることで費用分を回収している。むしろそれ以上のリターンを得ているのだと考えられる。

ちなみにこのままだと思いつきを書いてるだけだから少しファクトを出すと、「通勤者バイアス(commuter's bias)」というものがある*1*2。 これは通勤時間が増えることの影響を過小評価してしまうというバイアスで、要は通勤時間と家賃だと家賃を優先してしまうが、基本的には節約した家賃以上にパフォーマンスが落ちてしまうので結局損をしているという話だ。

イギリスの研究によると、1日の通勤時間が20分増えることで、仕事の満足度は給料が19%減るのと同程度の悪影響を受ける。

単純計算すると年収が500万なら500*0.2/12=8.3万の影響になるが、20分遠くに住んで8万も家賃が下がるケースはかなりレアだろう。 まあこれは海外の事例だしリモートワーク時代なのでそのまま適用するのは無理があるかもしれないが、バイアスがあるというのは意識しておいても良いはずだ。

メンタルを無視しない。気分良く働く

リモートワーク時代において、家や立地が仕事のパフォーマンスの何に影響するのかと言われると難しい。 一方運動は身体の維持やリフレッシュで重要なわけだし、目に見えるところでいうとお金を貯めるというのはFIREとか関係なく意味があることはわかる。

しかし同時に目に見えないメンタルのケアやリフレッシュも重要で、それは長い目でみたときに仕事のパフォーマンスに効いてくる。住むところ妥協してメンタルを犠牲にするとパフォーマンスは落ちて、それは長い目でみればマイナスにしかならない。家のコストは比例的だが人間のパフォーマンスは指数関数的なのでパフォーマンスが重要なら関係ある分野へのコストはどんどんかけていくべきということだ。*3

今自分が住んでいる場所は山下公園や中華街とかが近いのもあり、海辺でリフレッシュしたり美味しいものも豊富なので満足できている。

というわけでリモートにしてもなんにしても気分良く働ける環境や住める環境を整備することは大事だし、あまり固定観念に囚われることなくそれは追い求めていきたい。わかりやすい効率性や利便性が全てではないなと。 お金を貯めることに夢中になって目に見える物理的なものを重視しすぎて、目に見えない精神的な部分をすり減らしていないかは気をつけて行きたいなと思っている。

補足: この記事はリモートワークに反対とか、オフィスに近くに住めと主張しているわけではない。 筆者の職場には登山が趣味ということで長野県に引っ越したひとがいるが、それはそのひとにとってメンタルや気分に良い影響を与えるわけだし、むしろとても好ましいことである。自分にとって何がメンタルに良いのかは人それぞれなのでそれを最大化すればよいという話です。

*1:通勤時間が20分増えると危険な結果に —— その対処法とは? | Business Insider Japan

*2:バイアスについて直接述べられている記事はこちら Reclaim Your Commute

*3:増井さん曰くシリコンバレーはとても住みやすいところで、またAppleのエンジニアは一人一つ個室を持っていて働く環境としては良かったらしい。

キュレーションを超えて重要なこと

久々にMenthasのfeedをみていたら先日TechFeed Conference 2022というものがあったそうで、そこから考えたことを書いておきたいと思う。

いかに発信してもらうか

僕はTechFeedさんの関係者ではないので、どんなモチベーションでこのカンファレンスが開かれたのかは推測でしかないのだけど、おそらくはエンジニアのひとに如何に安心して発信してもらうかということを突き詰めた結果なのではないかという気がしている*1

ブログ記事をキュレーションして紹介するサービスを運用していると、どういう記事をキュレーションするかよりも如何に良い記事を書いてもらうかということが重要だということに気付かされる。これはUGCのサービスも同じかもしれない。PGCのNetflixだってアルゴリズムというよりも、自社コンテンツに力を近年はずっと入れている。すなわち競争力になるのは自社が独自で配信できるコンテンツということだ。

営利企業という側面でいうと自社で囲い込んで記事を作ってもらうということになると思うけれど、もっとエンジニアコミュニティ的な話をすると、きちんと読んでくれそうなひとに精神的安全性を保った状態で、記事が届くということが重要かなと思っている。単にPVを稼げばいいということでなく、日本に100人しか読者がいなくてもその100人に届くことが重要というようなイメージをしてもらえればいいと思う。加えてそこから少しでも意味のあるフィードバックを得られることがあればいい。 というのもバズりすぎてコンテキストを知らないひとに記事が行き渡ってしまうとそれはそれで変な批判を招くこともあるし、一度でもそういうことが起きると執筆者がpublicに記事を公開するモチベーションが下がってしまう。 この辺りが近年publicにブログを書くのでなく、自分も含めて企業内ブログとかSlackのtimesで満足してしまう要因なのかもしれない。

これまでMenthasで紹介されてマイナスだということを言われたことはないけれど、コンテキストを超えてバズってしまって発信者が傷ついてしまうことに手を貸す可能性はあるし、そういう事態になってしまうのは避けたい。理想論かもしれないが、技術論は技術論で消費されることを僕自身は望んでいる。

とまあこの辺りのことを考えると一番良いのは自分たちが管理するドメイン下でコントローラブルな形で発信してもらい、それによってレピュテーションリスクとかを最小化し、発信することの精神的なハードルを下げることを狙うということになりそうで、それは実現できるなら良い方針だなと。

繰り返しになるかもしれないが最近というかこの数年ずっと自分が考えているのは、いかにキュレーションするかというよりも、記事をoutputしてもらう環境を作る方が重要だなあと思っている。これは技術ブログだけではなくてUGCのもの全体にいえるかもしれないけれども*2

一方で世間的には無名なひとが書いている有用な論文やブログも世の中には存在しているわけで、そういうものを発掘する価値もまだまだあるなあとも思っている。それぞれ別の問題であり難しい。どちらに進むかを今考えている。

*1:Qiitaのアドベントカレンダーとかも類似事例だろう

*2:発信してもらうモチベーションとして一番わかりやすいのが投げ銭のようなシステムになる

何が面白いのかは書いておけ

最近3年くらい前に書いたメモ(だいたいScrapboxにある)を見直すことがあって、そのときに思ったことがこれ。

〇〇が面白いとか素晴らしいとかそういった感情面のコメントが一言だけが書いてあって、それを書いたこと自体を忘れていたのだが、そういうときにその理由が書いてないと記憶をリストアできないよなと。

なのでどんなに些細なことでも一応理由っぽいものを言語化して書いておく方が、自我が連続していることを認識できるというか、後々のためになるのかもしれない。その一環もあり自分のプライペートなメモで留めておくとどうしても言語化のレベルが低くなるからこうしてブログを書いている。

忘れるっていう話に関連すると グーグル効果 - Wikipediaというものがある。これは検索システムがあることによって、ググって調べれば済むことを覚えなくなるから記憶力が低下するというもので、確か最初に知ったのはウィリアム・パウンドストーンのクラウド時代の思考術からだったと思う。 個人的には結構同意できるところがあるんだけど、2018年の追試で再現しないことが報告されたようだ。

No conclusive evidence that difficult general knowledge questions cause a “Google Stroop effect”. A replication study [PeerJ]

どちらかというとGoogleのせいで記憶力が低下しているというより、集中力がスマホで散漫になって記憶力が落ちてるみたいな現象が起きてる気がしている。スマホが脳にどういう影響を及ぼしてるのかについては、そろそろ信頼のおける学術的な報告がありそうだから調べてみたい。

あとメモを見返していて思ったのは覚えたり考える知識の量が減っているというよりも、借り物っぽい知識が最近増えてしまっていることが問題かなと*1。 これの何が良くないかというと、自分なりの思考や言説を深められていないということで、要はアイデンティティの喪失みたいな話である。

スマホSNSは反射的な感情の想起とインスタントな思考、そしてネットワーク効果による群生化を促したと思うんだけど、これを突き詰めていくと幼年期の終わりに出てきた新人類みたい形態に近づいていくんだろうか。なんにしてもそういう流れには抗っていきたい。

*1:これについては車、不動産や経済のような専門分野でない本を中心に読んでるっていう要因も大きそう

2021年振り返り

2021年が自分にとってどんなものだったのかという問いに答えるとすると、視野を広げるための年だったということになるだろう。

このブログを書くのも久々になってしまうからとりあえず近況を話しておくと、まず大学に関しては1年以上前から休学しており、去年の春から普通にプログラマとして働いている。 といっても完全に博士を諦めたわけではなくて、週4日を仕事に、残り1日を学業や個人開発にあてるというかなり変則的な毎日を過ごしている。

以下は技術とか学術を抜きにした個人的な振り返りについて

MT免許取得 + NDロードスター購入

まず大きく変わったなと思うのはマニュアル車の自動車免許を取得したことだ。

正直車の免許を取ることは自分の人生ではもうないと思っていた。しかしEV化の流れが急激に進んだことで、なんというかガソリンエンジンのMTスポーツカーという存在がとても自分のなかで魅力的に感じてしまい、この歳になって教習所に通うことになった。 車はロードスターか86にするか悩んだが、燃費や保険などのコスパが良いことと*1、せっかくならオープンカーに乗ってみるかということでNDロードスターにした。

結果としてはこの選択は大正解だったように思う。

オートマチック車でもパドルシフトのものもあるし、素人にとってはマニュアル車というのはシフトスピードでもエンストのリスクでも、合理的なメリットというのはほとんどない。でもその不合理さがむしろ魅力に感じられる。全身を使って操作するという感覚とミッションの自由さ、2シーターということもあって狭い車内、だがそこにロードスターという車のデザイン哲学が感じられるからだ。

村上春樹も実はMTのオープン2シーター乗りで似たようなことを言っていたので*2、そんなにハズしているわけではないと思っている。 サン=テグジュペリが人間の土地で描いていた、飛行機と同じような感性のものなのかもしれない。レガシーとしての車の魅力を感じられる時代に生きているというのも贅沢なことなんだろう。

というわけでロードスターには満足しているが、つい先日後輩のテスラモデル3に乗る機会があって、そのときに衝撃を受けた(次の車はテスラになるかもしれないと思うほどに)。色々とテスラについては思うことがあるので別途ブログにする予定だ。

f:id:atria:20211231165307p:plain
筆者のNDロードスター in 真鶴

賃貸不動産経営管理

人生の三大出費の1つに住宅費用がある。

今まで賃貸住宅のお世話になってきたわけだが、マンションや家について自分はあまりに無知じゃないかと思ったので、この機会に不動産系の資格を何かとってみたくなった(ちなみに本業とは全く関係がない)。 宅建は大変そうだったのでもっと軽いものがないかと探していたところ、今年から国家資格化された賃貸不動産経営管理士に行き着いた。

宅建は不動産の取引に関する資格だが、賃貸不動産経営管理士はその名の通り不動産管理業に関する資格である。試験内容はわりと実用的なものが多くて、賃貸物件の管理に関する法律関係の知識やマンション構造や設備、税金に関するものなど幅広い(一番役に立ちそうなのは民法と税金関連のところだったかもしれない)。

毎年11月下旬に試験があって自己採点では40/50点だった。巷の合格点予想は36~37点くらいのようなので、たぶん受かっているのではないかと思う。

今年読んでよかった本

今年も結構な量の本を読んだが役に立ったり面白かったものとなると以下の2つ。

 インデックス投資のバイブルとも呼べる本。批判するにせよ手法を受け入れるにしろ、とりあえず資産運用を始めるにあたって読んでおくに越したことはない。個人的に投資(もしくはギャンブル)というのは勝つよりもいかに負けないかという視点が大事だと思っているので参考になったかなと。

  • Humankind 希望の歴史

 ユヴァル・ノア・ハラリが帯の推薦文を書いていたので目に止まって買った本。人間の性悪説へのバイアスを一つ一つ事例を紹介しながら解いていく内容になっている。ジンバルドやミルグラムの実験についての批判やスティーブン・ピンカーのデータの取り扱いが恣意的という指摘もなるほどと思わされた。 全体を通して、ネガティヴな感情に支配されつつある昨今のSNSに陰鬱さを感じる身としては処方箋になっていて素晴らしい。

直近だとサンデルの実力も運のうちとか、スコットギャロウェイのGAFA+X本とかもいい本だと思う。 漫画だと寄生獣日出処の天子という名作を読めたのもよかった。

検索と自由、そしてインタフェース

推薦と検索という自分の2つの研究テーマについて最後に書いておこう。

マニュアル車に限らず自動車には電車と違って行ける場所の自由さがある。そしてその場所は自ら検索して見つける必要がある。電車はそうでなく決められた行き先を選択するだけだ。もちろん車でも行き先を決める際はガイドブックで決めることはあるだろうが、そこには圧倒的な選択の自由がある。

同じように推薦はアルゴリズムから選択肢を与えられるものだが、検索はひとが自ら見つけるという主体的かつ探索的な要素がある。推薦システムは究極的にはインタフェースがなくてもいいものだが、検索システムはインタフェースを必要とするだろう。

選択を決めること、いわば意志決定は人間にとってはコストである。だから楽な方向に行こうと思えば全てが自動的に決められていく未来もありうる。しかしマニュアル車に乗って思うのはそうではない楽しみがあることがわかる。ハンドルで生死が決まるという感覚があるからこそ、そこに魅力が感じられる。 ただこれはMTの2シータースポーツカーのように少数派の感性だ。あと10年ほどでテスラのようなEVと自動運転に大多数が置き換えられてしまうだろう。

しかし自らが操作しているという感覚にひとが価値を感じる限り、そうでない車もインタフェースも残り続けるのではないだろうか。

来年

意味のないようにみえることが実は意味があるという信条のもとで過ごしてみたい。敢えて違う場所にいったり人と会ったり、アウトプットでブログを書いてみたり。効率さを超えた先に楽しさはあるかもしれない。

*1:実はロードスターは街乗りでもリッター15くらい出る。車両保険や任意保険も他のスポーツカーと比べると結構安い

*2:村上春樹マニュアル車の魅力を語る「それは、マニュアル主義者にしか理解できないものです」 https://news.yahoo.co.jp/articles/71157e06f23eae704ff6e1753c4d12363b625dd5

「天気の子」論ーその構造と面白さ

前期もひと段落して時間ができたので話題の天気の子をみた。これが予想を超えて素晴らしくて、その理由を考えていたらこんな記事が出来てしまった。

ここではできるだけ主観的な感想を排して天気の子の物語構造を論じるつもりだが、既に多数の考察があるように、天気の子はシンプルなようでいて奥深く、メタな視点でも楽しめる作品である。 一見するとラノベ的ご都合主義にみえる部分もあるのだけど、思考の解像度をあげればそこには考察に耐えうるロジックがある。 描写はとにかく美しくて(とくにねぎを入れるあたりのシーンが好きだ)2回目はIMAXで見た甲斐はあった*1。ちなみに小説版も読みやすくて映画と組み合わせると感動と面白さが倍増なので是非おすすめしたい。

以下述べることは僕なりの解釈だし多分にネタバレを含んでいるので、ぜひ読む前に劇場で一見を勧めておく。


さてここからは本題に入ろう。本稿では帆高の持ち物であるキャッチャー・イン・ザ・ライをベースに、陽菜の能力とキミとボクとセカイの関係、いわゆる広義のセカイ系と呼ばれる枠組みからこの作品の持つ構造を謎解くことにしたい。以下順を追って説明していこう。

キャッチャー・イン・ザ・ライ

主人公である帆高の持ち物の中には「キャッチャー・イン・ザ・ライ」がある。キャッチャー・イン・ザ・ライはJ.D.サリンジャーの青春小説で、日常に溶け込めない主人公ホールデンが放校に伴って身の回りに潜む欺瞞とそれを許せない自分に対して葛藤しつつシニカルな口調で語る物語である。

作中において帆高は家出少年であるから、キャッチャー・イン・ザ・ライの主人公だとみなせなくもない。しかしどうにもその解釈は無理がある。キャッチャー・イン・ザ・ライの主人公であるホールデンはもっと鬱屈としていて、帆高のようにあれほどまで純粋ではないからだ。帆高は大人になりきれない子どもというより作中で陽菜が指摘したように少年そのものである。

ではキャッチャー・イン・ザ・ライホールデンに対応する人物は誰なのか。

僕が思うにそれは須賀さんである。映画版でも軽く触れられているが、須賀さんは名家生まれで10代の頃に家出してきたという設定になっている。これらの設定はホールデンと類似しているし、自分は大人になりきれない子どもだと須賀さんや夏美は吐露するシーンもある。

そして以下のように帆高と須賀さんが似ていることが夏美から二回も示唆される。

「放っておけなかったんでしょ、自分と似てて」

「......どういう意味だよ」

(中略)

「ね、似てると思わない、あの二人」

「帆高と須賀さんがですか?」

『小説 天気の子』新海誠(著)角川文庫、2019年

そして決定的なのが冒頭での土砂降りに襲われた甲板から落ちそうになった帆高を救うシーンである。これはまさしくホールデンが夢見たキャッチャー・イン・ザ・ライの行動原理そのものだろう。

僕のやる仕事はね、誰でも崖から転がり落ちそうになったら、その子をつかまえることなんだ――つまり、子供たちは走ってるときにどこを通ってるかなんて見やしないだろう。そんなときに僕は、どっかから、さっととび出して行って、その子をつかまえてやらなきゃならないんだ。一日じゅう、それだけをやればいいんだな。ライ麦畑のつかまえ役、そういったものに僕はなりたいんだよ。

ライ麦畑でつかまえて』J.D.サリンジャー(著)野崎孝(訳)白水社1984

まあ今作ではキャッチャー・イン・ザ・ライでなくキャッチャー・イン・ザ・デック(deck=甲板)というべきかもしれないが*2

つまりホールデンに憧れた家出少年である帆高をホールデンそのものである須賀さんが救っているという構図になっていることがわかる。これによって帆高は大人になれなかった子どもではなく純粋無垢な少年として物語をドライブさせる役割を持つことができている。

須賀さんが窓を開けた理由

須賀さん=ホールデンという等式で物語を見つめると色々と納得できる箇所がある。まず終盤に須賀さんが窓を開けて部屋が水浸しになるシーンがある。個人的に終盤においてこれは明らかに異質なシーンだと思う。どうして彼は窓を開けたのだろうか。

キャッチャー・イン・ザ・ライのラストにそのヒントがある。

第25章の最後、ホールデンが土砂降りの雨が降りしきるなかで回転木馬に乗ったフィービーを眺めているとき強い幸福感と感動のあまり涙しそうになるというシーンがある。これと構図がそっくりなのだ。ホールデンが純粋無垢なフィービーに対して涙したのと同じく、須賀さんは陽菜のために駆け回る帆高に対して涙したのだ。

ここまでをまとめると、大人になりきれなかった子ども=ホールデンとして須賀さんがおり、無垢な少年/少女=フィービーとして帆高がいることがわかる。ではヒロインである陽菜の役割は何なのだろうか。次にそれを見ていこう。

現代のクリエイターとしての陽菜

陽菜の能力は降りしきる雨から少しの合間晴れにすることであり、これは人々を少し幸福に、笑顔にするものである。帆高は陽菜の能力の印象として「気がする」をよくキーワードとして使う。確かに作中の天気は人々の実質を変化させない、彼らの気分を変えるものとして描かれている。そして僕が思うに陽菜の能力はクリエイターそのものである。どういうことか説明しよう。

創作の起点となるものは身近な誰かに笑顔になってもらったり、そのひとのために何かを作るのが製作者でありクリエイターの始まりだと僕は思っている。これはアニメ制作に限らず、絵を書いたり、曲を作ったり、アプリを作ったり、創作全てに関わる。創作は初めから社会を意識するわけではない。身近なひとへの贈り物として始まる場合が多いのではないか。少なくとも僕はそうだった。

そして陽菜の能力も、そういう種類のものだ。雨の日常にひっそりと短い時間かもしれないけど晴れ(笑顔)を与えるもの、対価がお金であること、人気が出て社会性を帯びていくこと、そして、テレビで人気になって陽菜が疲れてしまうことがそれを暗示する。

また陽菜が疲れて今回で休業にしようと思うんですと帆高が答えている相手の先に、前作「君の名は。」の主人公である立花瀧がいる。このことは陽菜が社会性を帯びたクリエイターになったこと、もっというと新海誠自身であることを示唆していると僕は考える。

そしてここから物語はセカイ系としての展開を迎えることになる。

天気の子とセカイ系

天気の子は今のところセカイ系として論じられることが多い印象を受ける。個人的にはこの作品を単純にセカイ系に括ってしまうのはもったいないし、加えてセカイ系というのは人によって定義がはっきりしていないのであまり論じたくはないが、ここは避けて通れない。一旦セカイ系という枠組みで考えることにしよう。

「選択」までの展開

陽菜の役割が新海誠自身であるなら、彼の創作そのものを陽菜は体現していることになる。社会性を帯びた陽菜は私としての自分が消失しそうになり、自分の能力とセカイ系という枠組みに包まれていく。 逃走から陽菜と再開するまでの展開はラノベ的で描写もかなりそれを意識しているように思う。特に凪くんが入れ替わったりする部分とか刑事たちがコメディカルに描かれていたりとか。

本筋に戻ると、帆高は陽菜のこの雨が止んでほしい?という質問に頷いてしまうことになる。そしてセカイを選択してしまいキミが消失する。

しかしここから物語は従来のセカイ系ではないものに徐々に変貌を遂げていくのである。帆高が陽菜を救うことを決意した瞬間から、セカイ系としてのキミとボクとセカイという構図からの脱出に物語は向かう。彼はそれまでの日常からの逃走でなく、陽菜に会うために走り出す。顔に付けられた傷がそれを暗喩する。それは秒速のような過去のイデアを追い続ける主人公ではなく、未来を選んだ言の葉の庭でもなく、過去に戻って現在をやり直した君の名は。でもなく、彼はまさに今彼女に自分の意思を伝えることを選んだのだ。

帆高がキミをあっさり選んだ理由

セカイとキミを選ぶところでもっと葛藤が欲しかったという意見をよく目にするが、おそらく新海誠はこれを狙って省いていると思う。つまりセカイとキミは帆高の中では等価ではないのだ。そもそも選択の時点でのセカイとは何だろうか?異常気象と連日雨が降りしきる東京だろうか?

考えてみると帆高にとって東京は憧れの土地である一方で一貫して冷たい場所でもあった。「東京って怖えーー」と彼は何度となく呟いている。作中の東京は帆高に対して何も提供していない。チンピラに蹴られ殴られ、泊まる場所にも困り、ぼったくり同然の価格で住と食を提供しただけだ。 だから彼はセカイとキミの選択に迷わない。

とはいえ僕はこの作品を見終わったとき作品の後半部に違和感を持った。やはり帆高の選択に対して引っかかるものはある。この違和感は明らかに沈んだ東京というセカイの結果、つまりセカイとキミの等価性が起因となっている*3。感想ブログではこの点について書くひとが多い印象がある。これら後半部のラノベ的な展開と描写に対する違和感・ストレスを感じる我々の感性は考察に値するものである。この正体は何なのか?

大人になりきれなかった子どもの二重性

僕が思うにホールデン=須賀さんという部分の構図、つまり大人になりきれなかった子どもというのは二重性を持っている。前述したように須賀さん(そして実は夏美も)は帆高に救われている。しかしその一方で帆高の選択に救われていない「大人になりきれなかった子ども」も存在している。

それはメタな視点でこの作品をセカイ系と捉える我々である。 もしくは帆高と陽菜のボクとキミの関係を外側から他者として見つめる存在として当事者の彼らの選択に違和感を持っているともいえるかもしれない。この二重性を実は帆高も持っている。小説版ではセカイとキミの選択に思い悩んでいることが記述されている。彼らの物語に救いはあるのか。

ラストーカタルシスの仕組み

救い・救われの構図

ラストシーンの考察に入る前にこれまでの登場人物の物語における位置付けとその役割を整理しよう。関係は以下のような構図となる。

f:id:atria:20190729151014p:plain:w400

まずキャッチャー・イン・ザ・ライをベースにした構図が①でありここでは須賀さんと帆高が救い・救われている。そして②でセカイ系としての枠組みで帆高と陽菜が救い・救われている。ではもし③に該当するものがあるとするならそれは何だろうか。最後にここの構造を考えていくことにしたい。

陽菜の祈りで救われたのは誰か

前節で③に該当する部分、すなわち陽菜と須賀さんに対応する部分に救い・救われがないと述べた。陽菜から須賀さんに対しての救いは作中では描かれていない。これは須賀さんが3年後に大人になっていることを示している。すなわち陽菜から須賀さんへの救いは物語中では効力を失っているのだ。

では大人になりきれない子どもに該当するのは誰だろうか。ホールデン方式でもセカイ系方式でも救えなかった存在、少年と少女によってセカイが救われるという構造をもっても救えない存在、大人になりきれない子どもの二重性から一面を引いた存在は何か。

そうそれは3年後の帆高であり、新海誠のファンであり、大人になりきれない我々自身である。

終章の陽菜に会いに行くシーンで帆高はどんな顔をしていけばいいかわからないという。須賀さんは気にするな、と言ってくれるが帆高は思い悩む。これは須賀さんは救われて大人になったが彼の役割を今度は帆高が引き継ぐことになってしまったことを暗示する。

そんな帆高と従来の図式で救われなかった我々に対し、この映画は救いを与える。 終章のシーン、降り続く雨のなかでも力強く進み続ける東京の姿と、天気の子でなくなっても祈り続ける彼女の姿によって。 そして彼らが共に自らの意思で選択した今を強く生き残ろうとする姿勢が、天気雨の陽射しと共にとても美しく描かれている。

考察は以上だが、実は正直今でもこの感想でいいのかを迷っている。 しかしラストシーンまでの構図と、作者の選択の果てにある最後の光景の美しさに、エゴイズムという僕のなかに生まれる当たり前の批判を乗り越えて、どうしても僕はカタルシスを感じてしまうのだ。

(追記 at 2019/08/29) 約一ヶ月経ってみて再考してみると、やはり個と社会の対立という軸で作中の選択は批判されうる部分も多いと思うし、その二項対立が解決しているというわけでもないと思い始めた。 またこの作品における選択と所々の暴力性のあるストーリーが自分も含めて多くのひとに受け入れられているという事実が、ややもすると恐ろしいことなのかもしれないと考えたりしている。 どうなんだろう、難しい。

*1:この記事を書き上げたあとにIMAXで2回目をみたのだが2回目の方が選択の意味やラストシーンの意味がよりはっきりと掴めてさらに感動してしまった

*2:in the deckよりもon the deckの方が自然な感じがするが、あのシーンは土砂降りで甲板には誰もいなかったし須賀さんは甲板の中からスッと出てきた印象を受けたのでこうしている

*3:そもそも沈んだのはトーキョーであってセカイではないんだけど、これは別の論点だと思ったのでここでは論じないことにした

確率的情報検索について

概要

情報検索の分野でBüttcher本と呼ばれるInformation Retrieval: Implementing and Evaluating Search Engines*1という本がある。確率的な情報検索モデルについて知りたくなったためこの本の8章と9章を読んだのだが、これが想像以上に素晴らしかったのでScrapboxのメモを編集しながら久々にブログを書くことにした。

内容的にはProbability Ranking Principleと呼ばれる原理から始まり(TF)IDF, BM25, 適合性フィードバック, クエリ拡張(Query Expansion)へと綺麗に繋がっていく。この分野は歴史があってやや強引な仮定も所々あるのだけど、その論理の展開が工学的な視点という意味で現代でもとても参考になる。以下その詳細と最後に感想を述べておく。

確率ランキング原理について

Probability Ranking Principle

  • (クエリに対して)関連度が高い文書をランキング(降順)で返すことがユーザの満足度を最も高めることに繋がるというもの

この原理に従って議論を進めていく。まず問題となるのは、あるクエリに対して対象の文書がどのくらい関連しているかをどのように確率で示すかということである。

この問題を解くため準備も兼ねて以下を考える。

準備

文書とクエリを表す確率変数として D, Q, 関連度を示す2値を取る確率変数として Rを導入して p(R=1|D=d,Q=q)を考える。
以下 D=d,Q=q DとQとして、 R=1 r, R=0 \bar{r}で簡約する。

ベイズの定理を使うと

\displaystyle p(r|D,Q)= \frac{p(D,Q|r)p(r)}{p(D,Q)}, \displaystyle p(\bar{r}|D,Q)= \frac{p(D,Q|\bar{r})p(\bar{r})}{p(D,Q)}

とできる。ここで logit(p)=\log(\frac{p}{1-p})を導入する。

  • ここがまず一つ目のポイントだろう。 logitは順序を維持した写像(Rank-equivalent transformations)なので以下はこの値を考える。

ある文書とクエリが与えられたときの r \bar{r} logitは、 p(\bar{r}|D,Q) = 1 -  p(r|D,Q)とすると

\displaystyle \log{\frac{p(r|D,Q)}{p(\bar{r}|D,Q)}} = \log{ \frac{p(D,Q|r)p(r)}{p(D,Q|\bar{r})p(\bar{r})}}

となり、ここで p(D,Q|r) = p(D|Q,r)p(Q|r)とできるから、さらに式変形すると

\displaystyle \log{\frac{p(r|D,Q)}{p(\bar{r}|D,Q)}} = \log{\frac{p(D|Q,r)p(Q|r)p(r)}{p(D|Q,\bar{r})p(Q|\bar{r})p(\bar{r})}} = \log{\frac{p(D|Q,r)p(r|Q)}{p(D|Q,\bar{r})p(\bar{r}|Q)}}

で表せる。展開すると

\displaystyle \log{\frac{p(D|Q,r)}{p(D|Q,\bar{r})}} + \log{\frac{p(r|Q)}{p(\bar{r}|Q)}}

になるが、第二項目の値は文書Dに関連しないので無視できる。

以上からPRPの元では各文書に対して

\displaystyle \log{\frac{p(D|Q,r)}{p(D|Q,\bar{r})}}...(1)

この値を求めてランキングにして並べればよいことになった!

  •  p(D|Q,r)のまま考えるのでなくlogitにすることで考えやすくなるというのは参考になる。

Binary Independence Modelの導出

ここで文書Dの再定義を行う。 D = (D_1, D_2..)というベクトルで表現し、各要素は語彙となる単語が出現したら1, そうでないときに0をとる確率変数とする。

  • 文書Dは構成する単語で表現できると考えている

ここで強い仮定が2つ出てくる。

仮定1

Assuption T: Given relevance, terms are statically independent.

  • 文書に出現する単語(term)は互いに独立しているというもの。BoWでお馴染み。
  • この仮定により(1)は簡単になる。

さてこの仮定のもとで(1)の p(D|Q,r)

\displaystyle p(D|Q,r) = \prod_{i=1}^{|V|}p(D_i|Q,r)

となり、同様に \bar{r}も同じ処理をできるので結局

\displaystyle \log{\frac{p(D|Q,r)}{p(D|Q,\bar{r})}} = \sum_{i=1}^{|V|} \log{\frac{p(D_i|Q,r)}{p(D_i|Q,\bar{r})}}

となる。だいぶ簡単になってきた。

仮定2

Assuption Q: The presence of a term in a document depends on relevance only when that term is present in the query.

  • ユーザのニーズと関連文書を紐づけるのはクエリのみである
  • 要はクエリに対応した単語によって関連性が決められるということ

この仮定を取り入れることで先ほどの式を計算することがかなり容易くなる。全ての語彙に対して計算するのでなく、クエリの単語だけを対象に計算すれば良くなったため。

具体的にクエリQをみると Q = q_i q_i=0となる場合は上記の仮定で考慮しなくて済むわけだから、その場合は \log{\frac{p(D_i|Q,r)}{p(D_i|Q,\bar{r})}} = 0でよい。

結局Queryとして出現しているtermだけが対象になるので q_i=1を簡略して

\displaystyle \sum_{t \in q}^{} \log{\frac{p(D_t|r)}{p(D_t|\bar{r})}}

と書ける。

次に文書Dについて個別にみていくと、文書の中にはクエリとなるtermを含まないものもあるので

\displaystyle \sum_{t \in q}^{} \log{\frac{p(D_t=d_t|r)}{p(D_t=d_t|\bar{r})}} - \sum_{t \in q}^{} \log{\frac{p(D_t=0|r)}{p(D_t=0|\bar{r})}}

としたい。そして第二項は仮定2から定数とみなせる(関連性はクエリから決定されるので)

ここでクエリを含む文書とそうでない文書で分けて考える。なおかつ第二項目を0にするために両方の項に工夫を加えると。。

\displaystyle \sum_{t \in (q \cap d)}^{} \log{\frac{p(D_t=1|r)p(D_t=0|\bar{r})}{p(D_t=1|\bar{r})p(D_t=0|r)}} - \sum_{t \in q \backslash d}^{} \log{\frac{p(D_t=0|r)p(D_t=0|\bar{r})}{p(D_t=0|\bar{r})p(D_t=0|r)}}

となり第二項は0なので結局

\displaystyle \sum_{t \in (q \cap d)}^{} \log{\frac{p(D_t=1|r)p(D_t=0|\bar{r})}{p(D_t=1|\bar{r})p(D_t=0|r)}} ...(2)

となる!これがBinary Independet Modelとして知られるモデルである。

IDFが導かれるまで

(2)を \sum_{t \in (q \cap d)}^{} w_tとおいて、 p(D_t=1|r) p_t, p(D_t=1|\bar{r}) \bar{p_t}と置くと

\displaystyle w_t = \log{\frac{p_t(1-\bar{p_t})}{\bar{p_t}(1-p_t)}} (= \log\frac{p_t}{1-p_t} + \log\frac{1-\bar{p_t}}{\bar{p_t}})

と変形できる。この方程式はRobertson/Sparck Jones formulaと呼ばれる。

ここで全文書の数を N, tを含む文書の数を N_t, 関連文書の数を N_r, 関連文書かつtを含むものを N_{t,r}として、 p_t, \bar{p_t}最尤推定を使うと

\displaystyle w_t = log \frac{N_{t,r}}{N_r - N_{t,r}} + \log\frac{N - N_r - N_t + N_{t,r}}{N_t - N_{t,r}}

が成り立つが、ここで N N_t, N_r N_{t,r}の関係を考えると前者は後者に比べてかなり大きい値を取ると想定できる。すなわち

\displaystyle w_t = logit(p_t) + \log\frac{N-N_t}{N_t}

とみなしてもよいだろう。

CroftとHarper(1979)は p_t = \frac{1}{2}かつ N_t Nに比べてかなり小さいと仮定できることから w_t = \log\frac{N}{N_t}を導いた。これは標準的なIDFである。

  • メモ:  p_t p(D_t=1|r)だったわけだから、 p_t = \frac{1}{2}というのは関連文書にクエリが出現する確率は半々ということ。必ずしも関連文書にクエリが出現するわけではないからこれは妥当な仮定とされているが、適合性フィードバックによってこの確率をもっと正確に見積もることはできる。これが適合性フィードバックのベースの一つとなる。

TF(単語頻度)の扱い方

Binary Independence Modelの導出のところまで戻ると文書Dは各単語が2値の確率変数を持つベクトルとして表現されていたのだった。単語の頻度を考慮するために各単語の頻度 F_tを確率変数として D=(F_1,F_2...)というようにさらに再定義する。

Binary Independet Modelの式は

\displaystyle \sum_{t \in q }^{} \log{\frac{p(F_t=f_t|r)p(D_t=0|\bar{r})}{p(F_t=f_t|\bar{r})p(D_t=0|r)}}

となる。さて関連文書と非関連文書の単語頻度を確率変数として扱いたいわけだが、どのようなモデルを考えればよいか。

ここで以下のようにElitenessを新しい概念として導入する。

Elitenessの導入

 p(F_t=f_t|r) p(F_t=f_t|\bar{r})を考えたいわけだが、ここでeliteという概念を導入する。

  • 文書があるトピックについて論じているときそれはelitenessを持つと考える
  • そしてelitenessは単語頻度に影響を与えると考える

すなわち関連文書の単語頻度はelitenessを導入することで、それぞれ別の確率モデルから単語頻度が決まるとみなすことができる。そして単語頻度を決める分布としてポアソン分布を仮定する。

簡易的なTwo-Poisson Model

Two-Poisson Modelの詳細については本書を参考にしてほしいが、RobertsonとWalker(1994)がTwo-Poisson Modelに期待される性質を満たした簡易的な重み付けとして

\displaystyle  \sum_{t \in q }^{} \frac{f_{t,d}(k_1+1)}{k_1+f_{t,d}} w_t ...(3)

を提案している。kはパラメータで通常1から2の間の値が用いられ、k=1.2が論文ではよく採用される。

  • Q. なぜ対数オッズである w_tに重みを掛けて良いの?
  • Q. ポアソン分布の導入がなぜ最終的に↑の式になるの?
    • A. Two-Poisson Modelが直接簡易式になるわけではなく、Two-Poisson Modelが w_tに対して及ぼす影響と同じ性質を持つ式を代わりに取り入れたということ。こういう技もあるんですね。

 f_{t,d}は単語の頻度を示すがこれがとても大きくなっても重みは (k_1 +1)w_tに留まる。要は単語頻度が増えるに従い重みがsaturateするような関数となる。

  • 関数の特徴を調べて簡単なもので置き換えるのはなるほどという感じ。

ちなみにBM11の頃の論文だと  \sum_{t \in q }^{} \frac{f_{t,d}}{k_1+f_{t,d}} w_t となっていてサチることがわかりやすい。(k+1)の項は定数になるのでランキングに影響は及ぼさないが f_{t,d}の値と対応づけやすいようにするための工夫だそうだ。

以下の論文にこの辺りの事情が書いてある(p.361あたり)

BM25について

前述した(3)は文書の長さを加味していなかった(ポアソン分布を導入したときに全文書は同じ長さだと仮定していた)。
文書の平均長を使って以下のようにスケーリングさせる。

\displaystyle f'_{t,d} = f_{t,d} * (l_{avg}/l_d)

しかし長い文書の方が質の高い文書である可能性が高いと想定することもあるだろう。パラメータbを導入してスケーリングの影響度合いを調節できるようにする。

(3)と上記をまとめると以下の重み付けの式が導出できる。

\displaystyle  \sum_{t \in q }^{} \frac{f_{t,d}(k_1+1)}{k_1 ( (1-b) + b(l_{avg}/l_d) )+f_{t,d}} w_t

これはBM25として知られている。パラメータとなるbは0.75がよく使われるらしい。

  •  (l_{avg}/l_d)がbにかかっているのは f_{t,d}に元々かかっていたものが約分されてるから。

適合性フィードバックによる拡張

最後に確率的検索モデルが適合性フィードバックについてどのように方針と理論的土台を与えるかを簡単にメモ。

これまで検索モデルは以下の2点で改善の余地がある

  • (2)式での p_tに対する見積もり
  • ユーザが潜在的に想定しているクエリの追加(Query Expansion)
    • Assuption Qによって適切なクエリ拡張は関連性に対して良い影響を及ぼすだろう

Term Selectionによる明示的な適合性フィードバックも解説されているが、擬似的な適合性フィードバック(Pseudo-Relevance Feedback)についての記述が秀逸だったのでメモする。

擬似的な適合性フィードバック(Pseudo-Relevance Feedback)について

適合性フィードバックはユーザによる明示的なインタラクションを必要とするが、ユーザはこのような作業を好まないとされている。
Pseudo-Relevance Feedbackは、上位k(=20)件の文書を関連文書と仮定しm(=10)個程度の特徴語を抽出し、元々のクエリに追加するというものである。

ポイントになるのは以下の考え。

k=20とすると擬似的適合性フィードバックの仮定から n_{r} = 20とできるから、各単語の n_{t,r}をカウントすることで p_tを推定することができる。さらに N, N_tはわかっているわけだから、Robertson/Sparck Jones formulaがこの手法で拡張できることがわかる!

  • 具体的には拡張するクエリ(元々のクエリも含む)の p_tを求められることと、ユーザの入力したクエリを関連文書の単語で拡張できる。なお拡張クエリの重みは1/3程度にすると実証的に良いようだ。

Pseudo-Relevance Feedbackは再現率と精度に良い影響を与えることが知られており、本書ではBM25にPRFを組み合わせた形式が有効であることが示されていた。

感想など

冒頭で述べたように仮定や導入しているモデルにナイーブさがあるが、どうしてもヒューマンファクターが絡みがちな情報検索という分野に確率的な視点を導入することで、不確かさについての議論がしやすくなる点は評価したい。個人的にIIR本よりも例が豊富で記述もわかりやすいので好み(といってもIIR本は日本語訳版しか読んだことはないんだけど)。

あとメモを書き上げてから他のひとが同じ章の記事を書いてる*2ことに気づきました。自分のメモと見比べてみると視点の違いとかが垣間みえて面白いですね。