专栏名称: Android_开发者
目录
相关文章推荐
51好读  ›  专栏  ›  Android_开发者

Android Smart Linkify 支持机器学习

Android_开发者  · 掘金  · android  · 2018-08-22 03:38

正文

阅读 35

Android Smart Linkify 支持机器学习

文 / Lukas Zilka,软件工程师,谷歌人工智能,苏黎世

上半周,我们发布了 Android 9 Pie,这是 Android 的最新版本,它的机器学习应用使您的手机更简单易用。 Android 9 中有一项功能是 Smart Linkify,这是一种新的 API,可在文本中检测到某些类型的实体时添加可点击链接。 这个功能很有用,例如,当您从朋友的消息传递 app 中收到一个地址,想要在地图上查找时,如果使用 Smart Linkify-annotated 文本,它就变得容易多了!

Smart Linkify 是现有 Android Linkify API 的最新版本。 它采用小型前馈神经网络(每种语言 500kB),低延迟(谷歌 Pixel 手机上不到 20 毫秒)和小推理代码(250kB),并采用与智能文本选择相同的机器学习技术(作为 Android Oreo 的一部分发布),现在也能创建链接。

在 Android 中,Smart Linkify 作为开源文本分类 API 推出(作为生成链接的方法)。 使用 TensorFlow 训练模型并将其导出到由 TensorFlow Lite 和 FlatBuffers 支持的自定义推理库。 这些模型的 C ++ 推理库在此处作为 Android 开源框架的一部分提供,并在每个文本选择和 Smart Linkify API calls 上运行。

寻找对象

在文本中查找电话号码和邮寄地址是一个难题。 不仅是因为人们五花八门的编写方式,而且各类对象的呈现方式通常也很模糊(例如:“确认号码:857-555-3556” 不是电话号码,即便它呈现了与电话号码类似的形格式)。

为了寻求解决方案,我们设计了一种推理算法,其核心是两个小的前馈神经网络。 该算法足以执行除地址和电话号码外的各种实体对象的程序分块。

总的来说,该系统架构如下:给定的输入文本首先被分成单词(基于空格分离),然后生成所有可能的限定最大长度的单词子序列(在我们的示例中为 15 个单词),并且对于每个候选单词,打分神经网络根据它是否代表有效对象来分配一个值(介于 0 和 1 之间):

对于给定的文本字符串,第一个网络为非实体对象分配低分,为正确选择了整个电话号码的候选单词分配高分
接下来,将重叠的生成对象删除,促成较高得分者与较低得分者来一决高下。 现在,我们有一组对象,但仍然不知道它们的类型到底是什么。所以现在第二神经网络将对象的类型分类,要么是电话号码,地址,要么在某些情况下将之分类成非实体对象。







请到「今天看啥」查看全文