実用的差分プライバシーW/Apacheビーム
9333 ワード
ユーザーのプライバシーを保護する最も永続的なテクニックの一つは、差動プライバシーを介してです.Aでは、我々はHackerNewsコメントからNGramを抽出して、数えたApacheビームパイプラインを構築する方法を調査しました.今日、私たちは、同じパイプラインを取って、いくつかの差動プライバシー良さでそれをアップグレードしますPrivacy-on-Beam グーグルからdifferential privacy library .
逆直観的に、ビームパイプラインに異なるプライバシーを加えることは、各々のユーザーのためにIDを持つ必要があります.ユーザーが誰であるかを知る必要はなく、データセットの安定した識別子へのアクセスが必要です.良い開始の選択肢は、autoincrementingユーザー名のフィールドまたはユーザー名/メールアドレスが含まれます.あなたが選ぶIDは、あなたが保護しようとしているプライバシーに、できるだけ密接にマップしなければなりません.
💁ヒント:安全側でerrにするには、このIDをハッシュしたり、暗号化したりして、誤ってログインしたりデバッグしたりするのを防いでください.
我々がHackernewsコメントを使っているので
差動プライバシー土地では、Epsilonとデルタは、どんな特定のユーザーについてどれくらい学ぶことができるかについて制御する主な方法です.より大きい数=より少ないプライバシー.パイプラインについては,epsilon=4,delta=0 . 0001のサンプル値を選ぶ.
アパッチビームパイプライン
ステップ2および
以前のパイプラインでは、NGramを数えるのは
最初に、我々はNGramにデータを単純化する必要があります
呼び出すとき どのように多くのパーティション(別名Nグラム)ユーザーが貢献することができます. どのように多くの倍のユーザーが1つのパーティションに貢献することができます(同じNGramを使用します). それを簡単に保つために、ユーザーが最高700の異なるNGRAMに貢献して、各々のNGramに2回貢献することができると言いましょう.実際には、これはユーザーAが5コメントを“素晴らしいアイデア”と言う場合、それらの2つだけカウントされることを意味します.ユーザーBが701のユニークなNGRAMに貢献するのに十分なコメントを書くならば、彼らの1はランダムに落とされます.これらのパラメータは、出力中のノイズ量を減らすデータから外れ値を除去するのに役立ちます.
それで、あなたのアップグレードは完了です!The
あなたはend-to-end code on Github , とdiff すべての変更を示す
⚠️警告:私の経験を差動プライベートパイプラインを実行する一般的に長くかかり、より多くの計算リソースが必要です.より長い実行時間を期待してください.
ステップ1 :ユーザーを識別する
逆直観的に、ビームパイプラインに異なるプライバシーを加えることは、各々のユーザーのためにIDを持つ必要があります.ユーザーが誰であるかを知る必要はなく、データセットの安定した識別子へのアクセスが必要です.良い開始の選択肢は、autoincrementingユーザー名のフィールドまたはユーザー名/メールアドレスが含まれます.あなたが選ぶIDは、あなたが保護しようとしているプライバシーに、できるだけ密接にマップしなければなりません.
💁ヒント:安全側でerrにするには、このIDをハッシュしたり、暗号化したりして、誤ってログインしたりデバッグしたりするのを防いでください.
我々がHackernewsコメントを使っているので
author
フィールドはかなり良い選択です.私たちは、各コメントの作者をつかむためにいくつかの変更から始めます、そして、Ngram抽出を通してそのユーザーを伝播させてください.// CommentRow models 1 row of HackerNews comments.
type CommentRow struct {
Author string `bigquery:"author"`
Text string `bigquery:"text"`
}
// AuthorNgram represents an ngram and it's author.
type AuthorNgram struct {
Author string
Ngram string
}
const query = `SELECT author, text
FROM ` + "`bigquery-public-data.hacker_news.comments`" + `
WHERE time_ts BETWEEN '2013-01-01' AND '2014-01-01'
AND author IS NOT NULL AND text IS NOT NULL
LIMIT 1000
`
func main() {
// ...
authorNgrams := beam.ParDo(s, func(row CommentRow, emit func(AuthorNgram)) {
for _, gram := range ngram(row.Text, 1, 2, 3) {
emit(AuthorNgram{Author: row.Author, Ngram: gram})
}
}, rows)
// ...
}
ステップ2:セットアッププライバシー予算
差動プライバシー土地では、Epsilonとデルタは、どんな特定のユーザーについてどれくらい学ぶことができるかについて制御する主な方法です.より大きい数=より少ないプライバシー.パイプラインについては,epsilon=4,delta=0 . 0001のサンプル値を選ぶ.
Why 4 and 10-4? I don't know. Apple uses an ε=4 according to it's Differential Privacy Overview. I'd like to write a post on how to pick these numbers once I learn more.
// Configure differential privacy parameters.
epsilon := float64(4) // ε = 4
delta := math.Pow10(-4) // Δ = 1e-4.
spec := pbeam.NewPrivacySpec(epsilon, delta)
ステップ3 :プライベートデータを作成する
アパッチビームパイプライン
PCollection
データの主コンテナとして.ビーム上のプライバシーは新しいコンテナを導入するPrivatePCollection
, は、PCollection
しかし、方法に沿ってプライバシーを保護する方法を知っている.ステップ2および
PCollection<AuthorNgrams>
ステップ1から、我々はPrivatePCollection
このフィールドにユーザーのIDを持っているかどうかを知ることができますAuthor
フィールドオブザAuthorNgram
構造体Structフィールドの文字列名を渡すと少し奇妙な感じがします.pgrams := pbeam.MakePrivateFromStruct(s, authorNgrams, spec, "Author")
ステップ4 :統計を行う
以前のパイプラインでは、NGramを数えるのは
stats.Count(s, ngrams)
. 今私たちはPrivatePCollection
仕事が少しあります.最初に、我々はNGramにデータを単純化する必要があります
PrivatePCollection<AuthorNgram>
にPrivatePCollection<string>
. 舞台裏では、PrivatePコレクションは、著者を追跡します.電話をかける必要があるParDo
通常のビームではなく、この変換のためのビームパッケージ上のプライバシーからの機能.これは同じ動作します.ngrams := pbeam.ParDo(s, func(row AuthorNgram, emit func(string)) {
emit(row.Ngram)
}, pgrams)
NGramの私たちの個人的なコレクションで、我々は現在彼らを数える準備ができています.ビーム上のプライバシーは、すべての本当の魔法が発生する独自のstat関数を実装します.呼び出すとき
pbeam.Count
また、カウント動作を制御する2つのプライバシーパラメータを選択する必要があります.counts := pbeam.Count(s, ngrams, pbeam.CountParams{
MaxPartitionsContributed: 700,
MaxValue: 2,
})
フィン
それで、あなたのアップグレードは完了です!The
counts
古いパイプラインの非常に近くに使用できますPCollection<string, int64>
あなたがテキストファイルに書くことができます、bigqueryにアップロードする、さらに操作してください、しかし、最初のパイプラインとは異なり、NGramはここで異なっています.誰が彼らに貢献したハッカーニュースコメントを書いたかを決して知りません.あなたはend-to-end code on Github , とdiff すべての変更を示す

⚠️警告:私の経験を差動プライベートパイプラインを実行する一般的に長くかかり、より多くの計算リソースが必要です.より長い実行時間を期待してください.
Reference
この問題について(実用的差分プライバシーW/Apacheビーム), 我々は、より多くの情報をここで見つけました https://dev.to/bamnet/practical-differential-privacy-w-apache-beam-4bkiテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol