GoogleはYMYLという言葉を発明したのがすごいよねという話
ある機械学習モデルによるコンテンツの分類器を作成して本番の運用に乗せてからしばらくたったときの話です。
モデル開発当初はF1 socreもよく本番の運用に十分乗るクオリティとの合意をとって開発していたのですが、ある分類で間違ったレコードがエスカレされてきて、どうやらその「間違い方」が問題らしいとのこと。
曰く、「常識的に考えてこの間違い方はおかしい」とのことなのですが、そもそもそういう前提条件共有されてないし、所詮確率モデルなので間違いは普通に発生するし、間違い方に良いも悪いもあるかとも思ったものです。
さらに、「常識的に」という部分の内容が言語化されていないので、改善しようにも何が問題で何が問題でないかという切り分けが出来ずに苦戦するという事態。
要は、間違うにも間違ってはいけない部分と間違いが許容される領域が暗に存在しているが、明示されていないのでそれを言語化する必要があるという問題(問題以前な気がする…)が発生したのです。
ここで思うのは、Google検索におけるYMYL問題と本質的には同じことだなと。
Googleの検索アルゴリズムには機械学習が使われているのは昨今ではよく知られていますが、少し前に健康領域などで検索結果がおかしいという問題が発生していました。
多くの領域で力を発揮していた機械学習モデルも、その間違いが許容されない分野が存在していたのです。
さて、その領域における間違いがなるべく発生しないように改善を行う必要があるのですが、改善対象となる領域を「YMYL」として問題の切り分けができた(言語化できた)点がGoogleのすごい発明のひとつなのだと思います。
問題を切り分けることでシステムで解決可能な問題となります。
逆に切り分けることができなければ、「これは良い」「これはちょっと違う気がする」というお気持ちと常に戦い続けることを意味し、定式化できずに解決不能な問題に陥ることを意味します。
YMYLという言葉を発明し、問題の切り分けが可能になったことで解決可能な問題として定式化できたのがすごいなあと実感する次第です。
Flaskでリモートアドレスを request.remote_addr で取得するときの注意点
Flask の前にプロキシがあるときの対策
以下のように書けばよい
if request.headers.getlist("X-Forwarded-For"): ip = request.headers.getlist("X-Forwarded-For")[0] else: ip = request.remote_addr
参考
Cloud Endpoints + GKEで構築したAPIをマネージド証明書を用いてhttps通信に対応させる
概要
APIを作成する際に、GCPのサービスであるCloud Endpointsを使うとAPIのドキュメント管理や認証機能を簡単に実装できるなどいろいろと便利です。アプリケーションの部分はGKEで作ってそれらを連携させていたりします。
それらの詳しい方法は以下のリンクでチュートリアルを実際にやっていただくのがわかりやすいです。
Kubernetes での Endpoints のスタートガイド | OpenAPI を使用した Cloud Endpoints | Google Cloud
ですが、このチュートリアルではhttpでの通信を行うところまでしかできません。この記事では、マネージド証明書を用いてCloud Endpointsにて作成したAPIをhttps通信に対応させる方法を記載します。
続きを読むMySQLでカラムを追加して外部キーを付け替えるときの手順
状況
以下のような状況を想定して外部キー付け替えの手順をメモします。
users
テーブルには id
, uid
の2カラムがあります。
posts
テーブルには user_id
カラムがあり、これが users.id
を参照する外部キーとなっています。
また、 posts
テーブルには uid
カラムがありません。
ここで、 posts
テーブルに uid
カラムを追加し、これを users.id
を参照する外部キーに設定し、既存の posts.user_id
はカラムごと削除します。