二值化每个特征,微软用1350亿参数稀疏神经网络改进搜索结果( 三 )


查询与文档的N-gram对特征
N-gram对特征是基于Bing搜索日志中查询和文档域的N-gram组合生成的 。 如下图2所示 , 来自查询文本的N-gram将与来自文档URL、标题和正文文本的N-gram结合形成N-gram对特征 。 更长的N-gram(N值更大)能够捕捉更丰富和更细微的概念 。 然而 , 随着N的增加 , 处理它们的成本呈指数级增长 。 在该研究的生产模型中 , N设置为1和2(分别为unigrams和bigrams) 。
分桶数值特征的one-hot编码
数值特征首先通过分桶操作 , 然后应用one-hot编码将其二值化 。 在图2所示的示例中 , 数值特征「QueryLength」可以采用1到MaxQueryLength之间的任何整数值 。 研究者为此特征定义了MaxQueryLength存储桶 , 以便查询「MicrosoftWindows」查询具有等于1的二值化特征QueryLength_2 。
分类特征的one-hot编码
分类特征可以通过one-hot编码以一种直接的方式转换为二值化特征 。 例如 , UrlString是一个分类特征 , 每个唯一的URL字符串文本都可以作为一个不同的类别 。
二值化每个特征,微软用1350亿参数稀疏神经网络改进搜索结果
文章图片
图2:MEB特征示例 。 左侧展示了一个查询文档对 , 其中查询文本、文档标题、URL和片段作为特征提取的输入 。 右侧展示了MEB产生的一些典型特征 。
用持续训练支撑万亿查询/文档对(每日刷新)
二值化每个特征,微软用1350亿参数稀疏神经网络改进搜索结果】为了实现具有如此巨大特征空间的训练 , 该研究利用由MicrosoftAdvertising团队构建的内部大型训练平台Woodblock , 它是一种用于训练大型稀疏模型的分布式、大规模、高性能的解决方案 。 Woodblock建立在TensorFlow之上 , 填补了通用深度学习框架与数十亿稀疏特征的行业需求之间的空白 。 通过对I/O和数据处理的深度优化 , Woodblock可以使用CPU和GPU集群在数小时内训练数千亿个特征 。
但即使使用Woodblockpipeline , 用包含近一万亿个查询/文档对的三年Bing搜索日志训练MEB也很难一次性完成 。 因此该研究使用了一种持续训练的方法 , 先前已在已有数据上训练的模型 , 会在每个月的新数据上进行持续训练 。
更重要的是 , 即使在Bing中实现以后 , 模型也会通过使用最新的每日点击数据持续训练而每天刷新 , 如图3所示 。 为了避免过时特征的负面影响 , 自动过期策略会检查每个特征的时间戳 , 并删除过去500天内未出现的特征 。 经过不断的训练 , 更新模型的日常部署完全自动化 。
二值化每个特征,微软用1350亿参数稀疏神经网络改进搜索结果
文章图片
图3:MEB每天的刷新流程 。 生产型MEB模型每天都使用最新的单日Bing搜索日志数据进行持续训练 。 在部署新模型并在线提供服务之前 , 会从模型中删除过去500天内未出现的陈旧特征 。 这可以保持特征的新鲜度并确保有效利用模型容量 。
合作应用
使用BingObjectStore平台为超大模型提供服务
MEB稀疏神经网络模型的内存占用约为720GB 。 在流量高峰期 , 系统需要维持每秒3500万次特征查找 , 因此无法在一台机器上为MEB提供服务 。 研究者利用Bing的ObjectStore服务来支撑MEB模型 。
ObjectStore是一种多租户(multi-tenant)的分布式键值存储系统 , 能够存储数据和计算托管 。 MEB的特征嵌入层在ObjectStore中实现为表的查找操作 , 每个二值化特征哈希被用作键 , 来检索训练时产生的嵌入 。 池化层和密集层部分的计算量更大 , 并且在承载用户定义函数的ObjectStoreCoproc(一个near-data计算单元)中执行 。 MEB将计算和数据服务分离到不同的分片中 。 每个计算分片占用一部分用于神经网络处理的生产流量 , 每个数据分片托管一部分模型数据 , 如下图4所示 。