🚀 Hide-and-Seek プライバシー保護モデル
Hide-and-Seekは、テンセントセキュリティ玄武研究所によって開発されたプライバシー保護モデルです。このモデルのプライバシー保護プロセスは、hideとseekの2つのサブタスクで構成されています。hideはユーザー入力の敏感なエンティティを他のランダムなエンティティに置き換え(プライバシー情報の匿名化)、seekは出力で置き換えられた部分を元のテキストに戻します(情報の復元)。このリポジトリは、私たちのコミュニティオープンソースの中国語版モデルで、bloom - 1.1bをベースモデルとし、語彙表のトリミングと微調整を行って得られまし。詳細については、技術ブログを参照してください。
私たちはこのモデルをスマートフォンとノートパソコンに成功裏にデプロイし、テストを行いました。NF4量子化後、CPUのみを使用した場合、MacBook M2ノートパソコンの推論速度は180 - 200 tokens/s、MacBook M1ノートパソコンは110 - 130 tokens/s、Pixel 8 Proスマートフォンは20 - 30 tokens/sです。現在、ネイティブでサポートされているNLPタスクには、文章の改善、要約、翻訳、読解、テキスト分類があり、Zero Shotでのカスタム拡張タスクもサポートしています。
以下は、私たちのモデルのデモビデオです:
- MacBook M2デモビデオ:
- Pixel 8 Proデモビデオ:
Github Repo / arXiv Preprint / 技術ブログ
🚀 クイックスタート
マシンラーニング環境の設定は複雑で時間がかかるため、colab notebookを提供しています。必要な依存関係を以下に示します。独自の環境で実行する場合は、デバイスに合わせて調整する必要がある場合があります。
pip install torch==2.1.0+cu118
pip install transformers==4.35.0
💻 使用例
基本的な使用法
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("SecurityXuanwuLab/HaS-820m")
model = AutoModelForCausalLM.from_pretrained("SecurityXuanwuLab/HaS-820m").to('cuda:0')
hide_template = """<s>Paraphrase the text:%s\n\n"""
original_input = "张伟用苹果(iPhone 13)换了一箱好吃的苹果。"
input_text = hide_template % original_input
inputs = tokenizer(input_text, return_tensors='pt').to('cuda:0')
pred = model.generate(**inputs, max_length=100)
pred = pred.cpu()[0][len(inputs['input_ids'][0]):]
hide_input = tokenizer.decode(pred, skip_special_tokens=True)
print(hide_input)
高度な使用法
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("SecurityXuanwuLab/HaS-820m")
model = AutoModelForCausalLM.from_pretrained("SecurityXuanwuLab/HaS-820m").to('cuda:0')
seek_template = "Convert the text:\n%s\n\n%s\n\nConvert the text:\n%s\n\n"
hide_input = "前天,'2022北京海淀·颐和园经贸合作洽谈会成功举行,各大媒体竞相报道了活动盛况,小李第一时间将昨天媒体报道情况进行了整理。人民日报 中国青年网 国际联合报 北京商报 消费者观察报 上海晚报 杭州日报 海峡晚报 北京日报 北京市电视一台?北京新闻 人民网 手机雅虎网 网易北京 长三角经济网 新京网 中国农业新闻网 北京圆桌 居然有这么多!还有部分媒体将在未来一周陆续发稿,为经洽会点!为海淀点!阅读投诉阅读精选留言加载中以上留言由公众号筛选后显示了解留言功能详情"
hide_output = "2022北京海淀·颐和园经贸合作洽谈会成功举办,各大媒体广泛报道"
original_input = "昨天,’2016苏州吴中·太湖经贸合作洽谈会成功举行,各大媒体竞相报道了活动盛况,小吴第一时间将今天媒体报道情况进行了整理。新华社 中国青年报?中青在线 香港大公报?大公网 香港商报 消费者导报 扬子晚报 江南时报 苏州日报 姑苏晚报 城市商报 苏州广电一套?苏州新闻 新华网 手机凤凰网 网易苏州 长三角城市网 新苏网 中国商务新闻网 苏州圆桌 居然有这么多!还有部分媒体将在今后几天陆续发稿,为经洽会点!为吴中点!阅读投诉阅读精选留言加载中以上留言由公众号筛选后显示了解留言功能详情"
input_text = seek_template % (hide_input, hide_output, original_input)
inputs = tokenizer(input_text, return_tensors='pt').to('cuda:0')
pred = model.generate(**inputs, max_length=512)
pred = pred.cpu()[0][len(inputs['input_ids'][0]):]
original_output = tokenizer.decode(pred, skip_special_tokens=True)
print(original_output)
from hideAndSeek import *
tokenizer = AutoTokenizer.from_pretrained("SecurityXuanwuLab/HaS-820m")
model = AutoModelForCausalLM.from_pretrained("SecurityXuanwuLab/HaS-820m").to('cuda:0')
original_input = "华纳兄弟影业(Warner Bro)著名的作品有《蝙蝠侠》系列、《超人》系列、《黑客帝国》系列和《指环王》系列。目前华纳未考虑推出《蝙蝠侠》系列新作。"
print('original input:', original_input)
hide_input = hide(original_input, model, tokenizer)
print('hide input:', hide_input)
prompt = "Translate the following text into English.\n %s\n" % hide_input
hide_output = get_gpt_output(prompt)
print('hide output:', hide_output)
original_output = seek(hide_input, hide_output, original_input, model, tokenizer)
print('original output:', original_output)
🔧 技術詳細
私たちはGPT - 3.5をAPIとして使用し、DeepLを翻訳参照として、中国語から英語への翻訳タスクで損失評価を行いました。NF4量子化推論の結果は以下の表の通りです。1行目は保護なしで直接翻訳した結果、2行目は私たちのシステムで保護した後の翻訳結果です。結果から、私たちのモデルはわずかな精度損失でユーザーのプライバシーを保護できることがわかります。私たちは引き続きモデルを改善し、より良い結果を得るために努力しています。
設定 |
ROUGE - 1 |
ROUGE - 2 |
ROUGE - L |
BLEU - 2 |
BLEU - 4 |
METEOR |
保護なし |
60.80 |
33.54 |
54.96 |
79.85 |
67.17 |
53.03 |
HaSで保護 |
57.37 |
31.60 |
51.92 |
72.72 |
61.24 |
48.77 |
📄 ライセンス
@misc{chen2023hide,
title={Hide and Seek (HaS): A Lightweight Framework for Prompt Privacy Protection},
author={Yu Chen and Tingxin Li and Huiming Liu and Yang Yu},
year={2023},
eprint={2309.03057},
archivePrefix={arXiv},
primaryClass={cs.CR}
}