正文
接下来,作者整合了梁老师的建议以及Google官方技术团队的博客,具体分析Android Wear 2.0离线AI技术的实践思路。
Google wear 2.0 智能回复
学习与投射
建立轻量级会话模型的一个简单的策略是,在设备上创建的内容是常见的、且有规则的小字典(比如输入→回复映射),并且在推理时使用一种较为朴素的查询策略。这里牵涉到使用几个特征的一小组类预测任务,(比如二元情感分类,“我爱这部电影”传递了一种积极的情感,而“演得很糟糕”这句话传递了消极的情感)。但是,它缺乏良好的扩展性,无法支持聊天消息中常见的丰富词汇和众多复杂的语言变化。另一方面,递归神经网络(比如LTSM)等机器学习模型是功能极其强大的工具,适用于自然语言理解任务中的复杂序列学习,包括“智能回复”。然而,压缩这类丰富的模型用来适应很小的内存设备,并通过降低计算成本获得可靠的预测(迅速按照需要处理),那非常有挑战性。Android Wear 2.0团队早期尝试通过限制模型、只预测一小批回复,或者使用量化(quantization)或字符级模型(character-level model)等技术,但是都未能获得很好的结果。
最后,通过为设备端机器学习系统构建一套不同的解决方案。思路是,先使用一种快速、高效的机制,将相似的消息分成一组,并将它们投射到相似(“邻近”)的位向量表示。虽然有几个方法可以执行这个投射步骤,比如使用单词嵌入或者编码器网络,但最后Android Wear 2.0采用了一种经过改动的局部敏感哈希算法(LSH), 将维度从数百万个独特的单词简化为短小的、固定长度的位序列。这样能够非常快地为消息即时计算投射,并且在设备上占用的内存空间更小,因为不需要存储消息、单词嵌入或者甚至是用来训练的整个模型。
投射步骤:
相似的消息分到一组,被投射到邻近向量。比如说,“hey, how's it going?”和“How's it going buddy?”这两条信息有着相似的内容,可能被投射到同一个11100011。另一个相关的信息“Howdy, everything going well?”被映射到只相差2位的邻近向量11100110。
接下来,系统通过消息及其投射后,共同训练成“消息投射模型”,该模型学会使用半监督式图形学习框架,预测可能合适的回复。图形学习框架想要训练成一个可靠的模型,其办法是结合来自多个来源的语义关系(消息/回复交互、单词/短语相似性、语义聚类信息),并且学习有用的投射操作,这些投射操作可以映射到出色的回复预测。
学习步骤:
(上面)消息连同投射和相应回复一起用于机器学习框架,共同学习一个“消息投射模型”。(下面)消息投射模型学会将回复与相应的消息投射关联起来。比如说,该模型将两个不同的消息:“Howdy, everything going well?”和“How’s it going buddy?”(底部中间)投射到邻近位向量,并学习将其映射到相关回复(底部右边)。
上述值得一提的是,虽然可以使用复杂机器学习和云计算的能力,训练消息投射模型,但是模型本身驻留在设备上,而且完全在设备上执行并推理。设备上运行的应用程序可以传递用户的消息,并从设备端模型接收回复预测,而数据不用离开设备。而且还可以改动该模型,以适应用户的书写风格和个人偏好,从而提升个性化的体验。