Amazon Echoデバイスで動く時打ち時計のAlexaスキルを公開しました

こんにちは、hapicomの白川です。

突然ですが「時打ち」をご存じですか?

時打ちとは、振り子時計などで正時にボーン、ボーンと時間の数だけ鐘の音が鳴るアレのことで、おそらくほとんどの人は見たことも聞いたこともあると思いますが、それが時打ちと呼ばれることはあまり知られていないのではないかと思います。

ちなみにカッコー時計(鳩時計)も時打ち時計の一種で、英語では時打ち時計をstriking clockと言います。

自宅や職場などでの作業でペースメーカーのような役割を果たすことから、弊社内では時打ちの有用性がにわかに注目されていましたが、相手に時打ちを勧めるときにわざわざ(今ある時計を置き換えてまで)時打ち時計を買ってもらうというのも微妙な感じでした。

ということで今回、Alexa(アレクサ)搭載のEchoデバイスで時打ちが可能になる時打ち時計スキルというものを開発しました。

もしお手元にEchoデバイスがあれば、今すぐに無料でお使いいただけます。

Echoデバイスとは何か

先にAmazon Echoについて簡単に紹介しておきます。

Echoは音声アシスタントであるAlexaを搭載したAmazonスマートスピーカーです。

amzn.to

amzn.to

https://amzn.to/4gO30KIamzn.to

音楽を流したりすることはもちろん、家にある様々なデバイスを声で操作したり、時間指定などトリガーを設定して自動化したりすることができます。

使いこなせば職場の効率化などにも使える便利なツールですが、現在のAlexaは音声アシスタントとしては気が利かないと感じるような応答や間違いも多いですし、自動化のためのキーとなる「定型アクション(Routines)」はiPhoneAndroidでAlexaアプリを開いて設定する必要があるため自分で色々できる玄人向けの機能という印象があります。

ですがAmazonは最近の生成AIの進化を取り込んだ新たなバージョンのAlexaを計画しており、その中には定型アクションの設定をAIとの会話によって簡単にするという改良も含まれているため、今後Echoによるスマートホーム化やスマートオフィス化の敷居が下がるのではないかと期待しています。

時打ち時計スキルの概要

時打ち時計は、Amazon Echoバイスで呼び出すと現在の時間に対応する回数だけ鐘の音やチャイム音を鳴らすAlexaスキルです。

それだけです。が、シンプルで使い勝手のよい時打ちスキルを自分で作っておくと色々要望とかも後で盛り込めるので一旦作ってみました。

時打ち時計スキルのアイコン

使い方

準備するもの:Echoデバイス、Alexaアプリ(iOS/Android

まずはAmazonのヘルプページにしたがってEchoデバイスをAlexaアプリと連携させます。

次に、Alexaアプリでスキルを有効化します。

アプリの「その他」から「スキル・ゲーム」を選択し、「時打ち」などのキーワードで検索して時打ち時計スキルを探し、「開始」ボタンを押します。この時点でスキルが有効化されます。

そして最後に、定型アクションで正時の時打ちをセットします。

以下の例では10時の時打ちを設定します。

アプリの「その他」から「定型アクション」を選択し、実行条件とALEXAのアクションをそれぞれ設定していきます。

実行条件については、「スケジュール」→「時間指定」と選択し、10:00を指定して「次へ」を押すと時間がセットされます。

ALEXAのアクションでは、「スキル」→「マイスキル」→「時打ち時計」→「鐘を鳴らす」と選択し、無料で使用できる1番の「振り子時計の鐘」を選択します。

最後に「保存」を押すと応答するデバイスを選択する画面になりますので、お手持ちのEchoデバイスを指定してください。

ちなみに以下のQRコードをAlexaアプリの入ったスマホ等で読み取るか、もしくはこのリンクをタップすると、10時に1番の振り子時計の鐘を鳴らす定型アクションが簡単に作成できます。

10時に鐘を鳴らす定型アクションを作成するQRコード

えっ、11時とか12時とか一個一個設定すんの?という疑問というか苦言が飛んできそうですが、設定するの最初だけなんで!1回だけやったらあとは毎日動きますんで!

利用シーン

今のところペースメーカーとしての利用を想定しているので、家での作業はもちろん、長時間作業を行う職場、作業所、工場などに合うのではないかと思います。

また時報よりも空間に馴染みやすいため、音のインテリアとして鐘の音を鳴らすという考え方もあります。

何か面白い活用方法を思いついたらぜひコメントで教えてください!

補足

Alexaスキルは実はEchoデバイス上ではなくクラウド上で動くため(この制限なんとかしてほしい…)、Alexa-hostedで構築すれば無料枠はあるものの、サーバの費用が使われれば使われるだけかかります。

人気のAlexaスキルも人気があるが故に費用がかかって維持が難しいようで、公開されているスキルでも実際には使えない状態に陥っていたりすることが多々あります。

そこでスキルを維持し続けるため、2番以降の鐘の音への変更権を99円(Amazonプライム会員は79円)のサブスクにしています。

無料でもスキルを十分に利用できますが、もし気に入っていただけたら別の音も使ってみてください!

鳩時計の音や学校のチャイムの音にも変えたりできますし、利用者からの要望があれば音の種類も追加されるかもしれません。

その他

非デジタルな受付に対応せよ!WebフォームとFAXと郵送で受付体制を整える

hapicom Inc.ことハッピーコンピューター株式会社では、様々な業界におけるご相談やご依頼の中で「一筋縄ではいかない問題」に直面することが多々あります。

本問題解決シリーズでは、これまでにあった一筋縄ではいかない問題について、公開できる範囲でストーリー仕立てにしてご紹介していきます。

あまりオープンな場ではみられないような案件が多いので、こんな世界もあるのかと楽しんで読んでいただければ幸いです。

非デジタルな受付に対応せよ!問題編

hapicomメンバーは会議室で話を聞いていた。

お相手は某出版社の役員である。

ご存じの方もいらっしゃると思われるが、作品の売り上げは出版社に入ってくるため、そこから作家さんに印税を振り込むのは出版社側で行なわなければならない。

今ミーティングで議題に挙がっているのは、この印税の行方についてである。

あるはずのお金がない、という横領のような話ではなく、むしろ余っているのだ。

その実態を紐解いていくと、遠い昔に出版された作品は時の流れとともに作家さんの状況も変化し、例えば死去するなどして振込先が分からなくなるようなケースが出てくるというのが原因だった。

個々の金額が微々たるものであったことから行き場のない印税はそのままにされていた*1が、積もり積もってそこそこの金額になっており、一度きちんと作家さんや遺族の方などに確認して、分かる範囲で振込先や今後の連絡手段などの情報をアップデートしましょうということになった。

--

さてどうしたものか。

いつもならGoogleフォームなどを使って受付用フォームをさくっと作り、いついつまでに情報を入力してくださいとメールでご案内するところだ。

だが、今回ばかりはWebフォームでの受付のみに頼るわけにはいかなかった。

なにしろ手元の台帳に書かれている連絡先は住所と電話番号だけでメールアドレスなどなく、パソコンもスマートフォンも持っていない、つまりWebフォームへのアクセス手段がない人がいる可能性があったためだ。

まず、ご案内の通知は郵送一択だ。

宛先不明で届かなかったら個別に電話して、それでも無理ならもう連絡手段はない*2ので諦めるしかない。

情報の収集については、Webフォームでの受付はもちろん主力ではあるが、紙ベース、つまりFAXや郵送での情報提供手段は用意しなければならない。

今回、どのような形で受付体制を整えれば丸く収まるだろうか。

非デジタルな受付に対応せよ!解決編

今回、問題としては「Webフォーム、FAX、郵送の三つの手段でそれぞれ権利者の情報を集める」ということになりますので、じゃあやればいいじゃんと思うかもしれません。

ですが、相手の会社にはそれを人力でこなすだけの余力がなく、専任で人を配置することはもちろん、この案件に気を回せる人の確保すら難しい状態で、愚直に進めば色んな方向から集まった情報をまとめられない可能性がありました。

そのため、送られてきた情報を絶対に取りこぼさないような形でシステムや体制を組む必要がありました。

解決方法

結論からお話しすると、hapicomから提案した手段は以下の図のような構成での集約でした。

通知文書、記入用紙、WebフォームへのQRコード等を各権利者宛に郵送し、Googleフォーム、FAX、郵送のいずれかの手段で現在の情報を返してもらうという形式です。

なお、これらとは別にTwilioを用いたIVR(電話の自動応答や録音、書き起こし)による不明点などのお問い合わせ対応も行いました。

1. Googleスプレッドシートに情報を集約

最終的には三つの方法で送られてきた情報を一箇所にまとめる必要がありますが、Googleスプレッドシートであれば、Googleフォームで入力された情報が自動的に入ることや、複数人でいつでも遠隔で閲覧または編集(権限操作含め)できるという利点があります。

2. Googleフォームへの入力代行

FAXや郵送といった紙ベースでの情報提供の場合、相手の会社の人もしくはhapicom側で内容を確認しつつ手作業でGoogleフォームへの入力を代行します。

スプレッドシートに直接記入していく方式は、ITに不慣れな人だとうっかり上書きしてしまったりする事故が考えられるため、スプレッドシートへのデータ入力は必ずGoogleフォームを経由させました。

3. FAXをIP-FAXで受け、Googleドライブの指定フォルダに自動で保存

漏れが最も発生しそうな、FAXで送られてきた用紙が自動的にGoogleドライブの指定のフォルダにファイルとして置かれるようにした点が、この受付体制の重要なポイントだと思います。

TwilioのプログラマブルFAX*3を使い、Twilioの専用のFAX番号宛に送られてきた書類がそのままGoogleドライブのフォルダにPDFファイルとして置かれます。

指定のフォルダにあるファイルは未処理のものとして、必ずGoogleフォームへの代行入力が行われることを保証します。

4. 相手の会社での人手作業を郵送されてきた用紙に集中

相手の会社には「郵送で送られてきた用紙だけ、確実に特定の書類入れなどに置かれるようにし、それをGoogleフォームに手作業で入力するようにしてください」と指示します。

Webフォームは自動入力、そしてFAXで送られてきた用紙も遠隔でhapicom側から見られるため、相手の会社の人には最小限の注意をお願いする形をとれました。

また、郵送での返信以外の手段を二つも用意していることで、切手を貼付した封筒を同封しなくても許されるのではないかという少し狡い作戦があり、結果的には郵送を選択される方はほとんどいませんでした。

このような方法により、最小限のコストで複数チャネルの受付体制を整え、権利者の情報のアップデート作業を完遂させました。

全自動化への道

上記のような問題をITを駆使して解決するとなると、FAXも郵送も可能な限り自動化したくなるところですが、今回はいくつか理由があり、GoogleスプレッドシートGoogleフォームでのデータ入力を軸とし、IP-FAXを導入する程度のITの導入としました。

理由の一つとして、送付先の整理や通知文書等を各権利者に送る作業からhapicomが関わる必要があったことが挙げられます。

それらの作業を進めつつ、確定的にできるかどうかわからない自動化(OCR:用紙に記入されたテキストの認識、スロットフィリング:用紙に記入されたテキストからの各項目抽出)を寄与のものとして走り出すことができなかったという現実的なハードルがありました。

また精度面で100%を達成できないのであれば結局人が介在せざるをえないため、時間や労力の都合上、100%を達成可能な自動化としてIP-FAXのみを導入したということになります。

複数を起点に発生するデータの流れを全て「Googleフォームへの入力からスプレッドシートに記録」という同じ終着点にもってくることで、意外と自動化を多用しなくてもすっきりとしたシステムとなりました。

もし今後、長期的に複数チャネルの受付体制を維持し続ける必要がある場面があれば、どこまで自動化できるのかという問題にチャレンジしてみたいですね。

*1:元々、振込手数料の関係で一定額を超えたら振り込みをするという契約になっていたようです。

*2:実際には名が通っている方であればこちらから連絡先を探してコンタクトを取ることは可能ではありました。

*3:2024年12月現在、TwilioのプログラマブルFAXサービスは終了しており利用できませんが、日本で使えるAPI提供のあるIP-FAXサービスは他にもいくつかあります。

セッティング不要!すぐに使えるYouTubeライブ配信の撮影機材セットを作ってみた

「動画の配信・収録がしたいけどセッティングが面倒くさい・・・」

つい先日社内で出てきた言葉です。

最近はサービスの案内や説明を動画で見る機会が多くなりました。弊社でも動画を活用していきたいと以前から声が上がっています。しかし、カメラや収録機材を出してきて、たくさんのケーブルをつないで・・・となると収録をはじめる前にくたびれてしまいます。

なので思い立ったときにパッと収録できるのが理想的です。

まず前提として、

  • 設置するのは照明ダクトレールのある会議スペース
  • マルチカメラにしたい(話者だけじゃなくて手元のアップや別アングルのカメラが欲しい)
  • セッティングしたまま使用していないときに邪魔にならない
  • セットチェンジも極力簡単にしたい

という事で今回作成したのが「ダクトレール吊りカメラ」と「多機能カメラワゴン」です。

ダクトレール吊りカメラ

収納だけじゃない多機能カメラワゴン

ダクトレールに吊り下げるのは照明だけじゃない

幸い、会議スペースには照明ダクトレールがあったのでそれを活用することにしました。

ダクトレールとフィクサーの連結部(試作)

メインカメラはOBSBOT Tail Air: AI搭載 4K PTZストリーミングカメラです。

出力インターフェースに、NDI、Micro HDMI、更に有線LanとUSB Type Cにも対応しているので様々なシチュエーションに対応可能で、ハンドジェスチャーでズームや録画の制御まで出来るのでコントローラーがいらない!というのも今回の趣旨にとてもよく合いました。

このカメラを長尺(60~90cm)のフィクサーでつり下げられる様に3Dプリンターでパーツを作成。写真にはありませんがフィクサーのベース部分に落下防止ワイヤーを取り付け。 接続部を引っかけシーリングにすることで脚立を使わなくてもひねるだけで簡単に脱着ができます。ベース部分にUSB-C電源アダプターを内蔵したので給電も可能になりました。

実際に使ってみると脱着が簡単。想像以上に簡単でびっくり! ダクトレールの中央と端にそれぞれフィクサーの受けとなるシーリング変換プラグをつければ、好きな位置ですぐにカメラをセットしたり端っこに寄せて収納したりできます。

周辺機器の収納とカメラの設置が出来るワゴン

カメラも設置できる収納ワゴン

普段フィクサーにカメラを吊り下げたままですが、もう一台カメラをセットしたい場合にはこのワゴンに設置できるようにスタンドを装備。 また、ワゴンには電源タップを付けているので撮影時に小物の充電やカメラへの給電もできます。

天板はワイヤレスマイクやミキサーの置き場にも

この2つのアイテムを常時会議スペースに置いておくことですぐに収録・配信ができるようになりました。また、ワゴンに必要な物がまとまったのでちょっと自席でWEB会議が収録なんてこともすぐできるようになりました。実際に運用する中で不具合の修正や欲しい機能を追加していきます。

まとめ

OBSBOT Tail Airが登場したことでオペレーター、撮影スタッフの要らない簡単なシステムを構築することができました。 OBSBOTに限った話ではありませんが、小型PTZカメラと収納ワゴンの組み合わせはアレンジ次第でさまざまなシチュエーションに合わせることが出来るのではないでしょうか。

選挙のアルゴリズム:多数決は欠陥だらけ?

ハッピーコンピューター R&D担当の白川です。

いろいろな騒動があった2024年東京都知事選挙もなんとか無事に(?)終わりましたね。

選挙といえば「みんなで何かを決める方法」の代表格ですが、多くの国で昔から採用され続けている単純多数決(一人一票、最も多くの票を獲得した候補者が当選する方式)は、実は欠陥だらけだということが分かっています。

ライアーゲームとかならルールの欠陥をうまく利用して勝利するみたいな展開がアツくて良いですが、選挙にはそんな展開いらないですよね。

ということで今回は単純多数決の致命的な欠陥を取り上げ、また代替となる投票方式について紹介していきます。

単純多数決の欠陥

「清き一票を」というフレーズがいつ一般化したのか定かではありませんが、選挙といえば自分の一票を最も当選してほしい人に入れるものだという認識が寄与のもの(≒普遍的な事実で変えることのできないもの)として刷り込まれている人が多いのではないかと思います。

しかしそのような想定に基づく投票はなんと18世紀後半において既に欠陥が指摘されており、より良い投票方式がこれまで提案されてきましたが、多くの国では今日まで改善がなされないまま単純多数決が採用され続けてきました。

欠陥その1:スポイラー効果

単純多数決の代表的な欠陥として「スポイラー効果」というものがあります。

これは一人一票しかないことによる票割れが引き起こす欠陥で、選挙に負けた候補者(スポイラー)が支持層の似ている別の候補者の票を奪うことで選挙の結果を左右してしまうというものです。

例えば二人の候補者がいて、この二人の決選投票では候補者Aが55%、候補者Bが45%の得票率だとします。

ここにAと類似する方向性のCが立候補してきて、Aに入るはずだった票を15%分奪ったとすると、Aが40%、Bが45%、Cが15%の得票率となり、スポイラー候補のCがいなければ落選していたはずのBが当選することになります。

単純多数決のスポイラー効果の影響は他の投票方式と比べて非常に大きく、政治コンサルタントという職業が最も活躍(暗躍?)するアメリカでは、対立候補の票を少しでも奪い取ってくれるようなスポイラー候補を資金面などで応援するという邪悪な戦略が二大政党の間で横行していました。*1

日本でも同姓同名の候補者を立てて按分票を奪い取ろうとしたり、意図しないスポイラー効果を防ぐために「共闘」、すなわち候補者を一人に絞る戦略がとられていたりするのを目にします。

欠陥その2:情報量/表現力の欠如

最も当選してほしい人のみに一票を入れる単純多数決は、票を入れた人以外についての一切の情報が得られないため、様々な投票方式の中で最も表現力のない、つまり有権者の意思が汲み取られにくい方式となっています。

投票で「この人だけは絶対に当選してほしくない」「この二人ならどちらが当選しても許容できる」というような柔軟な意思表明ができないもどかしさを感じたことがある人は多いと思いますが、これは単純多数決ならではの問題です。

またこの欠陥は無駄票(死票)の多さにもつながっており、票を入れた候補者以外に対する一切の意思表明ができないため、票を入れた候補者が落選する=その有権者の意思が100%無視されることを意味します。

欠陥その3:分断の助長

候補者にとって、単純多数決は「一位(票を入れてくれる有権者)」と「二位以下のすべて(票を入れてくれない有権者)」の二種類の区別しかないため、一位にしてもらえる可能性がある有権者を説得して一位にしてもらうことが選挙戦略となります。

一方で、一位にしてもらえる可能性がなさそうな有権者は得票数に影響しないため無視しても問題なく、なんならそういう有権者を非難し、それに対立するイデオロギーを持つ人の票を獲得しにいく戦略さえ「一位の票集め」には効果的な側面があります。

「分断」(英語ではPolarization=分極化という言葉が使われる)という言葉が、人々が共生する社会の「状態の悪さ」を測る指標、つまり「分断が大きければ大きいほど良くない社会である」ものとして認識されてきているのを感じる今日この頃ですが、単純多数決はシステム的に分断を助長するようなインセンティブを候補者に与える効果があります。

代替となる投票方式

上記に挙げた単純多数決の欠陥は、現在の政治に特に大きな悪影響を与えている要素だと思いますが、これらの欠陥に対して代替となる投票方式が存在します。

政治の歪みが大きい一方で投票方式の改善の兆しもみられるアメリカでは、以下の代替となる投票方式が州や市レベルの選挙で導入されはじめています。

優先順位付投票 (Ranked Choice Voting, RCV)

スポイラー効果の抑止に重きを置いた投票方式で、ここではInstant Runoff Voting (IRV) のことを指します。

優先順位付投票はその名のとおり、1位☆☆、2位〇〇、3位△△…というふうに当選してほしい人を順位として投票する、表現力の高い方式です。

また集計方法として、得票数の少ない候補者から順番に除外していき、次点の候補者に除外した候補者の票を移す、という処理を当選者が確定(=過半数の得票率を獲得)するまで繰り返す点が特徴的です。

例えば四人の候補者A、B、C、Dがいて、それぞれ1位の得票率が40%、30%、20%、10%だとします。

最下位のDが最初に脱落し、Dを1位にしていた有権者について、それぞれ2位の候補者に票を振り分けます。

この段階ではまだ過半数の得票率となる候補者がいないため、次に票数が最も少ないCを脱落させ、次点のまだ残っている候補者に票を振り分けます。

この時点で過半数の得票率となった候補者Bの当選が確定します。

この例では候補者BとCが票を奪い合う関係にありましたが、当選の見込みがなくなった候補者の票が、まだ当選の見込みがありそうな候補者に順位に基づいて振り分けられるため、スポイラー効果を防止しつつ、無駄票の発生もかなり抑制できていることがわかります。

一方で分断の助長という側面では、上位の順位の並びが重要である一方、下位の順位の並びは結果にあまり影響しないため、下位にされそうな有権者をがんばって説得するインセンティブがやや弱いかもしれません。

アメリカではNPO団体「FairVote」のロビー活動のおかげか、優先順位付投票が州や市の選挙で広く採用されつつあります。

なお、優先順位付投票(選好投票)は集計方法の違いによって様々なバリエーションがありますが、インターネット界隈ではアルゴリズム的に複雑だが様々な性質を満たすシュルツ方式*2が人気で、ウィキメディア財団をはじめ様々な団体の要職を決める選挙で用いられています。

承認投票 (Approval Voting)

国連の事務総長を選出する際に用いられている承認投票ですが、実は日本でも使われている投票方式で、具体的には最高裁判所裁判官国民審査でその職責にふさわしいかどうかを決める際に使われています。

承認する/承認しないの二択ではありますが、任意の数の候補者に対して票を投じることができるため、単純多数決(=一人だけしか承認できない)と比べると多少表現力が高く、またスポイラー効果を防止することができます。

また最近の研究報告*3では、マジョリティ基準(=過半数有権者から1位に指名された候補者は、残りの有権者にどう思われていようが必ず当選する)を満たす単純多数決や優先順位付投票と比較して、マジョリティ基準を満たさない承認投票やスコアを合計する方式*4は分断を緩和するような投票結果になりやすいことが示されています。

アメリカではNPO団体「Center for Election Science (CES)」が承認投票を推進しており、一部の市などで採用されていますが、先述のNPO団体「FairVote」は承認投票の推進に反対しています。

承認投票の最大の優位性はそのシンプルさにあり、おそらく導入が最も容易な代替投票方式で、かつ単純多数決の致命的な欠点を解消できる性質を持つことから、「単純多数決の次の置き換え」としては最も適切なのかもしれません。

スコア投票 (Score Voting/Range Voting)

アメリカでは「STAR Voting」としてさらに細かな調整(戦略投票対策)がなされている投票方式ですが、基本的な考え方は私たちが政治以外の分野で何かを評価するときによく使うレート表現(星1〜星5など)と同じです。

承認投票の発展系としても捉えることができ、承認投票が各候補者に対して0か1のスコアを付与できるのに対して、スコア投票では部分点を与える選択も取れることが特徴的で、表現力の観点では最も優れています。

基本的には他の候補者とは独立にスコアを与えることができるため、スポイラー効果を抑制できます。

またマジョリティ基準を満たさないスコア投票は、どの有権者に対しても説得を行ってスコアを上げてもらうインセンティブが候補者にあり、分断を解消する効果が期待されます。

アメリカではNPO団体「Equal Vote Coalition」がスコア投票を発展させたSTAR Votingを推進していますが、先述のFairVoteがこれに反対しています。

はい、お察しの通り、アメリカではどの投票方式が次世代の選挙を担うべきかNPO団体同士で争っています(元の問題意識は同じだから協力すればいいのに…)。

最後に

単純多数決の欠陥の中でも、特に2024年現在の政治で大きな課題となっているものを取り上げ、またその課題を解消しうる代替投票方式について紹介しました。

「政治家というのは特定の属性に都合のいい政策を進め、また別の属性を冷遇するものだ」というような認識をもっている人は多いのではないかと思いますが、私はこれは現行の投票方式がそうさせているのだと強く感じています。

たくさん人がいるのにみんなおかしな方向を向いている、そんなふうに感じるときは、人ではなく仕組みやシステムに不備があるのだと思うようにすると、もしかしたら物事がちょっと良い方向に向かうのかもしれません。

*1:William Poundstone, Gaming the Vote: Why Elections Aren't Fair (and What We Can Do About It), Hill & Wang Pub, 2008.

*2:コンドルセ方式のひとつ

*3:Carlos Alós-Ferrer and Johannes Buckenmaier, Voting for Compromises: Alternative Voting Methods in Polarized Societies, University of Zurich, Department of Economics, Working Paper No. 394, 2021.

*4:ボルダルール方式

ルームシェアの部屋割りアルゴリズム:みんなで納得して決めるための方法

ハッピーコンピューター R&D担当の白川です。

日常生活において複数人で何かを決める場面はたくさんあると思いますが、「みんなで何かを決める方法」と聞いてどのような方法を思い浮かべるでしょうか?

話し合い、多数決(1人1票の最もシンプルな投票)、もしくはくじ引きやジャンケンなど運に任せる方法を思い浮かべた人が多いのではないでしょうか。

話し合いは決定力に欠けるため、最終的に必ず決まる方法となったら多数決か運ベースの方法のどちらかが圧倒的に多いと思います。

しかしこれらのよく使われる方法は、一部の人にとって大変不満足な結果になってしまう可能性が高く、みんなで決めるというよりは勝者と敗者を決める方法になっています。

そのため、「みんなで決める」「みんなが納得する」ことを目指し、様々な決定方法についてこれまで研究されてきました。

今回はその中の一つとして、公平分割問題(fair division problem)の一種であるルームシェアの問題(rental harmony)を取り上げてみます。

ルームシェアの問題

仲良し4人組が、東京で家賃10万円、4LDKの物件を借りてルームシェアをしようとしています。

都内で4LDKで10万円・・・果たしていったいどんな物件なのか、そこは本当に東京なのか、気になりますね。

それはさておき、4つの部屋はそれぞれ広さや採光など条件が異なるため、誰がどの部屋にするか、また家賃をどの程度負担するか決めかねています。

  • 部屋1: 8畳洋室、窓あり
  • 部屋2: 6畳洋室、窓(二面採光)あり
  • 部屋3: 6畳和室、窓あり
  • 部屋4: 4.5畳洋室、窓なし

一般的には話し合いで決めそうな問題ですが、4.5畳窓なしの部屋の押し付け合いが始まりそうです。

さて、何かいい決め方はないものでしょうか?

解決方法

ルームシェアのように「固定の全体支出額」と「再分割不可能なリソース群」が与えられたとき(=「家賃」と「広さや特徴が決まっている4つの部屋」)、全員が納得する(=「あっちの部屋がよかったのに」とならない)方法がいくつか提案されています。

ここでは、紙と鉛筆があればすぐにできるHaakeらの方法で決めたいと思います。

1. 各々が思う「各部屋の価値」を出し合う

まず、一人ひとりが思う各部屋の価値、すなわち「この部屋ならこれぐらいの家賃を負担してもよい」という金額を書き出します。

ただし書き出す金額には制約があり、各部屋の価値の合計を家賃に一致させる必要があります。金額に制約のあるオークションっぽいですね。

その後、全員でその金額を共有します。

例えば以下のようになったとして、次に進みましょう。

部屋1 部屋2 部屋3 部屋4 合計=家賃
Aさん 3.5万円 3.0万円 2.5万円 1.0万円 10.0万円
Bさん 3.2万円 2.8万円 2.5万円 1.5万円 10.0万円
Cさん 4.0万円 3.1万円 2.0万円 0.9万円 10.0万円
Dさん 4.5万円 3.5万円 1.5万円 0.5万円 10.0万円

2. 価値が最大となるように部屋を割り振る

各部屋に対して4人が思う価値は異なっていますが、この価値を最大化するように部屋を割り当てることで、全体として家賃分以上の価値を得ることができます(最悪でも家賃と同等の価値となる)。

先ほどの表で計算すると、部屋1をDさん、部屋2をCさん、部屋3をAさん、部屋4をBさんに割り当てたときに、全体の価値が4.5万円+3.1万円+2.5万円+1.5万円=11.6万円と最大になります。

部屋1 部屋2 部屋3 部屋4
Aさん 3.5万円 3.0万円 2.5万円〇 1.0万円
Bさん 3.2万円 2.8万円 2.5万円 1.5万円〇
Cさん 4.0万円 3.1万円〇 2.0万円 0.9万円
Dさん 4.5万円〇 3.5万円 1.5万円 0.5万円

3. 余ったお金を均等に還元する

実際には家賃は10万円なので、 余った1.6万円を4千円ずつ4人に返すことができます。

その結果、Dさんが4.1万円、Cさんが2.7万円、Aさんが2.1万円、Bさんが1.1万円の負担となります。

この方法で負担額と部屋を決めることで、必ず全員が自身の部屋に対して思う価値以下の負担となることが保証されます。

これにて一件落着。

解決方法 その2

・・・Dさんが何か言いたげなようです。

言い分を聞いてみると、「Cさんが自分の3.5万円よりも安い3.1万円で部屋2に決まったのが解せない」とのことです。

Dさんも部屋1に自身が思う価値よりも4千円安く住めているのだから別にいいじゃんと思う人もいるかもしれませんが、この「他の部屋は全部自分よりも高い値付けをした人が住んでくれないと損した気分になる」と思う状態をenvy(妬み)と呼び、envy-free(妬みがない)な状態にすることで初めて全員が納得したと考える人もいるようです。

確かに先ほどの方法では、他の人の金額の並び次第で誰かが自分よりもおトクに部屋に住めているように感じるケースがあります。

そこで、余ったお金の還元方法をより納得感が得られるように(=他の人の割り当てをみても自分よりおトクに部屋が決まったと感じないように)変更します。

3-B. 妬みを解消するように余ったお金を補填する

今回の場合、Dさんが部屋2に3.5万円の価値を付けており、それより4千円安い3.1万円の価値を付けたCさんが部屋2に決まったので、差額の4千円を先にDさんに補填します。

これにより、Dさんは各部屋に4千円安く値付けをしたとみなすことができるため、Dさんの妬みは解消されました。

小難しい話になりますが、この妬みの解消は必ず成功する(余った金額の範囲内で全員の妬みを解消できる)ことが理論的に保証されています。

妬みの解消が終われば、あとはさっきと同じように余ったお金(Dさんに4千円を補填し、残り1.2万円)を全員に還元するだけです。

最終的に、Dさんが3.8万円、Cさんが2.8万円、Aさんが2.2万円、Bさんが1.2万円の負担となります。

補足

実は、今回ご紹介したHaakeらの方法をそのまま適用すると家賃の負担額がマイナスになるケース(=他のルームメイトからお金をもらいながら住む状態)がごくまれに発生しますが、その場合、ルームメイトにとってはその人を追い出して空室状態にしたほうが負担が軽くなるというバグがあるため、最終的な負担額を0円以上に調整する必要があります。

家賃の負担額が絶対にマイナスにならないような決め方もあり、これを非負性(non-negativity)といいますが、非負性を満たすと妬みの解消を保証できなくなることが証明されています。

まとめ

今回ご紹介した方法はルームシェアの問題を解決する方法のうちの一つであり、他にもいくつか方法が提案されていますが、理論的な保証のある方法の中でもかなりシンプルで使いやすいのではないかと思います。

ルームシェアで部屋と負担額を決める際にはぜひ使ってみてください。

地獄の黒塗り作業から解放せよ!大量にあるPDF文書内のセンシティブな情報を自動で黒塗りする

黒塗りイメージ

 

hapicom Inc.ことハッピーコンピューター株式会社では、様々な業界におけるご相談やご依頼の中で「一筋縄ではいかない問題」に直面することが多々あります。

本シリーズでは、過去にあった一筋縄ではいかない問題について、公開できる範囲でストーリー仕立てにしてご紹介していきます。

あまりオープンな場ではみられないような案件が多いので、こんな世界もあるのかと楽しんで読んでいただければ幸いです。

地獄の黒塗り作業から解放せよ!問題編

「これって関係ない会社の名前とかまとめて黒塗りできたりしますか」

ピコンッとチャットに投げられたそれは、二つ返事ですぐに、はいできます、とは答えられない程度には一筋縄ではいかなさそうだと思った。

チャットの相手は弁護士で、残業代の未払いに関して労働者側から依頼を受け、勤め先の会社を相手に訴訟を起こそうとしている中での出来事である。

裁判では事前に集めた証拠品をもとに相手方と戦うのであるが、会社を相手にこのような労働問題にまつわる訴訟を提起するとなると、証拠となるデータや紙の書類はほとんど全てその会社の社内にあるため、裁判までの間に会社側は都合の悪い証拠を処分したり改ざんしたりすることができてしまう。

そこで、労働問題に関する訴訟では通常、証拠保全と呼ばれる手続きが取られる。

証拠保全とは、裁判官の立ち会いのもと会社の敷地に立ち入り、裁判の証拠として必要だと思われるデータや書類を証拠品として押収するための手続きである。

特筆すべきは、証拠品を闇に葬られないよう、証拠保全の実施が当日に会社側に通知され、即日強行される点である。

ニュースやドラマで警察がいきなり会社にやってきて物品を押収するという場面をたまに見かけるが、それと似たような感じで通常業務を行っている会社に弁護士や裁判官らがぞろぞろと立ち入り、証拠品リストに記載のあるデータや書類を一つずつ押収していく。

この証拠保全によって、残業を行っていた証拠となりうるパソコンの稼働履歴やメールの送受信履歴などを、処分や改ざんが行われていないであろう状態で確保することができる。

ここでの我々hapicomの役割は、弁護士に付随する証拠保全エンジニアとして特別に許可をもらい、証拠保全の際に一緒に会社に立ち入り、システムログの抽出など専門的知識が必要な作業を含め証拠品の押収作業を行うことである。

--

今回もこの冒頭の弁護士とともに証拠保全に出向き、そして今、押収した大量の書類データについてチャットでやり取りをしている。

「裁判所からセンシティブな情報は隠すように言われて」

続けて届いたチャットメッセージには、証拠保全で押収した文書データを保管する裁判所から何やら要請があった旨が書かれていた。

押収した大量の文書データの中に、今回の訴訟に関係のない人や組織の名前などセンシティブな情報が多分に含まれており、このままでは保管できないから黒塗りをしてほしいと言われたとのことだった。

弁護士によれば、裁判官によってこのあたりの判断は異なり、今回の裁判官はかなりセーフティ寄りに考えるタイプで、万が一データが外部に漏れても大丈夫な状態で保管したいと考えているのではないか、ということらしい。

もちろん反論はしたのだが、裁判官への説得むなしく、黒塗りは必須となった。

どのような理屈にせよ裁判同様、証拠保全においても裁判官の最終判断が絶対であり、裁判官がそうせよと言うのだから対応しないわけにはいかない。

押収した文書データはPDFファイルにして千超、しかも各ファイルはそれぞれ数ページある、ということは、ページ数はざっと見積もって数千だ。

「事務所の人で手分けしてやれば一日あれば」

弁護士は言うが、弁護士事務所の人員を黒塗りするために一日費やせば、いったいどの程度の損失になるだろうか。

また、今後も黒塗りを要請される可能性があることを考えれば、今回さえ手作業で乗り切れれば、というある意味で怠惰な解決方法はあまり得策ではないと思われた。

弁護士事務所の方々をこのような生産性のない作業から解放させるべく、hapicomのメンバーは立ち上がった。

地獄の黒塗り作業から解放せよ!解決編

問題編で背景や経緯を書き連ねましたが、今回の問題を簡潔にまとめると「大量にあるPDF文書内のセンシティブな情報を自動で黒塗りする」というものになります。

期限は明確に提示されていないものの、緊急の要件ではあるので数日中に片付けたいというような状況です。

求められる品質は「裁判官が納得するレベルのもの」という曖昧な状態ですが、このようなケースでは1ターンで完璧な状態を目指すのは大変ですので、それなりの状態で一旦提出し指摘されたところを修正していく逐次方式を前提にすることで、作業時間の短縮と最終的な相手の満足度を両方追えます(状況によっては専門家として不誠実に見られることがあるので注意)。

ということで実際に我々がとった行動は、まず最初のボールをすぐに打ち返すことを目指し、ありものの組み合わせで簡単に黒塗りを自動化できる方法がないかを模索することでした。

方法の模索

壁になりそうな部分は下記の処理で、どちらもオープンソース、すなわち無償で利用することのできるライブラリであったような気がしたので、なんとなくできそうだという感覚はありました。

  1. センシティブな情報に該当するであろう人名や組織名などの固有名詞をテキストから自動抽出*1する
  2. PDF内のテキストを読み取ったり、指定した固有名詞が出現する位置に図形を追加したりする

まず1について先人がいないかWebで探してみると、自然言語処理の研究も行っているTIS株式会社の方のブログでまさに固有名詞を抽出して黒塗りするという事例があり、対象がPDFファイルではないものの、この方向性でいけそうだという確信を深めました。

qiita.com

また、オープンソースで活用できそうな固有名詞抽出のためのツールについて調べると、東北大学自然言語処理研究グループが公開しているja_core_news_trf (cl-tohoku/bert-base-japanese-char-v2) という言語モデルが固有名詞の抽出にも使えるということで、これを使わせていただくことにしました。

一方2については、黒塗りするための操作が可能なライブラリがあるか調べてみた結果、PyMuPDFというライブラリを使えば、PDF内の全テキストの取得、指定した固有名詞に対応するPDF内の座標の取得、指定した座標での長方形の追加が可能だとわかりました。

この時点で、以下の手順でPDFファイルの自動黒塗りができると判断し、残りの不確定要素である固有名詞の抽出精度について検証を進めることにしました。

  1. PDFファイルを読み込む
  2. PDF内のテキスト情報を取得する
  3. テキストの中から固有名詞を抽出する
  4. 固有名詞に対応する箇所に黒色の長方形を追加*2する
  5. PDFファイルを保存する

検証と実践

調べただけでは分からない部分については、実際に自分で試してみて確認するしかありません。

ということで、コードを書いてPDF文書の黒塗りを試してみました。

実際に手元にあるPDF文書を処理させてみると、思っていたよりもかなり高い精度で固有名詞が抽出できていました。

黒塗り結果の例

サンプル用のPDFファイルでの黒塗り例

そしてこの時点で、冒頭のチャットの質問に対して「できます」と答えられる状態になったと言えます。

とはいえ100%の精度というのは難しいもので、ここから先は人の目で直接見て調整する必要があります。

例えば上のサンプル画像では、西暦の数字を商品名として誤って抽出しています。

幸い、情報漏洩が一切発生しないように、というような厳格な要件ではないので、文書をざっと見渡して、目立っている語についてのみ個別に処理ルールを設けて手当てをしていきます。

ライブラリのおかげで必要なコード量も少なく、作業時間としてはそれほどかかりませんでしたが、文書数が多く処理の待ち時間がそれなりにあったため、全ての文書を一通り黒塗りするのに数時間必要でした。

それでも、緊急で対応する必要のある問題に対して、数日以内で片を付けるという目標を達成することができました。

最後は忘れずに、黒い長方形の裏側にまだ残っているであろうテキスト情報を消すためPDFを一括でJPG画像に変換してから提出し、裁判官の指摘を待つことにしました。

指摘と修正

想定通り、裁判官からの指摘は入りました。

指摘内容は文書中のURLを隠してほしいというもので、つまり、それ以外の部分については問題ないという、想定よりもかなり良いものでした。

URLを隠すのは人名や組織名などを黒塗りするよりもはるかに簡単で、正規表現というものを用いることで、URLのパターンにマッチするものを正確かつ迅速に見つけ出すことができます。

したがってこの段階で、「大量にあるPDF文書内のセンシティブな情報を自動で黒塗りする」という一筋縄ではいかない問題は一応の解決を見ることになりました。

地獄の黒塗り作業から解放せよ!後日談

後日、新たに別の文書群についても黒塗りしなければならず自動化で対応していて良かったと思わされる出来事はあったものの、この件に関しては以降しばらくの間音沙汰はなく、頭の中のすぐに取り出せる記憶領域からは完全に霧散していた。

数ヶ月経った頃、弁護士から連絡があった。

大量の文書データを武器に戦った弁護士は見事裁判で勝利したらしく、メールで勝利報告を送ってくれた。

「おかげさまで勝つことができました」

お世辞ではなく、実際に大量の文書データを証拠品として使うことができたからこそ、時間外労働をしていたことが認められ、勝つことができたのだろう。

役に立てて嬉しいという気持ちはもちろんあるのだが、あれだけの量の文書の中身を精査し、依頼人が時間外労働をしていたということを裁判で認めさせ、勝利したということに、畏敬の念を感じずにはいられなかった。

一次関数的にしかスケールしない、個々に対応していくしかないような仕事をしている人に対して、楽していい部分は楽させたいというような気持ちが強まった気がした。

(付録)PDF文書に黒塗りするコード

自動黒塗りのコードはpythonを使って書きました。

まず、それぞれのライブラリをインストールします。

pip install PyMuPDF
pip install spacy
python -m spacy download ja_core_news_trf

あとは下記のコードで、srcフォルダ内にあるPDFファイルが一つずつ読み込まれ、黒塗りされたPDFファイルがdstフォルダ内に保存されていきます。

import glob
import os
import fitz
import spacy

SRC_FOLDER = "src/"
DST_FOLDER = "dst/"

if __name__ == "__main__":
    nlp = spacy.load("ja_core_news_trf")
    files = glob.glob(SRC_FOLDER+"*")
    for in_file in files:
        out_file = DST_FOLDER + os.path.basename(in_file)
        doc = fitz.open(in_file)

        for page in doc:
    
            # 固有名詞を抽出
            texts = page.get_text("words", flags=fitz.TEXT_PRESERVE_WHITESPACE)
            for t in texts:
                text = t[4]
                result = nlp(text)
                pns = {}
                for ent in result.ents:
                    if ent.label_ == "PERSON" or ent.label_ == "NORP" or ent.label_ == "GPE" or ent.label_ == "EVENT" or ent.label_ == "FAC" or ent.label_ == "ORG" or ent.label_ == "PRODUCT":
                        pns[ent.text] = True

                # 黒塗りの座標ズレを抑制
                if not page.is_wrapped:
                    page.wrap_contents()

                # 検索して黒塗り
                for pn in pns:
                    rects = page.search_for(pn)
                    for rect in rects:
                        page.draw_rect(rect, fill = (0, 0, 0))
    
        doc.save(out_file)

*1:専門的にはこのような処理を固有表現認識(Named Entity Recognition, NER)と呼びます。

*2:この処理により文書を黒塗りしたような見た目になりますが、実際にはファイル内にはまだテキスト情報が残っていますので、画像ファイルに変換するなどの後処理が必要です。

徳島にある噂のサテライトオフィス密集地域の視察に参加してきました

こんにちは、hapicom随行記者担当の伊田です。

先日、とある方から「徳島県が今サテライトオフィスに力を入れているので地方での企業の働き方にもし興味があれば視察に来てみませんか?」というお誘いを受け、ここ数年、社内に"大阪じゃないどこか"へ進出したい機運もあり、大阪から徳島ならそんなに離れてないな、と軽い気持ちで参加した徳島視察2日間。

・・・想像をはるかに超えた視察になりました。

今回の視察では徳島県西部にある美馬市三好市つるぎ町、東みよし町の2市2町からなる「にし阿波」を訪れました。

視察団集合場所の吉野川ハイウェイオアシス

1日目(三好市、東みよし町)

吉野川テレワークオフィス

徳島に着いて、まず最初に吉野川ハイウェイオアシス内の吉野川ふれあい館2階にある吉野川テレワークオフィスにお邪魔しました。

吉野川テレワークオフィス

吉野川テレワークオフィスはフリースペースが広いせいかドロップインしやすいとのこと。オフィスの向かいには宿泊施設の旅籠屋があり、他にもキャンプ場・バンガロー施設が近くにあるようで、ワーケーション・観光としての利用者もいるようです。

また、休日には野外にある舞台でイベントやマーケットもあり、利用者の姿を見ることがあるそうです。

タカハマライフアート(旧小学校)

つぎに、統廃合で使われなくなった小学校を活用しているタカハマライフアートを視察させていただきました。

小学校を再活用しているタカハマライフアートさん

オリジナルTシャツプリントを手掛けており一棟丸ごと工場用地として利用されています。

職員室は大きなシルクスクリーン印刷機のある製造場所、給食室は2tトラックが横付けできるので搬入出場、音楽室は応接室とWEBミーティングのできるスペースへと変貌していました。

その広大な建物の賃料はなんと無料!

黒板には生徒たちの寄せ書きが残されている

現地採用も進んでおり、地域のコミュニティの場としても活用されていることに驚きと感動を覚えました。

旧政海旅館

三好市池田町には昭和天皇司馬遼太郎も利用した旧政海旅館があり、サテライトオフィス集積地として生まれ変わっていました。

旧政海旅館を活用

内装も当時の面影が残る

共用スペースの炊事場には大きなホワイトボードが置いてあり、入所している企業同士の情報共有の場に。

定期的に行われる交流会は、入所している企業、その家族だけでなく地元の飲食店の方々など地域の人も参加されているそう。

2日目(つるぎ町美馬市

さとやまオフィス(旧県知事邸)

自然に囲まれた中に伝統的な建造物が立ち並ぶつるぎ町の町並み、そんな場所にさとやまオフィス(旧県知事邸)がありました。

さとやまオフィスの門構え

豪奢な門構えからなる建物は外観も中も素晴らしいものでした。

素材の状態はそのままに、空調やインフラなどは新設してあるので機能性もあり、なによりもその外観からゲストを招きたくなる、そんなオフィスでした。

2024年4月にはカフェがオープン予定の織本屋

近くには藍の「寝床」として利用されていた旧永井家庄屋屋敷を利用したコワーキングスペース「NEDOKO」や、江戸中期の酒造商家「織本屋」を改装したカフェなど、様々な施設が隣接していました。

コワーキングスペース「NEDOKO」

道の駅 藍ランドうだつ

続いて道の駅 藍ランドうだつに移動。

ここにはうだつの町並みが残されており、観光地として開放されています。

そんな中にG&Cコンサルティング株式会社の運営するサテライトオフィスがありました。

ロビーにはくつろげるスペースも

G&Cコンサルティング株式会社では地方創生チャレンジクラブを運営しており、うだつの町並みは起業家の溜まり場のようになっていました。

エリア全体で企業誘致しており、チャレンジしやすい土壌を作っています。

今回で16回目の開催になる華道展「うだつをいける」

「うだつの町並み」に掲示される映画祭のポスター

ちょうど視察の時に華道のイベントがあり、町並みの中には映画祭や演劇のパンフが掲示されていて、サブカルチャーの発信地になっているように感じました。

ちなみに刀剣ブームの時には町並みを生かしたフォトセッションも行われたらしいです。

コリビングスペース「ADLIV(アドリブ)」

最後に訪れたのは広告デザインを手掛けるナカガワ・アド株式会社。

老舗印刷会社の工場を泊まれる工場としてリノベーションされており、ホステルだけでなく、コワーキングオフィスの要素も合わせ持つ、"コリビングスペース"「ADLIV(アドリブ)」としてシェアオフィスを運営されています。

元は大きな印刷機の並んでいた空間をDIYでリノベーション

かつては活版印刷機の並んでいたスペースを大きく開放的にして建物の中はまるでカーニバル会場のような楽しげな雰囲気。その中にコワーキングシェアオフィス、ドミトリー、キッチンスペースが所狭しと並んでいました。

デザインだけでなく起業する人を応援し、地域の問題解決に取り組む試みを行なっているとおっしゃっていました。

まとめ

この2日間感じたことは、東京や大阪にはない地方創生に対する行政の「熱い想い」でした。

ただ役所の会議室で説明して終わり・・・ではなく、一緒に現地に向かい、解散後も

「将来的には進出してほしいのですが、皆さんのニーズや意見を聞かせていただきたい!」

と、夜の懇親会にも2晩連続で参加!行政ってこんなだっけ?徳島が特殊なの?

さらに!今回の視察でご一緒させていただいたのは東京のコワーキングスペース三茶WORKを利用されているベンチャー経営者やマネージャーの方々。 常に徳島でなにが組み立てられるのか?なぜ徳島なのか?というストーリーや戦略について話が上がっていました。

視察メンバーも徳島メンバーも会う人みんなトップレベル。みなさん「夢」をもって挑戦されているからでしょうか。情熱、立ち回り含め、Sクラス級の方ばかりで「絶対に何かが起こるフラグ・・。」と心の中で呟いていました。