0


Twitter推荐系统的可信和安全模块解析(Trust and Safety Models)

上一篇博文整体看了Twitter推荐的架构:

  • Twitter开源时间线推荐架构整理(Twitter‘s Recommendation Algorithm)

本篇文章解析一下可信和安全模块的具体实施细节。

Trust and Safety Models

信任和安全模型(Trust and Safety Models),简称T&S,主要用于检测推特系统中不可信和不安全等违规内容。

在后续架构中的多路召回模块(包括in-network召回路和out-of-network召回路),该T&S特征都能用于过滤掉不合规的内容,从而让推送给用户的推文在社交圈内外都是“绿色”的。

信任和安全模型可以分为多个维度来评估,但推特团队考虑到竞品压力(the adversarial nature of this area),因此暂时只开源了部分模型,包括NSFW的图文、推文内容的有毒性和滥用性,具体定义如下:

  • pNSFWMedia:用于检测带有 NSFW 图像的推文的模型,包括成人和色情内容。
  • pNSFWText:用于检测带有 NSFW 文本、成人/性主题的推文的模型。
  • pToxicity:检测有毒推文的模型。毒性包括边缘内容,如侮辱和某些类型的骚扰。有毒内容并不违反 Twitter 的服务条款。
  • pAbuse:检测滥用内容的模型。滥用内容包括违反 Twitter 服务条款的行为,包括仇恨言论、有针对性的骚扰和辱骂行为。

接下来分别解析一下NSFW(Media和Text)、Toxicity和Abuse部分的训练代码。

NSFW
其中NSFW(Not Safe/Suitable For Work)是指工作场所不宜的网站超链接,多指裸露、暴力、色情或冒犯等不适宜公众场合的内容。最初这个词在博客上出现,在给出含有上述内容的超链接旁标注NSFW,用于警告观看者;后在论坛、帖子及有超链接之页面上也普遍适用NSFW。

NSFW模块包括Media和Text两部分,由于官方没有开源数据,所以不太清楚数据组织的具体形式。先直接看一下Media和Text的训练代码。

Media用于带有NSFW图像的推文,从模型命名“models/nsfw_Keras_with_CLIP_twitter_hypertuned”可以看出,特征应该是通过CLIP提取的,然后搭建如下的较为简单的MLP结构进行检测。

  1. defbuild_model(hp):
  2. model = Sequential()
  3. optimizer = tf.keras.optimizers.Adam(
  4. learning_rate=0.001,
  5. beta_1=0.9,
  6. beta_2=0.999,
  7. epsilon=1e-08,
  8. amsgrad=False,
  9. name="Adam",)#优化器
  10. activation=hp.Choice("activation",["tanh","gelu"])
  11. kernel_initializer=hp.Choice("kernel_initializer",["he_uniform","glorot_uniform"])for i inrange(hp.Int("num_layers",1,2)):#此处开始搭建模型
  12. model.add(tf.keras.layers.BatchNormalization())
  13. units=hp.Int("units", min_value=128, max_value=256, step=128)if i ==0:#第一层fc的输入是特征(None, 256)
  14. model.add(
  15. Dense(
  16. units=units,
  17. activation=activation,
  18. kernel_initializer=kernel_initializer,
  19. input_shape=(None,256)))else:#后续多层的fc
  20. model.add(
  21. Dense(
  22. units=units,
  23. activation=activation,
  24. kernel_initializer=kernel_initializer,))#最后加入sigmoid使网络维度变成1维,即预测是否有NSFW的概率
  25. model.add(Dense(1, activation='sigmoid', kernel_initializer=kernel_initializer))
  26. model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=metrics)return model

Text类似Media,从模型配置“twitter_bert_base_en_uncased_augmented_mlm”可以看出,文本特征应该是通过BERT提取的,然后也搭建较为简单的2层MLP结构进行检测。

  1. inputs = tf.keras.layers.Input(shape=(), dtype=tf.string, name=tweet_text_feature)
  2. encoder = TextEncoder(
  3. max_seq_lengths=params['max_seq_lengths'],
  4. model_type=params['model_type'],
  5. trainable=params['trainable_text_encoder'],
  6. local_preprocessor_path='demo-preprocessor')
  7. embedding = encoder([inputs])["pooled_output"]#提取文本特征
  8. predictions = tf.keras.layers.Dense(2, activation='softmax')(embedding)#两层fc
  9. model = tf.keras.models.Model(inputs=inputs, outputs=predictions)

但Text会多做一些文本预处理,来去除一些符号和表情,代码如下。

  1. REGEX_PATTERNS =[r'^RT @[A-Za-z0-9_]+: ',r"@[A-Za-z0-9_]+",r'https:\/\/t\.co\/[A-Za-z0-9]{10}',r'@\?\?\?\?\?',]
  2. EMOJI_PATTERN = re.compile("([""\U0001F1E0-\U0001F1FF""\U0001F300-\U0001F5FF""\U0001F600-\U0001F64F""\U0001F680-\U0001F6FF""\U0001F700-\U0001F77F""\U0001F780-\U0001F7FF""\U0001F800-\U0001F8FF""\U0001F900-\U0001F9FF""\U0001FA00-\U0001FA6F""\U0001FA70-\U0001FAFF""\U00002702-\U000027B0""])")defclean_tweet(text):for pattern in REGEX_PATTERNS:
  3. text = re.sub(pattern,'', text)
  4. text = re.sub(EMOJI_PATTERN,r' \1 ', text)
  5. text = re.sub(r'\n',' ', text)return text.strip().lower()

Toxicity
Toxicity主要检测有毒推文,毒性包括边缘内容,如侮辱和某些类型的骚扰,关键词如下。

  1. keywords ={"politics":[...],"insults":[...],"race":[...],}

Toxicity模型主要基于BERT进行训练,有英文或多语种的BERT来支持该模块。

  1. defload_bertweet(**kwargs):
  2. bert = TFAutoModelForSequenceClassification.from_pretrained(
  3. os.path.join(LOCAL_MODEL_DIR,"bertweet-base"),
  4. num_labels=1,
  5. classifier_dropout=0.1,
  6. hidden_size=768,)if"num_classes"in kwargs and kwargs["num_classes"]>2:raise NotImplementedError
  7. return bert,True

一些训练setting设置如下。

  1. RANDOM_SEED =...
  2. TRAIN_EPOCHS =4
  3. MINI_BATCH_SIZE =32
  4. TARGET_POS_PER_EPOCH =5000
  5. PERC_TRAINING_TOX =...
  6. MAX_SEQ_LENGTH =100
  7. WARM_UP_PERC =0.1
  8. OUTER_CV =5
  9. INNER_CV =5
  10. NUM_PREFETCH =5
  11. NUM_WORKERS =10

Abuse
Abuse是检测滥用内容的模型。滥用内容包括违反 Twitter 服务条款的行为,包括仇恨言论、有针对性的骚扰和辱骂行为,具体的label定义如下代码。

  1. labels =["has_non_punitive_action",#没有讨伐行为"has_punitive_action",#有讨伐行为"has_punitive_action_contains_self_harm",#有自残"has_punitive_action_encourage_self_harm",#鼓励自残"has_punitive_action_episodic",#有不定期行为"has_punitive_action_episodic_hateful_conduct",#有不定期憎恨行为"has_punitive_action_other_abuse_policy",#其他滥用条款"has_punitive_action_without_self_harm"#有讨伐但没有自残]

模型上也较为简单,也基于BERT进行检测。

  1. fe = FeatureEncoder(train)
  2. inputs, preprocessing_head = fe.build_model_head(model=ptos_prototype, text_encoder=text_encoder_pooled_output)
  3. cls_dropout = tf.keras.layers.Dropout(params['cls_dropout_rate'], name="cls_dropout")
  4. outputs = cls_dropout(preprocessing_head)
  5. outputs = tf.keras.layers.Dense(8, name="output", dtype="float32")(outputs)
  6. model = tf.keras.Model(
  7. inputs=inputs,
  8. outputs=outputs
  9. )

本文转载自: https://blog.csdn.net/qq_39388410/article/details/130113934
版权归原作者 上杉翔二 所有, 如有侵权,请联系我们删除。

“Twitter推荐系统的可信和安全模块解析(Trust and Safety Models)”的评论:

还没有评论