憧~!Mortal検討画面の情報、スプレッドシートに書き込んどいて~!
ありがとうございます。
Mortalのレポート画面のデータを右クリックメニューからスプレッドシートに書き込んでくれるChrome拡張を作りました。
最近話題の悪手率も書いてくれます。
後半でMortalの活用そのものについても詳しく書いています。ぜひお読みください。
使い方
1. ChromeストアからMortal Conveniencerを追加
ChromeストアでMortal ConveniencerをChromeに追加します。リンク先に飛んで「Chromeに追加」を押してください。
2. スプレッドシートの編集者に追加
新しくスプレッドシートを作って、共有を押してmortalconveniencer@gmail.comを編集者に追加します。
スペルミスしなければorコピペすればアイコンがデフォルトじゃないアカウントが出てきます。
3. スプレッドシートのurlを保存
とりあえず上のアドレスバーのdocs.google.com/spreadsheet/うんぬんかんぬんをコピーします。
パズルのピースみたいなところをクリックしてmortal conveniencerを押すとポップアップが出るので、さっきコピーしたURLを貼り付けて保存します。保存を押し忘れないようにご注意
4. レポート画面で右クリック
準備できたのであとは適当な牌譜をMortalにかけて、レポート画面で右クリックにある"成績を書き込み"を押しましょう。
今のところ日本語のページにのみ対応しています。
5. できました
できました
悪手はπτ(a∣s)<0.05の選択の、準悪手はπτ(a∣s)<0.1の選択の割合です。準悪手には悪手も含まれます。
あとは好きなようにご活用ください。とりあえずグラデーションつけるとMortalと意見が合わなかったところが見やすくておすすめです。
せっかくのMortalのデータを適切に扱ってもらいたいので、ここからデータの見方の話をします。
振り返りのための活用
評価が低い半荘を色付けしておくと後で見やすいです。
すぐ横にMortal検討画面のURLもあるので後からでも簡単に振り返れます。
ラスっても「お前はがんばった」って慰めてもらえたり、そもそも「Mortalに上手いって言ってもらえるようにがんばろう!」みたいなモチベーションが湧いたりするので、Mortalは今を生きる雀士たちの親みたいなもんですね。違うか。
見返すときにどういった打牌を参考にすればいいかですが、自分が牌理を間違えてたものを見ましょう。後述します。
非効率な部分は真似ずに、学ぶ価値のある部分から積極的に学びましょう。
★強さの指標としての活用★
ここが本題です。
ここが本題です。
クイズ
ここで問題です。
プレイヤーAとプレイヤーBの牌譜をMortalにかけて、以下の結果が得られました。
どちらの方が強いでしょうか?
Aの方が少し良いスコアですね。
Aの方が強そうと思った方、まだ早いです。
もしかしたらこの人は1半荘の結果をそのまま平均として出しているだけかもしれません。
では半荘数もお教えしましょう、このデータはどちらも500半荘程度調べた結果です。
ならAの方が強そう? 本当にそうでしょうか?
同じくらい? 慎重なのは良いことですね。
Bの方が強い? おませさんですね。
では答えを言うのでスクロールをお願いします。
ご苦労様です。ご協力感謝します。
どちらが強いかは分からないと思った方、あなたが正解です。
答え合わせをしましょう。
「右の方が(ほぼ確実に)強い」です。
今をときめく? ときめいていた? LuckyJでした。
天鳳の特上卓で1300戦ぐらい打って、1000戦以上安定段位ランキングぶっちぎりで一位のあのAIです。
左の人は僕のお友達の一般雀聖3なあまあんさんです。集計ありがとうございます。O型らしいです。542。。
さて、このくらいのMortal Ratingや悪手率のプレイヤーが一般的には大体どのくらいの強さなのか見てみましょうか。
念のためそれぞれのデータの95%信頼区間を付記した表も貼っておきます。
誤差はせいぜいRatingで±0.3、悪手率で±0.14程度しかないですよってことだけ分かれば大丈夫です。
こちらが段位別Ratingと比較した表になります。
段位別のデータは最近Mortal悪手率が人気になった火付け役のnote『Mortalで見る雀魂のプレイヤーレベルまとめ』から引用させていただきました。ありがとうございます。
そもそもMortalの想定と全然違うルールで打っている人達や、サンプルサイズが小さいもの横には(参考)とつけています。
二人とも玉の間の聖3や八段のスコアを優に越えていますね。(LuckyJの一致率が低い以外)
MortalはLuckyJの実力をそこそこ適切に評価できているようにも見えます。
でもあまあんさんのRatingがLuckyJと遜色ないからといって、ミスをしないAIと並ぶほど強いのでしょうか?多分違いますよね。
Mortal Ratingは実力の評価基準としてはあまり適切ではありません。悪手率なども同様です。その原因について話します。
★★めっちゃめちゃ大事な追記★★
この節での結論は、上記の表と自分のMortalRatingを比較して、自分の実力がどのくらいの段位にいるのかを推測する、などという行為にほとんど意味は無い、ということです。
この記事を読んでなおMortal悪手率などを過剰に気にしている方もいらっしゃったので、伝わりづらい書き方をしてしまったと反省しているため追記しております。
MortalRatingや悪手率は、その半荘でMortalと意見が割れたかことが多かったかを見るための、そして不運な結果への慰めの機能であり、決して実力を測るための機能ではないと心に刻んでください。
あとはリテラシーがある人同士で冗談で自虐を言うのに使うくらいはできます。
★★★★
麻雀AIのスコアが抱える致命的な欠陥
現状の強い麻雀AIたちは、打牌を評価するときに期待値を考えません。
AIの判断基準において評価が低い選択肢は、それが期待値で大差であれ微差であれ同様に減点されます。
これはAIが「適切に第三者の実力を評価する」ためのものではなく、「よりよい麻雀を打つ」ためのものであるため仕方のないことです。
あまあんさんは、比較的どうでもいい打牌でMortalと一致し、LuckyJは比較的どうでもいい打牌でMortalと一致しなかったせいで、両者のMortal Ratingが近づいてしまったのでしょう。
これを見分けることはできないのでしょうか?
簡単です。どんな打牌がMortalに悪手扱いされることが多いのかをチェックすればいいのです。
LuckyJのMortal的悪手
先に申し上げると、LuckyJの悪手、準悪手はどちらも6割が手組における攻守のバランスの相違によるものでした。これらは期待値ではかなりどうでもいいです。仮にこれらを除くとLuckyJのMortal的悪手率は選択全体の1%強しかないことになります。
以下にその例を挙げていきます。
他に多かったのはリーチ判断、副露ケアの手順、リーチを受けてオリている最中に手を崩すかの判断、点数状況込みの判断などですが、その辺りは期待値差が大きそうでした。
AIごとの特徴については後で簡単に話します。
重要なのは、守備が絡まない牌理においてMortalがLuckyJの選択を悪手、準悪手扱いしたことはほぼ皆無だったことです。
人間のMortal的悪手
あまあんさんの悪手、準悪手の3~4割ほどが牌理を間違えて怒られているものでした。その多くはどれも普通の人間には難解ですが、期待値の損失が大きく、MortalやLuckyJとの差はここでついていると思われます。
攻守のバランスで悪手や準悪手になっているものもありますが、悪手、準悪手の中の1~2割ほどしかありませんでした。LuckyJとはだいぶ違います。
偉そうに講釈を垂れている一般聖3のだみーさん(僕)の悪手も載せます。
僕の悪手率は3.1%程度でしたが、守備寄りの手組で減点される頻度が気持ち高い程度で、あまあんさんと悪手の内訳は大差ありませんでした。Mortalっぽい人間はだいたい同じ傾向にあると思われます。
また例を挙げていきます。
以上のような、守備が絡まない牌理に関してのMortalの悪手判定は、ほぼ間違いなく人間側が間違っていると思われます。なお、MortalがLuckyJに準悪手以下と判定したものがなかったというだけなので、Mortal最善の正確性については不明です。悪しからず。
こんな簡単な牌理は実践でもミスりようがない、と思った人は強いです。他の選択も優秀なら、攻守のバランスを除いたMortal悪手率はLuckyJと同じように1~2%に落ち着くと思われます。悪手の内訳、数えてみてください。
また、少し落ち着けば気付くだろうというようなポカで悪手になっているのも人間の特徴ですが、案外少ないです。
少しだけあまあんさんの打牌例を見せます。
あとオマケで(Mortal的)CoolSoul鳴きもつけておきます。
好きな人も多いと思うので。
LuckyJはMortalに鳴き判断で悪手判定されることはほぼありませんでした。
人間が悪手判定された他の打牌の分類は、LuckyJがされたものとさほど変わりませんでした。リーチ判断、鳴きケア手順などが多いです。
まとめに入ります。
Mortalの参考にする所まとめ
要するに、「牌理においてはMortalの悪手判定はかなり信用できるし、成績への影響も大きいからちゃんと見ろよ」ということでした。
あと、LuckyJも人間も悪手判定されることが少なかった部分、具体的に言うと押し引きは悪手までいくとまずいと思われます。
じゃあ他は?というと、あなたが納得した部分は取り入れ、納得できなければ気にしないのが賢明です。
仮に牌理で悪手判定もらっても、あなたが納得しないなら取り入れなければいいです。実はMortalが牌理ミスってると思われる場面もたまにあります。
それでもよりMortalを参考にしやすいように、個人的なMortalとかへの所感を軽く述べて終わります。
Mortal、LuckyJ所感
僕の実力がAIの打牌をきちんと評価できるレベルにないため、具体的な局面を貼ったりはせず、短い文を書くだけに止めます。これは一般人の戯言で、あー君はそう思うんだふーん程度に読んでください。あくまでも個々の判断にあなたが納得できるかが重要です。
・リーチ判断
Mortalはリーチ判断において、πの分布が極端になる(Mortal最善で90とかになる)ことが多いです。また、恐らくリーチの評価が少し低いです。
LuckyJのMortal的悪手の1割ほどがリーチ判断で、その多くはLuckyJ側がリーチ、Mortalがダマにしています。逆もたまにありました。
悪手ではなく準悪手、と判定されたリーチ判断は人間もLuckyJもほぼありませんでした。
リーチ判断については納得できなければあまり気にしない方がいいと思われます。
・鳴きケア手順
鳴き手の危険牌をどの程度先切りするのか、どの程度回るのか、そもそもどの程度押すのかということです。LuckyJへの悪手判定は素人目にはよくわからないもの、少なくとも期待値差は少ないように見えるものが多かったです。
人間側は、鳴きに対する他家の押し返しを見落とす、安牌見落とす等のポカが多いです。適切に画面の情報を処理するのは難しいですね。
自分の手が良くないときの鳴きへの押しで悪手判定が出た時とかは判断基準を考え直してもいいかもしれません。
・対リーチ手順
LuckyJはリーチを受けたとき、回し打ちせずに手牌を崩してMortalに悪手判定されていることがあります。
期待値差は少ないでしょうが、個人的にはMortalが自然に見えました。
だみー、あまあんが悪手判定されるのはベタオリ時の安全度の認識が違う時か、安牌見落とし、押し返し見落としがあった時くらいでした。
個人的にはMortalはワンチャンスに信頼を置きすぎているような気がしましたが不明です。
納得できた時は取り入れましょう。
・テンパイ料のための鳴きなど
個人的にMortalで一番怪しいと思っているのはここです。
鳴いても役アリの門前1シャンテンで3段目に入って鳴いたら悪手、とか
終盤にターツ+安牌トイツ+トイツ+危険浮き牌の1シャンテンでターツ鳴いて安牌トイオトしたら悪手、とかがたまにあります。
点数の入り方が特殊だったりそもそもレアケースだったりで適切に学習できていないものと思われます。
LuckyJの方は見た限りはちゃんと鳴いてました。
鳴いてMortalに悪手判定されても気にしない方がいいと思います。
・点数状況判断絡み
LuckyJはかなり適当です。Mortalはかなりまともです。ただMortalも南4局の条件戦での厳密な条件チェックとかはできません。多分飛び寸もちゃんと認識していません。
LuckyJは南3の2万点差ラス目から染まらない役赤1で序盤に役ポンして2000点アガりにいったり、南3の5万点以上持ちで持ち点少ない親に押し返したりと怪しいところがちらほらあり、Mortalに悪手認定されていました。
極端な点数状況の南3とかに押し引き、鳴き判断などでMortalに悪手判定されたら、点数状況を整理してみることをお勧めします。
追記:
・河の情報
Mortalは河をちゃんと見てません。
残り筋本数が少ないときに明らかに押しすぎていたり、牌理で残り枚数が少ない受けを明らかに過大評価していたりします。
Mortalおかしいじゃんってバズるツイートの内のそこそこの割合を締めます。見かけたら人間のがつえーじゃんって思っといてください。
本題終わり!!!
Mortalについて
こっからは大体雑談です。
Mortalの強さ
LuckyJは特南1300戦安定10段だし、NAGAは昔打ってた奴との比較からどのタイプも安定9段は固そうだけど、Mortalって強いの?と思う方は多いと思います。Mortalは現在まで天鳳などの段位戦を打っていません。
去年特南や玉南を打っていたAIのアカウントがいっぱいある(つのに無許可で!コラー!!!)ことをご存じでしょうか。
そのアカウントたちの多くは特南数百戦打って安定十段以上出して消えていきました。玉南は聖7程度だったらしいです。それらのアカウントが使用していたAIのモデルが一種類なのか複数なのかはわかりませんが、特上安定十段程度の実力のAIは実は珍しくないようです。
そして、現verのMortalはそのようなAIたちと数万戦打って全て勝ち越していたそうです。少なくともLuckyJと同程度か、多分それより強いのかもしれませんね。無許可で段位戦を打っていたAIが根拠になってしまうのが悲しいところですが、次のバージョンとかでいつか天鳳のID取得してパパっと十段まで打ってほしいものです。Mortalやっぱすげー!ってなりたい。Mortalキッズだから。
Mortal RatingとNAGA度
Mortal RatingはLuckyJに89程度のスコアをつけ、八段平均より強いという評価を下すことには成功しました。
一方のNAGA度(ニシキ)は、僕が見た少ない牌譜では90を上回るものはなく、悪手率も一桁後半程度でした。これはおよそ6~7段と同程度であり、LuckyJの実力の適切な評価には恐らく失敗しています。別タイプなら変わるかもしれません。
これは多分MortalがニシキよりLuckyJに似ていて、あとMortalがニシキよりちょっと強かったから、それからMortalがどうでもいい打牌を減点することが気持ち少ないから、だと思われるのですが、このような実力とAIスコアの乖離は、MortalやNAGAが期待値ベースのAIではない以上常に起こりえます。現にMortalも先述のあまあんさん(聖3)とLuckyJの区別には失敗しました。MortalもNAGAも元々レビュー用のAIではないためこれはどうしようもありません。
Mortal製作者のEquimさんは、Mortal Ratingが評価として不適切すぎてmjaiサイトから削除しようとしたけど考え直して高度な設定に入れました。
(実際に使いたいときに毎回チェック入れるのちょっと億劫だったので勝手にデフォルトにする機能作っちゃいました。すみません)
僕は中国語は読めませんが、適当に翻訳かけて読みました。
やっぱりマトモなこと言ったり変なこと言ったりするMortalは親に似てますね。
★追記★
EDWARDHさん(後で紹介する制作陣の方)がAI類似度に関するツイートをしていました。ツリーになっています。
ざっくり言うと、"AIの類似度"(NAGA度やMortalRating)という指標ができたせいで、AIを下手に真似してAI類似度は高いが実力は弱いプレイヤーが多くいる、ということを嘆いていらっしゃいます。
当然のことですが、AIのどうでもいい部分、または間違っている部分を真似ても成績は上がりません。
このEDWARDHさんの一連のツイートを読んで、内容に理解していなかった部分があったら、理解してからぜひもう一度この記事を読んでください。
この記事は、MortalRatingが実力のたいした指標ではないということ、あとみなさんがMortalのどこを積極的に学べばいいのかということ、どこはどうでもいいのかということについて書きました。
この記事を読んだ方が、適切なリテラシーを持って麻雀AIを使用してくれることを願っています。
★★
救世主
???:「そんなに期待値が知りたいなら、私を使えばいいじゃない!」
そ、その声は…
なんとAkochanは予測期待値を出力してくれます!
pt EVが段位ポイント期待値、Deal-in(%)は瞬間放銃率、その右は放銃時と放銃しなかったときの段位ポイント期待値です。
レビューがゆっくりなのが玉に瑕。
Mortalほどは強くないのも玉に瑕に瑕。
でも期待値のイメージは湧くので、どんな打牌がどの程度損なのかあんまり分からない方にはオススメです。
Mortalに悪手って言われたのをAkochanに「これどのくらい損なの~?」って聞いてみるのはアリだと思います。
開発陣の方々紹介
Mortalが置いてあるサイトの下の方に書いてありますが、よく知らない方も大勢いそうなので勝手にご紹介します。
・Equimさん
Mortal作った方。ありがとうございます。
親の親ってことはおじいちゃん…?
ここからおじいちゃんに投げ銭できます。しましょう
・新篠ゆうさん
Mortalが置いてあるサイトを作った方。ありがとうございます。
昔ダジャレ魂天で鳴らしていたVtuberでもあります。
最近はたまになんでもないツイートをTLで見かけてこれダジャレか…?って考えてもたぶんダジャレじゃないです。さみしいです。
聖3からも落ちかけてしまっています…つよくいきて…
最近日本に来てたEquimさん、あとkanachanのCryoliteさんと遊んでたみたいです。おいしそう。おなかすくいむ。
?
・EDWARDHさん
インフラ提供の方。ありがとうございます。
ご存じ雀魂牌譜屋もEDWARDHさんのサーバーで動いています。
面白いツイートをしてくれがち。
noctuaのCPUクーラー(めっちゃいいやつ)が見えますね。ほんとに熱そう。そういえばグラボは3090(めっちゃいいやつ)っておっしゃってた気がします。熱そう。
細かい仕様やプライバシーについて
Mortal Conveniencerの細かい仕様を書いておきます。
・Chrome拡張なのでスマホ版では使えません。
・スプレッドシートのセルA2が空のときは持ってきた値のタイトルをセルA2~J2に書き込みます。
・書き込む時は毎回スプレッドシートのセルA3~J3に新しくセルを追加し、そこにデータを書き込みます。行を追加しているわけではないので列K以降は影響されません。
・スプレッドシートに書き込まれるのは、
利用したAI
Mortal Tag
Softmax温度
手前の人の段位
rating(非表示の場合は0)
AI一致率
悪手率(π<0.05の選択の割合)
準悪手率(π<0.1の選択の割合、悪手も含む)
レポート画面のURL
レポートの生成日時
の10項目です。選択できるようにしたりする予定は今のところないです。
可能なら着順も記載したいところではありましたが、上手い方法が思いつきませんでした。欲しい方は手入力をお願いします。
ちなみにSoftmax温度を変えるとπτ(a∣s)を算出する式が変わります。Qハット^π(s,a)やratingは変わりません。みんなデフォルトの0.1で見ていると思うので、同じ環境にするために0.1をお勧めしておきます。
・Chromeブラウザ内ではどのページでも右クリックメニューにMortal Conveniencerが常駐してしまいます。Mortalレポート画面だけで表示しようとすると、右クリック時、またはアクティブなタブの変更時に毎回現在のページのURLを取得する処理を行うことになるので動作が重くなる可能性があると判断してこの仕様になっています。ユーザーからすると気持ち悪いので気が向いたら設定できるようにするかもしれません。
なお、当然ですが"成績を書き込み"はクリックした直後に現在のページのURLを取得し、Mortalレポート画面でなければ何もせずすぐに処理を終えます。
・Mortal Conveniencerはみなさんのスプレッドシートへのアクセス権を必要としますが、今回説明した機能以外のこと、例えばスプレッドシートのデータを収集するなどに使うことは一切ありません。過去にそういう事をされていた方がいらっしゃったようです…
あとがき
このChrome拡張が完成した日にちょうど、Mortalレポート画面のURLを入力して悪手率を計算するアプリを作られた方の記事、『麻雀AI・Mortal牌譜検討から悪手を計算するアプリケーションを作ってみた』を拝見しました。やっぱりみんな似たようなこと考えますね…
あちらはwebサイトなのでスマホでも動作すること、管理アプリがスプレッドシートに限定されないこと、特に権限を渡さなくていいことが良いところで、こちらはコピペの手間が省けることが良いところです。
Mortal ConveniencerはChrome拡張としてMortalレポート画面内の情報をスクレイピングし、それをGoogle Apps Scriptで作ったAPIに送信してスプレッドシートへの書き込みを行います。
ただこの方法はとある理由からセキュリティの観点からはかなり酷いです。スプレッドシートの中身が麻雀の成績データでしかないので、少しの利便性と開発の簡単さを優先しています。
くれぐれもMortal Conveniencerに共有したスプレッドシート内に重要な情報は書かないようにお願いします。そんな人はいないと思いますが、、
最初は自分用のつもりで作っていたのでこうなっていますが、始めから公開するつもりだったら先に紹介した方と同じようにwebサイト作ってそこにURLを入力する形にしていたと思います。
もし何か問題が起きたらすぐに閉じる予定です。そうなったらすみません。
それはそれとして、初めてのJavaScriptだったのでちゃんと形になってよかったです!プログラミングは完全に趣味でやってる日曜プログラマー?なので何か完成した時の嬉しさは大きいです。昇段した時より嬉しいです。
日曜プログラマってどのくらい人口いるんでしょうか、、学校でもプログラミングの基礎の授業はやったりするのでちょっとがんばったら簡単なものを作れるような人はけっこういそうですよね。
作りたいものを作れることに気付くのが日曜プログラマの一番大きなハードルな気がします。みんなも何か作ろう!日曜プログラマが増えたらネットに転がってる開発時に有用な情報が増えそうだから!
だいぶ長くなってしまいましたが、この記事によってみなさんがMortalをよりよく活用できるようになれば幸いです。ありがとうございました。