見出し画像

デジタル庁主催の「法令APIハッカソン」に出場して来ました!


デジタル庁主催の「法令APIハッカソン」に参加してきました!!

今回は11/10 ~ 11/17 に開催された法令APIハッカソンに出場してきましたので、
そのときの記録としてブログとして残しておきたいと思います。

ハッカソンへのリンクはこちらから
https://www.digital.go.jp/policies/legal-practice/hackathon


ハッカソンの概要

今回のテーマは「法令API」でした。
デジタル庁が取り組んでいる、日本の法律のでデジタル化の一環として、
法令に対して検索をすることができるAPIです。


法令APIについて

今回法令APIプロトタイプとして本公開ではないですが、
今回このハッカソンのためにエンドポイントが定義されていました。
プロトタイプAPIとして公開されていたエンドポイントは、以下のような内容でした。


  • 法令一覧取得API

  • 法令履歴一覧取得API

  • 法令本文取得API

  • 添付ファイル取得API

  • キーワード検索API

内容は大体名前から想像できると思いますが、
このようなAPIを用いてなにかプロダクトを開発してください、というのが今回のお題でした。

チーム編成

私たちは今回5人のチームで参加しました。
エンジニア4人とプレゼンター1人という構成でした。
しかしながら平日にも作業時間を取らなければならなかったり、実質動けたエンジニアは私ともう一人でしたが。。
まあこういう実際にどう開発時間を確保するとか、時間のない中でやり切るかというのがハッカソンの醍醐味でもあり、
実際作業できる人が1、2人になるということはあるあるであり、そんなもんだと私はもう割り切っています。笑

募集から開発終了まで1ヶ月のスピード感

とにかく、募集期間から開発期間、発表までの間が1ヶ月もなく、かなりハイペースでいろいろと物事が進んでいきました。
チーム全員でオンラインでミーティングをしたのは、ハッカソン開始の前日でした。
もともと私とプレゼンターの二人でどういう開発をしようかということはアイディアだししていたのですが、
メンバー全員で話し合うとさらにいろいろなアイディアがでてきて、いろいろないいと思われるアイディアがあるなかで、
実際に作るものを決めていく必要があります。
まずここの、何を作って、それが何を解決していて、どう見せるか
というようなところを決め、それが実際に短い開発期間で実装可能なのかということを判断していくのはハッカソンの最初のハードルでしょう。


アイディア出し

最初のミーティングで出たアイディアとしては

  • 道路交通法に関するクイズを出すBot

    • ちょっとワオが少なそう

  • 労働法に抵触してないか、外国人とかにもわかる英語が話せる法律相談所

  • サービスの利用規約を要約?かわかりやすくする

  • 旅行者向けで、自国との差分表示

    • APIは日本のやつだけなので比較は難しそう

  • 法律を要約して、簡単な辞書みたいなのを作る

    • 長いし専門性が高いので、一般人にもわかるようにする

  • 給付金もらえる条件にあるかどうかChat形式でわかるサービス

みたいなものが出ました。
それらの一つ一つに対して深掘りをしていく中で、

>行政系サービスでクイズとかのエンタメにするのはむずいですね
エンタメよりも実用的なものが欲しくなりますもんね

クイズで気になるのは、ユーザー的には一度これクイズやったらもう2度とこのサービス使わないんじゃないかと思って、特にエンタメゲーみたいになると
そこがなんか悲しいなあとは思う

例えば外国人が賃貸に入居するときに
この重要事項説明書をすべて説明するわけやけど、
一応14ヶ国語とかで対応してるみたいやから、これを今回の法律APIと絡めてかつ今より便利、みたいにするの難しくね?とは思った

のような意見が出ました。
このように、法令を使って何かをする「出口」てきなアプリケーションだと面白いものはできそうなものの、
エンタメみたいなもので1回きり使ってもらえるサービスであったり、実際にもう翻訳されてドキュメントになっている外国人向けのウェブサイトなどが多く、
なんとなく難しいなという感覚でした。


出口アプリケーションより入口アプリケーション路線へ

そんななか、私はいろいろと法令APIを試用してみるなかで、検索のハードルが一般人には高いなという思いが強くなっていました。
運営側から法令APIを実際に使って検索をする時の試作UIが提供されており、完成度の高くUIも綺麗な検索サービスだったのですが、
実際に使ってみると色々改善の余地があるなと気付かされていきました。

例えば、実際にスラックでやり取りした内容として、

これ検索やってみた?
おれ思ったんやけど、そもそもこの検索をもっとやりやすくするためのUI/UXが必要な気がするんよね
この検索UI のわかりにくかったことあげると、

  • そもそも検索ワードがわからない(法律の名前知らない)

  • 一回検索した後に絞り込み検索できない(例えば飲食って調べて250件くらい出てきて、それをナローダウンできない)

  • キーワード入れると全く関係ない法律が出てくる(例えば出店を出したくてその時に必要な法律調べたいとして、出店って検索すると金融の法律がヒットする)

みたいな感じ
だから、そもそもこの検索のときの「入り口」をもっと使いやすいものにするのがいいのではと。
Elasticsearchとか、ChatGPTのチャット形式とか。

上でxx君が言ってるのは検索の「出口」をつかいやすくするパターンで、これも魅力的やけど、
沼る気がする、指摘の通り文章長すぎてChatGPtがハンドルできないと思うし、
これを要約して分かりやすくするの1週間だと厳しいかと

「入り口」をハックするのであれば、
検索の時のUI/UXはいくらでもインターフェースが使える、例えばLINEをインターフェースにするとか
出来るのでいいんじゃないかと。
おれらでこのデジ庁が持ってる検索画面作り替えるイメージ

というふうに、法律を利用する「出口」的なアプリケーションも大事だが、
そもそも法律を検索するときの「入口」のハードルを下げたい、そこにLLMのチャット形式での質問とかが加わればいいなと思いました。


検索の難しさや、どう改善すればいいか試行錯誤


また、法令APIのキーワード検索は「意味的な検索」ができない、
つまり「喫煙」と検索すると法令にヒットするにも関わらず、「タバコ」と検索するとヒットしない、
などキーワードを的確に条文にあるものを選ぶ必要があり、難易度が高いものになっていたので、データベース自体を再構築することも考えました。
しかしながら、実際に配布されていた30GBの生データは複雑に構造化され、私たちが少し時間を使ったぐらいではデータベースの再構築を行うことは無理だということが判明し、この案は没となりました。


本当はアキネーター作りたいけど難しそう



検索のUIとしてインパクトがあるものにはどんなものがあるだろうと考えた結果、
究極的にはアキネーターみたいなものだろうと考えました。
全くキーワードを知らなくても、自分の調べたいことや状況に対しての質問にイエスノーを答え続けるだけで、自分が見るべき法律に行き着く、
ようなUXがあればある意味一般人には最強だなと思ったわけです。
しかしながら、アキネーターが動いている原理を調べたところ、検索対象に属性データがリッチに存在し、それらを分類する木構造のグラフがあり、質問もリッチに作り込み、どんな質問をその場で聞くべきかベイス最適しながら動的に判断していくエンジンが必要とわかり、これも今回のデータに対しては難しそうだという結論となりました。
そのときのチャットでは、

 調べたところアキネーター組もうとすると、
もっとリッチな説明変数がないと難しいっぽいんよね
アルゴリズムは基本はツリー型のモデルで、問題一つに対して選択肢を絞っていくわけで

法令1つに紐ついた変数って

  • 法令種別

  • 時点

  • 公布日範囲

  • 法令の分類

て4つしか変数ないから、そもそもアキネーター的には質問のレパートリーがまじで少ないから、ワークしなさそう

アキネーターっていちおう裏で大量に質問を用意しておいて、手札にある質問の中から
どの質問を次すれば良いか(分岐させたらジニなんたらが最大化されるか)みたいなのを動的にベイズ最適化で引っ張ってくるみたいな感じらしくて、手元で質問用意するの無理っぽいから、やっぱ対話っぽくちゃとGP路線で行った方が良さそう

というような結論でした。

また、デジタル庁の方とお話しさせていただいた時に、メモとして

今デジ庁の人と話したんやけど、
やっぱこの法令APIを作った経緯としては、

  • そもそも法律を作る官僚

  • 法律を使う弁護士

  • 法律に触れる業界の人

で、パンピー向けではないな

ととっており、やはり自分たちのやるべきことは検索のハードルを以下にまずは下げるか、
というところだろうと判断しました。

作るものを2日目に決定


結論として、私たちが作るべきは、

  • 一般人でも法令を検索しやすい、ChatGPTのようなチャット形式で法令について検索できるデジタル弁護士

であるという路線に決まりました。

ここまで決まるのに実質1日しか経っておらず、ハッカソンのスピード感がお分かりいただけるかと思います。笑


その後開発

その後、このようなやりとりをするためのLLMをカスタマイズするための開発と、
それを見せるUIの開発が同時に進んでいきました。

カスタマイズはPythonでまずどういうやりとりが好ましいか検証した後、
うまくいけばそれをNext.jsに移植するという手法を取りました。


フィードバックが重要だった


メンバーのフィードバック

また、作っていく中で最初は

  • ユーザからいくつか鍵となるキーワードを入力してもらう

対話の仕方であったのに対し、

何か事件、事故のあらましを記述すると、過去の判例と関連法令が出てくる的なのどうでしょう
「最近こんな感じのことが起こったんだけど、過去の判例とか関係する法律あったら教えてくれない?」みたいな
弁護士行く前にちょっと調べてみる的な

というようなフィードバックも入り、状況などを入れるとキーワードを抽出し、法令API経由で検索、
また過去の判例についてもインターネット上から検索してくれてそれをいい感じにまとめてくれる、リンクもくれる

みたいな路線へとシフトすることができました。

専門家のフィードバック

さらに、メンバーの一人が知り合いの弁護士に連絡をとってくれ、

ざっくり所感

  • 専門的な用語での検索は結構精度良い

  • ただキーワードが法律の文章内に書いてないようなものはヒットしないからパンピー向けはちょい厳しいかも

  • 残念ながらの発動条件わからん。中身あってるのに謙虚すぎわろた

  • ヒットしない法律がよくわからん。APIの問題かも?

のようなフィードバックと、実際に弁護士に寄せられる質問について

法務のペインは、法律を知りたいという一言に尽きますが、その「知りたい」の内容は様々です。個人的に大別すると、法務の知りたいことは以下のとおり整理できます。
①法律の要件(適用される条件は何か。その条件の定義や判断基準は何か。)
②法律の効果(適用された場合にどうなるか)
➂法律の手続(適用された場合にどのような手続を行うべきか)
④法律の裁判例(適用された他者ケースにどんなものが存在するか)
⑤法律の改正状況(認知している法律が最新のものか。改正された場合に新たにどのような対応を講じるべきか)

のような項目に分かれることを教えていただき、
それぞれのケースについて具体的な質問の例を教えていただきました。
その質問に対する私たちのサービスの回答を入力し、
このような質問に対してはうまく回答できていない、という超具体的なフィードバックをもらうことができました。

開発最終日


開発の最後の一日は、この具体的な質問に対して精度のよい回答をできるようなプロンプトを模索して改善を図るために主に使い、
あとはUIの修正をかけて、法令の神Themisと実際に話しているような体験ができるように音声読み上げを導入したり、UXもリッチにすることができました。

また、提出物締め切り前日の深夜テンションで紹介動画も作りました。笑
もしよろしければ見てみてください。

https://www.youtube.com/watch?v=QhOLnzlyj8w&t=3s

このように、結局は色々な人のチームプレイが上手くワークし、
なんとか提出期限までにサービスを公開することができました。


終了、そして

結果としては、なんと「法令の普及、研究促進賞」という賞を頂くことができました。
今までハッカソンには何度も出場しましたが、賞をいただいたことはなかったのですが、今回は最終的に自分たちでも満足のいくプロダクトとなり、
結果としてそれが評価されてよかったなあと思っています。

このようにして私たちチーム「AUTHBLUE」の法令APIハッカソンは幕を閉じました。
まずこのような機会を用意していただいたデジタル庁や第一法規の皆様には感謝を申し上げたいと思っていますし、
出場された全員に対しても、本当にお疲れ様でした、という気持ちです。
賞を取った取らなかったに関わらず、このハッカソンを通じ、今まで知らなかった法令という分野の知識が増え、今までプロダクトレベルで触ったことのなかったLLMについても学ぶことができ、非常に有意義な時間でした。
今後とも、このような機会があればいろんなイベントに参加し、いろんなものを開発し、少しでも世の中のために貢献できたらと考えています。

今回のレポートはYoutubeでも話していますので、
興味のある方はぜひ見てみてください。

https://www.youtube.com/watch?v=daAfsbKzQ0o

今回はこの辺で。


この記事が気に入ったらサポートをしてみませんか?