糞糞糞ネット弁慶

読んだ論文についてメモを書きます.趣味の話は http://repose.hatenablog.com

CXSimulator: A User Behavior Simulation using LLM Embeddings for Web-Marketing Campaign Assessment (CIKM 2024) 読んだ

[2407.21553] CXSimulator: A User Behavior Simulation using LLM Embeddings for Web-Marketing Campaign Assessment

「ユーザの行動ログから何らかのモデルを構築し,ユーザの行動をシミュレートしたい」という気持ちはよくあることでしょう.たとえば,EC サイトにおけるユーザの閲覧・購買ログを用いて「どのようにユーザは購買に至るのか?」を明らかにする,といったものです.

その際,既存の行動ログに含まれない未知の介入 (e.g. 新たな商品を追加する,値引きクーポンを配布する) を行った際,ユーザの行動がどのように変化するのかがシミュレーションできるとなお嬉しいでしょう.なぜならば,未知の介入によるユーザ行動の変化とそれによる効果を測定するには A/B テストなどを行わなければならず,これには時間的・金銭的なコストが発生するためです.

この論文では

  • ユーザ行動のシミュレートをイベント間の遷移確率行列として捉える
  • その後,遷移確率行列の各要素 (イベント間の遷移確率) を推定する trainsition probability prediction モデルを構築する
    • これはイベント間の link prediction とみなせる
  • 「未知の施策によるユーザ行動の変化」を trainsition probability prediction モデルに未知の施策を入力して得られる予測値を遷移確率行列に追加することで表現する

というモデルを提案しています.

short paper なのでかなり記述が割愛されていますが,わかる範囲でまとめます.

(タイトルに LLM と入っていたため,大規模言語モデルによりシミュレーションを行っているのか? と早とちりしましたが実際にはそうではありません)

(以下の見出しは Figure 1 に沿っています)

入力データ

  • 「ユーザが何をしたか」のそれぞれ (e.g. 「ページ A を見る」「クーポン B を獲得する」「アイテム C をカートに追加する」など) を「イベント」と呼び,その集合であるユーザ行動ログがあるとする
    • イベントには {"actionType": "Product detail views", "pageTitle": "Office", "pagePath": "/store.html/quickview" , "productName": "Colored Pencil Set", "localProductPrice": "$3.99"}. といった構造化されたメタ情報が付属しているとする
  • ユーザにも {"country": "United States", "browser": "Chrome", "source": "Direct"}. といったセグメント情報が付属しているとする

(a) ユーザ行動を遷移確率行列として捉える

  • 全てのログについて「イベント v_i から イベント v_j に何回遷移するか」を全て数え上げることでイベント間の遷移確率行列が推定できる
    • 得られる遷移確率行列は |ユニークなイベント数| x |ユニークなイベント数| の形である
    • またこの時,遷移確率行列はユーザのセグメントごとに推定する

(b) Transition Probability Prediction モデルの構築

  • セグメントごとの遷移確率行列の各要素 (v_i, v_j) を目的変数に取る,Transition Probability Prediction モデルを学習する
  • 説明変数には以下を用いる
    • v_i のメタ情報に対して LLM を用いることで得られる embedding vector
    • v_j のメタ情報に対して LLM を用いることで得られる embedding vector
    • セグメントに対して LLM を用いることで得られる embedding vector
  • Transition Probability Prediction モデル推定については,直接遷移確率行列の値を推定せずに,以下のように段階的に推定することで精度が改善する (らしい)
    • ふたつのイベント間に遷移が発生するか否かの link prediction (classification)
    • 遷移が発生している場合の遷移確率の推定 (regression)

(c) キャンペーン効果の推定

  • まずは,効果を検証したい未知のイベント v_new (のメタデータ) を準備する
  • 未知イベントのメタデータの embedding vector を得る
  • Transition Probability Prediction を既知の全てのイベント v_i について (v_i, v_new) と (v_new, v_i) との両方を適用することで,既存のイベントから未知イベントに (かつ,未知イベントから既存のイベントに) どう遷移するかを推定する
  • その後,得られた新たな遷移確率行列上でいい感じにシミュレーションすることで,未知イベント追加による効果の違いが観測できる

ランダムな予測値における ROC-AUC は0.5,では nDCG は?

先に結論

nDCG@all はどんな予測値やモデルであっても 1.0 に近づくので注意したほうが良さそうです.

疑問

機械学習モデルにおける予測値の評価にはさまざまな指標が用いられます.

  • RMSE
  • prec / recall / f1-score
  • negative log-likelihood

二値分類ではとくに ROC-AUC (Area Under the Receiver Operating Characteristic Curve)1が用いられることが多いでしょう.

ランダムな予測値に対する ROC-AUC はその定義上からも 0.5 になることが知られています.これは非常に便利で,ROC-AUC の厳密な定義を知らない人でも「この予測結果はコイントスよりどれだけ優れているのか」がすぐに把握可能です. (ちなみに ROC-AUC については Quality Metrics in Recommender Systems: Do We Calculate Metrics Consistently? (RecSys 2021) に非常に興味深い話が複数掲載されているので,いつかまとめます.)

ところで,二値分類問題を「予測結果にもとづいて並び替えた時に,より真のラベルを持つものが先頭に来るように並んでいるか?」のようなランキング問題として捉えましょう. この場合は評価指標に nDCG (Normalized Discounted Cumulative Gain)2を用いることがしばしばあります(WWW20113 や KDD20194 など).

(ここでは nDCG の定義は割愛します) さて,機械学習モデルを構築し予測値を得て nDCG で評価する時,「ランダムな予測値に対して nDCG はどのような値を取るのだろうか?」と疑問に思うのが自然でしょう.

関連研究

これに取り組んでいるのが A Theoretical Analysis of NDCG Ranking Measures (COLT 2013) です (余談ですが 2024年2月4日現在,google 検索によるとこの論文に日本語でリンクしているのは 推薦システムの基本的な評価指標について整理してみた | NHN テコラス Tech Blog | AWS、機械学習、IoTなどの技術ブログ のみであり,とはいえ論文の内容には全く言及されていません).

この論文では 3.1 にて

Surprisingly, it is easy to show that for every ranking function, standard NDCG (引用者による注釈 : nDCG@all のこと) converges to 1 almost surely. (中略) At the first glance, the above result is quite negative for standard NDCG. It seems to say that in the limiting case, standard NDCG cannot differentiate ranking functions.

と書かれており,証明である Appendix E を読まずとも Appendix A を見ると

  • nDCG@all (評価に全件を用いる場合) はほぼ1に収束しているものの,どうにかアルゴリズム間で多少の差がある (Figure 1)
  • nDCG@k (評価にk件を用いる場合) はかなりよく区別がつけられている (Figure 4)

ことがわかります.

実験

COLT の論文の数式を追うのは疲れるので,python のコードで再現しましょう.大まかな方針です.

  • N = 100, 200, ..., 100000 と変化させながら以下を繰り返す
    • p を 0.1, 0.3, 0,5 で変化させながら以下を繰り返す
      • 以下を100回繰り返し,それぞれの nDCG の平均値を計算する
        • ランダムな値を N 個作り,予測値とする
        • N 個のうち,確率 p でランダムに 1 を,残りに 0 を振ってこれを正解ラベルとする
        • k = 1, 10, all で変化させ以下を繰り返す
          • nDCG@k(正解ラベル, 予測値, k) を評価する
from collections import defaultdict

import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics import ndcg_score
from tqdm import tqdm

# サンプルデータの生成
rng = np.random.default_rng(6162)

results = defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: list())))

x_indices = []
top_ks = [1, 10, "all"]
probs = [0.1, 0.3, 0.5]
for n_samples in tqdm(range(1000, 100001, 1000), ascii=True):
    x_indices.append(n_samples)
    predicts = rng.random(n_samples)
    for p in probs:
        n_answers = int(n_samples * p)
        for _ in range(100):
            answers = np.zeros(n_samples, dtype=int)
            answers[:n_answers] = 1
            rng.shuffle(answers)
            for k in top_ks:
                _k = n_samples if k == "all" else k
                ndcg_at_k = ndcg_score([answers], [predicts], k=_k)
                results[p][k][n_samples].append(ndcg_at_k)

# show
for k in top_ks:
    labels = []
    values = []
    for p, h in results.items():
        _h = h[k]
        label = f"p={p}, ndcg@{k}"
        labels.append(label)
        vals = [np.average(_h[n]) for n in x_indices]
        values.append(vals)

    for value in values:
        plt.plot(x_indices, value)

    plt.legend(labels)
    plt.title(f"ndcg@{k}")

    plt.savefig(f"/tmp/hoge_{k}.png")
    plt.close()

グラフを見ると

nDCG@all
nDCG@1
nDCG@10

といったように

  • nDCG@all は正解ラベルの割合によらず,順調に右肩上がりで 1 に近づいている
  • nDCG@k は震えており,心の目で見ると k の値によらずに正解ラベルの割合 = p 周辺にいるように見える

がわかります.特に nDCG@all は見事に再現できました.

結論

  • nDCG@all は非常に大きな値が出てしまうこと,アルゴリズム間の値の差が小さく見えてしまうことから,利用時には十分注意したほうが安心でしょう
  • nDCG@k がランダムな予測でいくつになるのかはよくわかりません.心の目で見ると k の値によらずに正解ラベルの割合 = p に収束しているようにも見えます
  • COLT の論文が読める人がいたら教えてください

参考文献

尾花山ら「データ分析失敗事例集: 失敗から学び、成功を手にする」読んだ

著者から恵贈いただきました.

タイトルの通り,この本ではデータ分析業務において誰もが一度は経験したことのある失敗事案が大量に (25件) 書かれています.

  • 冒頭でプロジェクトの利害関係者が整理されているので話に入りやすい
    • 分析プロジェクトにおいては受発注,親会社・子会社,協業などの様々な関係が入り乱れることが常です
    • 自分がなんらかのプロジェクトに関わる場合にも,このあたりの関係を把握しておくとプロジェクトにおける力関係が把握できて良いと思います
  • どの事例も非常によくある
    • 「目的より技術が先行してしまう」「思い込みばかりが先行してしまう」「意地やメンツを優先するあまり引き返せなくなってしまう」「意見の妥当さよりパワーバランスが優先されてしまう」など,非常にありふれた原因による失敗がこれでもかと網羅されている
  • 振り返りが良い
    • インターネットで注目を集めるデータ分析失敗事例は往々にして「技術を理解しない営業・経営者が全部悪い」に落ち着きがちですが,本書はそのような安易な振り返りでは終わりません
    • ここが本書の良い点だと思います
  • 一方で,あとがきにもあるように「成功を手にする」は難しい
    • なぜなら「こうすると失敗する」というのはアンチパターンであって,それを避けたらじゃあ上手くいくのかというとそういうわけでは無いことに注意が必要です
    • 「野菜の皮は剥く」「じゃがいもの芽には毒があるから外す」「煮込む時は焦がさないように弱火でかきまぜる」を守っても,まずいカレーは回避できるかもしれませんが美味しいカレーができるわけではないからです
    • とはいえここまでいくと「成功」の定義は何かという話になるわけですが
  • 以下に書くように議論が盛り上がると思います.会社で本書を使って読書会をするのが良いのでないでしょうか

ここからは個々の事例で気になった点を書きます.

  • 「1. UI を統一して UX が破綻する」
    • 深く掘られてはいませんが,本書においてこの事例が最も困難だと思います
    • おそらく現実的な選択肢は「良くも悪くもゴリラのように超人的な腕力と根性を持つ一人の PM が解決する」か「個別のダッシュボードを大量に乱立させて蠱毒のように生き残るまで待つ」の二択
    • もし自分ならば「会社・チームにデータを見る文化・価値観を根付かせる方が先」と考えて後者を選びたい
      • ものを作るより文化や価値観を作る方が難しい
      • もし個別のダッシュボードを作ってそれが全て終わってしまったら,それまでということで
  • 「4. 本当に季節性はありますか」
    • 「担当者の思い込みが原因」とで終わる話ではないと思う
    • なぜなら「季節性があると信じるに至った理由」が何かしらあるはずで,時に人はそれをドメイン知識と呼ぶのではないでしょうか
    • 一歩間違えると「データだけを見てドメイン知識を取り入れなかったデータ分析担当者が原因で失敗した」という事例にもなりうる
    • 「現場の人が言うことは正しく,間違っている」の気持ちが大事だとは思うが,とはいえ実際には難しい
  • 「7. ほとんど故障しない製品の故障予測」
    • 登場人物の「関連会社研究所のデータサイエンティストR氏」を見て「これはR氏がデータを見ずに最先端の論文を振りかざして大失敗する話だ」と予測したら外れた
    • 話は良かったですね
  • 「10. 成功した報告しか聞きたくない」
    • この事例の議論には違和感があり,そもそもB社のマネージャーY氏目線なのか,データサイエンティストT氏目線なのかで話が変わる
    • マネージャーY氏目線
      • 効果検証ではなく事業提携について検討するための分析であるならば,Y氏がT氏に適切にそれを説明すべき
      • そもそもT氏を暴走させるあたりY氏が何もしていないように見える
      • Y氏が最終報告会の前に最低限B社関係者に「A社の分析が妥当ではないこと」を根回しするのが落としどころでは
    • データサイエンティストT氏目線
      • 「X氏の誘導する意思決定は避けられない」ならば,T氏にできることは可能な限り速やかに手を引く,または退職することでしょう
        • 今後業務提携が進んだ場合,A / B 社は適切なパワーバランスではなく,X氏による支配は避けられず,同様の事例が発生し続けることが目に見えており明らかにT氏の精神衛生に悪い
        • マネージャーのY氏がこれまでと同様に今後何もしないことも目に見えている
  • 「17. いくら分析したところで,売れないものは売れない」
    • そこまで分析失敗の事例とは思えません
    • 孫請けのデータ分析会社のZ氏について「不良在庫を抱えることになってしまった原因は,契約上の責任はさておき, 技術倫理の立場で言えば,そこを押し切られてしまったZ氏にあると言っても過言ではないでしょう」は言い過ぎ
      • 商品設計を失敗したことの方が問題で,Z氏ではなく,発注元A社やウェブ開発会社B社の責任を問うべきでは
    • 僕はもっとポジティブで,「黎明期にどのように売り物にしていいかわからない時代にあってもどうにか売上が出ていたのだな」という気持ちです
      • これの事案についてはそもそも「我々はインターネット広告が商品として完成した世界に慣れすぎてしまっている」という,後付の理屈があるようにも思いました
  • 「25. 機械学習モジュールの寿命」
    • とても良い話
    • の一方で,そこまで (中長期的に) 成功したのかというといくつか疑問が残ります
      • どのような犯罪行為であって,行為の検知やその対応をどのように行っているのか
        • これは詳しく書けない領域だとは思いますが
        • これによって機械学習を用いるかどうかが変わってくるように思います
      • MLOps の維持コストよりもカスタマーサポート側の人的コストの方が高いのではないか
      • 悪意を持ったユーザ / システムがルールを回避しようといたちごっこが発生するのが想定される (だからこそクレジットカード会社や SNS などはここにコストを払う) わけですが,その度にルールを書き換えるのか
        • どのように?
        • いたちごっこに対応するには「ルールの整備」というコストが発生し,それは機械学習モジュールをメンテナンスし引き継ぐコストと同等になるのではないか
          • 落とし所としてはパイプラインそのものを維持し続けるのではなく,定期的なモデルの再学習を行うのではないでしょうか
      • どれだけ本気で犯罪行為に対応したいのか
        • 極端な話,不正検知を取りこぼしたとしても「ごめんなさい」で済むのならばルールすらもいらない可能性がある
          • ユーザやカード会社から問い合わせがあった場合のみ対応すればいい
        • このあたりの費用対効果の話になると「技術倫理」という単語から「フォード・ピント事件」を連想するわけですが

「評価指標入門〜データサイエンスとビジネスをつなぐ架け橋〜」読んだ

関連記事 : 書籍「評価指標入門」の出版に寄せて 〜監修の想い(O・MO・I) - 株式会社ホクソエムのブログ

著者からいただきました.

この本は大きく

  • 予測モデルを構築する取り組みにおいて「真に必要な,計算すべき値は何か」「(その値が計算できない場合,むしろ計算できないことがほとんどですが) 我々は何を代わりに計算しているのか」を自覚し,もっと丁寧に考えるべきである,という啓蒙的な部分
  • さまざまな評価指標を紹介する辞典な部分

の二つに分かれています.

  • 啓蒙
    • このパートは非常に共感しました
    • 一方で「このパートが何を説明しようとしているのか」や「なぜこのように一見分かりきったことを説明しなければならないのか」は著者の心情が察せられるというか,このパートが伝わるにはある程度の経験が必要に思いました
      • これは決して「このパートが冗長である」ということが言いたいわけではありません
      • おそらく,データ分析にたずさわって3年目ぐらいまでの自分では「この本は何を言っているのだろう」と辞典パートまで読み飛ばしていたように思います
    • このあたりの話をどう語り継いでいけばいいのか,というのを考えさせられました
      • この「考え方」は (悪い教育の例としてしばしば現況される) 「体で覚える」になりがちに思います
    • この本を読んだ人が数年後「そういえば今苦しんでいる話は昔読んだあの本が言っていたことなのか」と気付く,そのような形で遅れて響くのでしょう
  • 辞典
    • 案外と機械学習の教科書に載っていないことがあるので,このようにまとまっていると結構便利
    • マシューズ相関係数や G-Mean は知らなかったので勉強になりました
    • 2.9.2 決定係数 R2 にて「非線形モデルの評価に用いるべきではない」と書いてあるのが良い
      • scikit-learn のサンプルコードでも非線形モデルで r2_score が使われている例があったように思います
      • せっかくなので「なぜ用いるべきではないのか?」まで一言欲しかったです

一通り python で予測モデルが書けるようになった人に読んでもらい,「前半についてどのように考えたか」を議論するところから始めるのが良さそうです.

「施策デザインのための機械学習入門 データ分析技術のビジネス活用における正しい考え方」 読んだ

著者よりご恵贈いただきました.いくつか読むべき本があったのですが,社内で読書会をするために優先して読みました.感想を書きます.

著者は当時学部生とは思えないスピードでトップカンファレンスに論文を通している齋藤優太氏サイバーエージェントにて機械学習と経済学 (特に因果推論) の研究を行っている,「効果検証入門」の著者でも知られる安井翔太氏.監修はホクソエム社

第一線で活躍する若手研究者が日本語で本を書くことがどんなに貴重か (一部の研究者が「日本語の原稿や国内学会は業績ではないので意味がない.運営負荷も高いために縮小・廃止すべきだ」「日本語の専門書は不要であり,原著を読める人間だけが読めばいい.」と主張している背景があります) という話をしても一部の人にしか伝わらないと思うので本の話を順にします.

本書の教えがどこまで再現できるかに関わらず,機械学習モデルを用いて何らかの意思決定を行う人は一度読むと非常に勉強になると思います.また,この領域の研究者がどのような問題意識を持っているのか,どのような単語や記号で定式化しているのかがわかるため,論文を読むための足がかりとしても有効だろうと思います.

1章「機械学習実践のためのフレームワーク

1章「機械学習実践のためのフレームワーク」では,本書の根底にある「フレームワーク」の導入が行われます.これは目次にそのまま書かれているのですが,本書において特に強調されているのは「データの観測構造をモデル化する」「観測データを用いて解くべき問題を近似する」の2点ではないでしょうか.

データの観測構造への理解・認識が曖昧なままだと,誤った仮定や思い込みを解消することができず,その結果得られるモデルにバイアスが生じます.これを説明しているのが前者です.そしてバイアスを観測データからいかに除去するか,また,いかにして軽減できるよう (本来解くべきであるが様々な理由によって解けない真のモデルを) 近似したモデルを構築できるかが後者です.

表1.3 の例はその最たるものです (「効果検証入門」の読者には見覚えがあるでしょう).この表から「クーポン配布は性別に関わらずランダムに配信されている」という思い込みに従ってナイーブにクーポンの効果を計算してしまうと,本来の効果 (そもそもこれが観測できないから困っているわけであり,永遠の課題ですが) とは異なる値が得られてしまいます (ここまで読んだところで「効果検証入門」で述べた回帰による効果の推定が本書では行われていないことに気付きました).

この1章のフレームワークにもとづいて,続く章では具体的な問題とバイアスについて触れています.

2章「機械学習実践のための基礎技術」

ここからは具体的な問題に取り組みます.まずは属性推定です (これは属性推定だけでなく, look-alike などにも適用可能でしょう).この時,学習は属性情報が付与された会員データが対象であり,予測 (推論) 時には属性情報が付与されていない非会員データが対象であるため,「会員になるかならないか」がランダムではなく,何らかの要因によって偏っている場合,モデルにはバイアスが含まれてしまいます.言葉にすると何となく分かることを数式を用い「ここにバイアスが生まれる余地がある」「よっての項を追加すると良い」と説明されるのでとても気分が良いです.

次に取り組むのは,既に何らかの意思決定モデルが動作しており,その結果として得られるログを対象により良い意思決定を推定する問題です.過去動作していた意思決定モデルによるバイアスを軽減するために IPS (Inverse Propensity Score) 推定量や Doubly-Robust (DR) 推定量の説明が行われます.ここの説明も一見 IPS だけでいいように見せかけてよく考えるとこれデータがもったいないのでは? という気持ちから DR の説明に入るので理解が進みます.しかし DR 推定量は特に数式の説明がなく唐突に現れるため,この道理を知るためには元論文を読む必要がありそうです.

著者らの研究成果である Open Bandit Pipeline についての説明も1節を割いて行われています.これは社内読書会で検証する際にちゃんと読みます.

3章「Explicit Feedback を用いた推薦システム構築の実践」

続いては商品推薦タスクです. Explicit Feedback と呼ばれるシチュエーションでは,ユーザは商品の評価を uniform に行うわけではなく,そもそもユーザは興味がある程度ある商品しか評価を行わないため,結果として観測されるデータにはバイアスが含まれてしまいます.ではこのデータからより良いモデルを学習するにはどうすればいいのか? という話と,研究用データセットを用いた検証が行われています.

4章「Implicit Feedback を用いたランキングシステム構築の実践」

こちらも商品推薦タスク (タイトルは「ランキングシステム」ですがここでは簡単のため商品推薦タスクと呼びます) です. Implicit Feedback という状況において,3章とは異なるバイアスを考慮しています.それは

  • ポジションバイアス : 商品がユーザに表示される順序が上位であればあるほどクリックされやすい.反対に順序が下位のアイテムがクリックされなかった場合,興味がないのか,そもそもユーザの目に入っていないのかの区別がつかない
  • 選択バイアス : そもそも商品がユーザに表示されていない
  • クリックノイズ : ユーザが誤って興味が無い商品をクリックしているかもしれない

の3つです.これらをどう組み込むかを段階的に説明しています.

5章「因果効果を考慮したランキングシステムの構築」

最後に,「クリック後の購買行動」などを KPI にした時の「推薦機能由来での KPI を最大化する施策」と「プラットフォーム全体での KPI を最大化する施策」の推定について触れています.特に後者は推薦枠が有限である場合,推薦しなかった場合の売上と推薦した場合の売上それぞれを考慮し,最も良いものを探す,という話で uplift modeling の雰囲気を感じます.

本書の良いところと限界

本書の良いところは「バイアスから目をそらすな」という話を繰り返し述べている点です.本書を読み終わり,思想をある程度理解した読者においては,つい手癖で手元のデータに対して何も考えずにモデルを作ってしまう前に「お前の手元にあるデータにはこのような偏りが入っているはずだが?」という内なる著者らからの指摘がきっと入るでしょう.

とはいえ本書の内容がそのまますぐに日々の業務に反映できるかと言われると,そのまま適用できる人は少ないのではないかと思います.

たとえば3章の IPS 推定量に必要な傾向スコアの計算には,完全にバイアスが存在しないデータが必要であり,後段の Yahoo! R3 データでの実験でも (ランダムに収集されバイアスが存在しない) テストデータの一部を用いて傾向スコアを計算しています.3.6 にて補足が入るものの,「このデータにはバイアスがかかっています.それをどう補正したらいいでしょう?」 -> 「ここにバイアスのかかっていないデータがあるので補正に使います」の流れには困惑しました.

また,2章では「過去,どのような値にもとづいて施策を行ったか」を示す (「古い意思決定モデルの行動選択確率」と呼ばれています) \pi_{b} の値が必要です (とはいえ p79 において既存のデータから推定する方法にも触れられています).4章においても,説明している手法の学習には「これまでどのユーザにどの順序で商品を表示していたか」のデータが必要です.これらのデータが現行のシステムにて保存されていない場合には本書の手法をそのままでは適用できません.

とはいえ「では本書は全く役に立たないのか」というわけではなく,

  • これからはなるべく今後のために施策にまつわるデータを収集しよう
  • 「現状のデータにはバイアスが含まれている」と意識することにまず意味がある
  • バイアスを軽減するためのさまざまな手法が研究・開発されているのだから,困ったら本書や本書が言及している論文を読もう

という話ではないかと思います.繰り返しになりますが,本書の教えがどこまで再現できるかに関わらず,機械学習モデルを用いて何らかの意思決定を行う人は一度読むと非常に勉強になると思います.

細かい話

  • 2章で「データサイエンティストはこうやってナイーブな統計量を出してしまうがそれでは駄目」と散々な書き方をしており,そこまで言わなくてもいいのではないかと思いました
  • 表1.2 と表2.2 の話,気持ちはわかるのですが表現が適切でないように思います.ここでは「推定した値と真の値との誤差」でどちらのモデルが良いかを議論し,誤差が小さいモデルで意思決定をすると失敗する (モデルの推定誤差と,そのモデルに従って振る舞った時との結果が食い違う) という話なのですが,そもそも真の値を知っているのならばモデルを推定する必要がない (真の値にもとづいて意思決定すればいい) でしょうし,「モデル評価では真の値を確認できるが意思決定時には参照できない」というのも不自然に思います.より正確には「既知のデータでモデルを推定する」「未知のデータに当てはめる」「既知と未知のデータは同様であるという強い仮定がある」「よって既知のデータに対する誤差が優れたモデルを採用し未知のデータの意思決定に用いる」だと思うのですが,お気付きのようにこの説明はとても面倒です
  • p170 の式は先頭の項に閉じ括弧が一つ足りないと思います.恐らくは  (C(u_{j}, i_{1}, y_{j}(i_{1})), C(u_{j}, i_{2}, y_{j}(i_{2})),\cdots, C(u_{j}, i_{m}, y_{j}(i_{m})))

A Method to Anonymize Business Metrics to Publishing Implicit Feedback Datasets (Recsys 2020) 読んだ

論文

Gunosy理研AIPの論文.

企業が持つ implicit feedback のデータを公開するためには

  • アクティブユーザ数や収益や平均クリック数といった business metric を隠したい
  • 公平性を担保したい
  • Population Bias を減らしたい

という三つの気持ちがある.

今回はログ中のユーザをサンプリングして公開用データを構築するわけですが,ユーザごとにサンプリング時の重み w を推定する問題として定式化する.

この時

  • business metric を隠すために,サンプリング後のクリック数の分布と特定の分布 (zipf など) との Wasserstein distance を取る L_{\mathrm{click}}(w)
  • 公平性のためにサンプリング後のユーザの属性の分布と uniform distribution との KL divergence L_{\mathrm{attribute}}(w)
  • Population Bias 対策でサンプリング後の記事のカテゴリ分布と uniform distribution との KL divergence L_{\mathrm{category}}(w)
    • ここで uniform するのが fairness っぽい研究の匂いがする

の3つを重みのハイパーパラメタをかけた線形和を最小にするように w を推定する.以上.

よくわからなかったところ

  • 数学力が低すぎて 3.4 を読んだだけではどうやって w を推定していいか全く分からなかった.一番ナイーブな方法は w をただの user の重みとみなして適当にやることですがきっとそういうわけではないだろう.5.4 で Faking Fairness via Stealthily Biased Sampling (AAAI 2020)が言及されていますが査読で何か言われなかったのだろうか
  • サンプリングの方針としてユーザを選ぶ sampling user とユーザの行動ログをサンプリングする sampling behavior log の二つがあって本論文では前者が採用されている.後者を採用しない理由は時系列つきのログでよくやる「次に登場するアイテムは何か?」というタスクに対応できないからだと言われているが一部が欠けていても (よほど強烈なマルコフ性などが存在しない限り) できなくはないのではないかと思った
  • Table 1 の最下段は 2CCtypo だと思う
  • 4.2.4 にて Zipf(1) における Population Bias を考慮した結果が考慮していない結果とあまり差がない (これは本当に悲しい) 理由がよくわからなかった
  • 4.3 で述べられている timestamp の分布が近いみたいな話,いい話ではあるのだけど狙っていないのにどうしてこうなったのかがよくわかっていない
  • そもそも「企業が持つデータセットが有用である」とは一体どういう事なのかを考え始めるとよくわからなくなってきた
    • 思いついたひとつに「公開データセットで得られた知見は未公開のデータセットにおいても有用である (だからこそ公開データセットでの精度改善には意味がある)」というのがありそうだけど,これは一体どうやって検証したものだろうか
    • 十分に検討された疑似データと実データセットの差とは何か,実データセットだとどのような価値があるのだろうか.「実データセットを用いた検証の結果〜」とは論文の abstract に死ぬほど登場する言葉ではあるが,それは一体どういう価値があるのか考え直したい気持ちがある (IrisMushroom だって実データセットだ)

声優統計コーパスに存在する誤りの告知と JVS コーパスの利用推奨

声優統計コーパスの音素バランス文,および音声データについて告知します.

告知

今後,音声を新規収録される場合には声優統計コーパス付属のバランス文ではなく,句読点情報が付与された JSUT コーパスまたは JVS コーパスvoiceactress100 (以降, voiceactress100 と呼びます) の使用を推奨します.

  1. 声優統計コーパスのバランス文と voiceactress100 は一部の単語が異なっており,完全な互換性がありません
    1. voiceactress100 は声優統計コーパスバランス文を音声処理の研究者が洗練したものです
    2. 声優統計コーパスの一部の読みはバランス文と一致していません.また,アクセントや句読点位置も統一されていません
  2. 上記の理由により,今後,音声を新規収録される場合には声優統計コーパス付属のバランス文ではなく voiceactress100 の使用を推奨します
    1. その際のイントネーションはプロ話者によって発話された JVS コーパスに従うことを推奨します
  3. 感情表現を活用したい場合,またはプロ話者かつ高サンプリングレートのデータを使用したい場合のみ声優統計コーパスの音声データを用いるのが良いと私たち (日本声優統計学会) は考えます

声優統計コーパスと JSUT/JVS コーパスの関係

1.-i. に関して,声優統計コーパスと JSUT/JVS コーパスの関係について補足します. 両者とも,条件付で自由に利用 (コピー・共有・編集) できるコーパスです.それぞれの関係は

  • Wikipedia : CC BY-SA ライセンスにもとづいて本文データを公開
  • 声優統計 : Wikipedia のライセンスを継承してバランス文を構築 (翻案・利用)
  • JSUT : 声優統計のライセンスを継承して翻案・利用
  • JVS : JSUTのライセンスを継承して翻案・利用

です.

声優統計コーパスにおける既知の誤り

1.-ii. について,現在判明している誤りです (ご指摘してくださったつくよみちゃん様,本当にありがとうございました).これらは全て私たちの力不足・確認不足によるものです.

  • 「いしつみ」を「いしづみ」と読み上げている音声がある
  • 「鎮痛薬」を「鎮痛剤」と読み上げている音声がある
  • 「酸素供給」を「酸素配給」と読み上げている音声がある
  • プロ野球球団の大洋ホエールズ」を「プロ野球球団・大洋ホエールズ」と読み上げている音声がある
  • 「漁獲」を「りょかく」と読み上げている音声がある
  • バファローズ」を「バッファローズ」と読み上げている音声がある
  • ヴュルテンベルク」を「ヴェルテンベルク」と読み上げている音声がある
  • 「謙吉」を「けんいち」と読み上げている音声がある
  • 「プルヴァマ」を「パルヴァマ」と読み上げている音声がある

なぜこの文章を書いたか

声優統計コーパスは名称や内容のキャッチーさから (ある程度権利が自由な) バランス文および音声データとして音声研究に詳しくない人にも認知が広がっています.この現状は公開当時想定していなかったことであり,非常に嬉しく思います.

しかしその結果,より適切に品質が管理された JSUT/JVS コーパスに人々が到達しにくくなっていると考えます.特に,音声コーパスを自ら収録する人が増えている現状においては,適切なコーパスへの誘導が重要だと考えました.

最後に,本文章における声優統計コーパスと JSUT/JVS コーパスの関係,および JVS コーパスの利用推奨は JSUT/JVS コーパスの作者である高道慎之介 助教に事前に確認を取り,合意を得ています.

補足