2023-06-23 サイボウズラボ勉強会

  • 前回PluralityとPolis勉強会では、主にPluralityの文脈を解説した、Polisの話は軽く触れるだけだった
  • その後
  • Polisはより良い熟議のための便利な道具
    • なのであちこちの応用で使われている
    • しかし「Polisを入れたら熟議になる」のような魔法の杖ではない
    • いろいろな応用を観察する中で、状況とのミスマッチや、変更したいところが具体的に見えてきた
    • 道具を状況に合わせて調整するためには、道具が機能する仕組みを知る必要がある
    • そこで今回はPolisの内部を掘り下げる
  • その前に民主的プロセスについて少し文脈を補足する

民主的プロセスについて

  • 色々な人と話して反応を見て思ったこと
  • OpenAIによる定義
    • 「民主的プロセス」とは、
  • 投票による多数決は(B)(C)を満たしているけど(A)が怪しい
  • 熟議をもっと支援する必要がある
    • ここにフォーカスした言葉が「熟議民主主義
    • デジタル技術によって新しい形のコミュニケーションができるようになった、だから熟議をデジタル技術によって支援するぞー、というのがデジタル民主主義の重要な側面
      • デジタル技術の前のコミュニケーションとは、例えば政治家が駅前で演説したり、政治家に意見を伝えるために陳情にいったり。
      • コミュニケーションの効率が悪かった。
    • Polisは「熟議をスケールさせる技術」
    • 今年に入ってLLMの技術の進歩によって「LLMを組み合わせればもっと良い熟議のメカニズムが作れるのでは?」という状態になっている
  • デジタル投票」に関して補足
    • 台湾やエストニアがデジタル投票に積極的なのは地政学的リスクによる
    • 2014年〜、香港では「選挙の無意味化」とそれに反対するデモ(雨傘運動)が起きた
    • 台湾も同様の「選挙の無意味化」が行われることを危惧している
      • 軍事力によって「今の物理世界での選挙」が「悪いもの」に変えられてしまう可能性がある
    • この可能性に対抗するために「選挙」をオンライン世界に移動したい
    • human.iconオンライン世界の方が防衛しやすい?
    • そういう背景がこれらの国のデジタル投票推進の背後にあるわけなのだけど、ぶっちゃけ今の日本には台湾が感じてるような脅威がないので、大部分の日本人がこの問題意識に共感できないのは当たり前
    • なので、西尾個人の意見としては「日本でPluralityを推し進める上ではデジタル投票の話をしても理解されにくいので『みんなの意見の分布が可視化されるのは有益だよね』という側面にウェイトを置いて説明した方がいい」と思っている
      • つまり「Polis面白いからやってみよう」になる
  • 日本の問題はシルバー民主主義だけど、余談なので今回は割愛
  • human.icon「代表性」について、デジタル技術によって「代表者」が究極的には「個人」にまで小さくできる?
  • nishio.iconオフラインの代議制民主主義では高々数百人で全国民の代表をしなければならなかったので、少数派意見を代表することができなかった
    • デジタル技術によって個人が意見を発信できるようになった
    • しかし現状のSNSなどでは逆にそれを束ねることができなくて情報洪水になっている、小さいだけでは理想状態ではない
    • なので良いバランスやクラスタリング(=代表)の仕組みが必要になっている

Polisの変えたい点

  • 投票者が7人以上にならないと可視化されない

    • 人数少ない時に可視化をしないことは、個々人の意見が見えにくくなるメリットがある
    • 少人数の社内議論を可視化したいシチュエーションでは不便
  • 一般ユーザの意見の投稿は「賛成」とみなされる

    • つまり「賛成の人と反対の人とどちらが多いんだろう?」という気持ちでの投稿ができない
    • でもTwitterなどで投票が作られるシチュエーションを見ていると「みんなどう思ってるのかな?」も多いよね
    • 現状のPolisは自分が投稿した意見に他の人がどう投票したかを知る手段がわかりにくい
      • 詳細レポートで個別意見の得票を見る
      • 運良くクラスタの主要な意見に選ばれれば可視化でも見れる
    • 個別意見の投票へのパーマリンクがあるといい
      • 投票するとみんなの投票結果が見れる
      • 投票済みの場合は最近の結果が見れる
      • このURLをシェアすると、他の人も投票できる
      • 意見投稿者がSNSに投稿するインセンティブが生まれる
  • 投票を更新できない

    • 「選挙」「投票」のイメージで捉えていると、後から投票を変えてはいけないように思ってしまう
    • だが他の人のアウトプットを見て自分の意見を変えることこそ「熟議」
      • 変わらないなら単なる統計調査に過ぎない
    • 現状、自分が何にどう投票したのか振り返るビューがない
      • そこから投票内容を変更できるといい
    • 多分これはPolisが「考えない人」の「感情」を集めることにフォーカスしているから
      • READMEでsentiment gathering platformという表現をしている
      • 西尾がPolisをやったときに、参加してフィードバックを返してくる人には「考える人」が多い
      • 僕も個人的には「1000人の考えない人の感情」より「10人の考える人の思考」を観察したい
      • 民主的プロセスとしては「少数の人が考えて決めた」だと、参加できなかった人の納得感が得られない
        • 納得」という主観的な感情を作り出すことが必要
    • 今の設計では「考える人」の「知りたい気持ち」に応えることができない
      • 「Yes/Noを答える前に、判断材料になる資料が示されたらいいのに」という意見がある
        • 実際にそれをやると資料を読みたくない多数派が離脱するだろう
      • 人には個人差があるから、一つの方法で全員のニーズを満たすことはできないのだと思う
      • Polisは裾野を広くするアプローチ、広い範囲にリーチして、そこから興味を持って深く関わりたい気持ちになった人を掬い上げて集める仕組みが必要
  • コメントを見てリプライを書きたくなる

    • 意見に対して直接意見をかけないことがPolisの意図的なデザイン
    • ところが、しばしばユーザの「自分の考えを書きたい気持ち」が高まる
      • この状態は、言語化のインセンティブが高まってる
      • 素直に書かせた方がデータが増えて有益では?
      • それを直接「元の意見を書いた人」にフィードバックすることに問題があるだけ
      • 返信を書くこと自体が問題なのではない
      • リプライをLLMが受け止めて、有益なフィードバックに変換したらいいのでは
  • モデレーションの問題

    • 西尾のPolis運用では大体いつも「モデレーションなし、ユーザの投稿は即座に他のユーザから可視になる」という設定にしている
      • “No comments shown without moderator approval”
    • この設定をオフにすれば人間のモデレーターが承認するまで表示されない(なおデフォルトはオフ)
    • このモデレーションには問題がある
      • 人間の負担が大きい
      • モデレーション待ちの非表示期間による機会損失
      • モデレーターのバイアスが入るのではという懸念
    • 実際、バイアスは入る
      • 「トピックに関係ない意見である」という判断が個々人のトピックに対する意見によって影響を受けるから
      • 西尾はKJ法のバックグラウンドがあるからこう考える
        • 一見関係がないように見えても、後から関係が見出されるかもしれない
        • 少なくとも一人が関係があると思って投稿したわけなのだから、早まって捨ててはいけない
        • →だったらどうせ捨てないのだからモデレーションしなくていいのでは
      • 現実的には「感情的だったり、要点が不明確だったりする文書」がたくさん投稿されて、投票者がゲンナリする問題が起きる
        • LLMがなんとかして〜的な話になる
  • クラスタが二つになると面白くなくなりがち

    • 賛否が分かれてるテーマについて投票をして、賛否の二つに分かれた可視化をされても「当たり前〜」となる
    • 細かく見ると興味深いデータがあったりするが、大部分の人はそこに意識がいかない
      • 二つに分かれてるなー
      • 自分は多数派だ良かった
      • 自分は少数派だ、このシステムは良くないものだ
    • より深く考えることを促す上では、クラスタを3個以上にした方が良いのかも?
    • human.icon「面白いこと」を目指すのか「問題解決」を目指すのか
    • nishio.iconそれは重要な視点。大勢の人の参加を促すためにはまず面白いことが重要かなと思う。
    • human.icon面白さのために統計結果を歪めると問題解決の妨げになるのでは
    • nishio.iconそれは確かにそう、歪めるのではなく、別のビューを追加するのが良さそう
  • 過去の対話から投票結果を引き継ぎたい

    • 一つのconversationを長く使うのはあまり体験が良くない
      • コメントが増えていく一方なので
      • 定期的に仕切り直したい
    • しかし毎回ゼロリセットされるのもそれはそれで微妙
    • 何を引き継ぐか?
      • 合意に至ったコメントは引き継がなくていい
      • 「わからない」が多かったコメントは、補足情報を提供したり、わかりやすく書き換えたりしてやり直したい
      • 賛否が分かれてるものは再投票が可能なら再利用したい
        • ただし投票傾向がほぼ同じコメントはいくつもいらない

Polisの仕組み

  • 論文:
  • 投票行列を作る
    • ユーザと意見のそれぞれについて+1/0/-1/NaNが入った行列
    • まだ投票してないことはNaNで表現される
  • 欠損値を意見ごとのユーザ平均で埋める
    • 投票した人がみんな賛成している議題に関しては、投票してない人も賛成だとみなす
  • これで「-1〜+1」の値が入った行列ができる
  • 基本的にはここから「高次元データの可視化」をやるだけ
    • 多種多様な方法がある
    • Polisでもいろいろ試されている
    • 基本的には[主成分分析]
  • 平均値のケア
    • 欠損値を平均値で埋める関係上、必然的に平均値付近にたくさんのサンプルが集まってしまう
    • これをこのままクラスタリングすると、平均値付近に「まだあまり投票してない人」のクラスタができて面白くない
    • そこで投票済み意見数を使って調整する
      • 平均からのベクトルを、すべて投票してる人は1倍、半分しか投票してない人はsqrt(2)倍にする
    • これを少なくとも初期は使っていたが、その後「賛否の分かれている意見から先にユーザに見せること」によってこの調整の必要性が減ったと書いている
      • 現状の実装で調整をしてるのかしてないのかはコードを読んでもよくわからなかった
  • クラスタ個数未定でのクラスタリング
    • これも昔から多様な方法がある
      • 階層的クラスタリングが代表的
      • しかし、クラスタ個数は決めなくて良いが、閾値を決めなければいけない
    • PolisではK平均法シルエット係数を使っている
  • imageimage
    • Python実装の計算でそれっぽい結果は出せたけど、微妙に形が違うのはなぜなんだろう
  • クラスタを代表する意見
    • 代表性尺度
      • image
      • Pvはベータ分布の最頻値だと思う
        • ベータ分布はベルヌーイ分布共役事前分布
        • ベルヌーイ分布(英: Bernoulli distribution)とは、数学において、確率 p で 1 を、確率 q = 1 − p で 0 をとる、離散確率分布である。

        • つまり、あるグループgの中の人があるコメントcに投票vをするかどうかは確率pのベルヌーイ分布に従う、と考えてこのpをベイズ推定してる
    • 論文的にはさらにFisherの正確確率検定をすると書いている
      • フィッシャーの正確確率検定 - Wikipedia
      • フィッシャーの正確確率検定 … 2 x 2分割表(2つの集団が2カテゴリーに分類されたデータを扱う場合、自由度は1)の2変数の間に統計学的に有意な関連があるかどうかを検討するのに用いられる。… 標本の大きさが大きい場合には統計量の標本分布が近似的にカイ二乗分布に等しくなるのでカイ二乗検定が用いられる…フィッシャーは、このような数値の組み合わせが得られる確率p が次のような超幾何分布で表されることを示した

    • ソースコード的にも超幾何関数を使ってる
      • 超幾何分布 - Wikipedia
      • 超幾何分布(ちょうきかぶんぷ、英: hypergeometric distribution)とは、成功状態をもつ母集団から非復元抽出したときに成功状態がいくつあるかという確率を与える離散確率分布の一種である。男女・合否などのように2種の排他的属性に分割できる有限母集団からの非復元抽出に適用される。

    • つまりコメントcへの投票が「vか」「それ以外か」の二種類の排他的特性があって、それが「グループgの人」「グループg以外の人」という二つの集団から収集されてる
    • 「グループによって違いがあるか?」を知りたい
    • そこで「グループによって差がない」と仮定して、その場合に観測結果以上に過激な結果が得られる確率を求める
      • ここまでが正確検定の話
    • この確率になぜかRvgcを掛けてるんだけどなんでこれやるんだっけ?
      • 論文には「推定効果量と効果に関連する統計的信頼度の両方を反映させる」と書いている
      • 出来上がった値の数学的解釈がいまいちよくわからない
    • 最終的にこの値でソートして小さい方から選ぶと、そのグループを特徴づけるようなコメントが選ばれている
      • image
      • 小さい方がいいp値に、大きい方が良さそうなオッズ比を掛けてて謎
      • p値だけでいいのでは??
    • 論文では「まず賛成コメントから有意なものを選び、ない場合は反対コメントから選ぶ」と書かれている
      • 人間、否定形が理解しにくいので。
    • コメントごとのコンセンサスの度合いはで計算する
      • これはつまりグループの人数は無視して、各グループが賛成する確率を掛け合わせている
      • 一つでも0なら0になる
      • 多数派グループだけで決まらず、少数派も含めたすべてのグループからの賛成を集めなければならないってこと
      • human.icon常任理事国の拒否権みたい
      • nishio.icon似てる。
        • YesかNoかの二値ではなく「よりコンセンサスに近い」が表現できるようになったところが良いところ
        • これを可視化して「よりコンセンサスに近づけるためには、このグループの人を説得する必要がありますね」みたいなサジェストができるといいかも
        • human.icon少数派の専門家集団が反対しているケース、専門家を説得する?
        • nishio.icon多数決をすると少数派の専門家の意見は潰されるわけだけど、この方法だと説得のためのコミュニケーションが発生するので良さそう
          • 専門家側はエビデンスなどを出してきて対抗する
          • 「専門家が大衆を説得する」という方向を暗黙に仮定しがちだが、大衆が「難しくてよくわからないから耳を塞ぐ」ができてしまう、逆をやるのは面白いかも
            • LLMの支援は必要そう
          • 現状のPolisは「説得のためのコミュニケーション」の場を伴ってないので、何か別の場が必要
  • というわけで若干不安は残るけど、投票の生データCSVから、Pythonを使って、Polisのバックエンドがやってる統計処理を再現することができた

改良案の再検討

  • 投票者が7人以上にならないと可視化されない
    • 見た目はさておき可視化(ダイジェストレポート)は2人目の投票段階からできる
    • なので準備した人が投票してからURLをシェアすればいい
    • もちろんこの場合1人目が何を投票したかわかるので、それで問題ないユースケース向け
      • 社内で口頭で議論して収拾つかないから整理しよう的なシチュエーションだと特に秘匿したいことはないと思うのでこれでいいんじゃないかな
    • 特に10人程度の少人数ケースではPCAによる次元削減ではない方法での要約が有用なケースがありそう
      • 具体的にはcontroversialな意見についてLLMが「この意見は賛否が分かれていますが、それぞれの立場から掘り下げてみましょう」みたいなフィードバックをしたりとかね
  • 一般ユーザの意見の投稿は「賛成」とみなされる
    • 単なるUIの問題、DBに1を書き込むのをやめればいい
  • 投票を更新できない
    • 単なるUIの問題、DBを更新すればいいだけ
  • コメントを見てリプライを書きたくなる
    • 参加者がケンカしうるシチュエーションで、このコメントをどう使うかは統計と無関係なレイヤーの工夫が必要だね
    • 社内ユースなどでメンバー間に信頼がある場合だったらリプライできるようにしてもいいんじゃないかな
    • コトノハ的な画面が良い?
  • モデレーションの問題
    • これもLLMのレイヤーの話
    • メンバー間に信頼があるなら素通しで良いかも
  • クラスタが二つになると面白くなくなりがち
    • クラスタを3つ以上に強制することはできる
    • このシチュエーションでは「第一主成分軸」が「自明な対立軸」になる
      • なので、それを捨てて他の次元でクラスタリングしたら面白いかも?
      • 対立があるときに、その対立軸上での押し引きではなく、別の軸を模索するとうまくいくことがある
  • 過去の対話から投票結果を引き継ぎたい
    • できる
    • 投票傾向がほぼ同じコメントはいくつもいらない

      • これは要するに投票分布の各主成分軸方向の分散が大きいコメントをピックアップすればいい
  • まとめ
    • 統計レイヤーでいくつか解決できる目処が立った
    • 残りのいくつかはUIレイヤー、いくつかはLLMのレイヤー
    • Polisの毎秒更新の可視化は見ていて面白い
      • 毎秒更新であることに面白い以上の意味があるかは微妙
      • もっと別の可視化方法を模索しても良いかも?