写点什么

来自锤子开源项目:Big Bang 大爆炸智能化地“炸开”文字块

  • 2017-01-21
  • 本文字数:3729 字

    阅读完需:约 12 分钟

编者按

本次要探讨的 Big Bang,不是天文学家头脑中的宇宙理论,也不是众人追过的情景喜剧,更不是迷妹严重的歌舞男团。这篇文章的主角,是锤子科技刚刚开源的文字处理技术 Big Bang——在没有任何硬件依赖下,完全在软件层面,实现对文字段的智能语义化分词处理。Big Bang 已于 2017 年 1 月 12 日正式开源,那么 Big Bang 是什么?背后的技术是怎样的?为何将其开源?为此 InfoQ 采访了锤子科技软件研发副总裁邹伟先生,以下是他的介绍。

Big Bang 的简单介绍

人们的的联网习惯从电脑端转移到手机,总体而言的确便利很多,网络触手可及;但是文字处理一直很“憋屈”。罗老师(锤子科技 CEO 罗永浩)说:“九年了,没人管这个事儿。” 在既没有大键盘又没有鼠标针的情况下,手持设备的文字输入效率很低;超级常用的复制粘贴操作,没有 Ctrl+C 和 Ctrl+V 可用,只能用“胡萝卜”似的手指对着一群细小的文字不断触碰。

Big Bang 因此应运而生,它可以实现对文字信息便捷化处理:复制、编辑和分享;具体而言,通过“炸”的形式,将一段文字 (文字气泡或便签版图片)拆分成独立、可组合再使用的词。

Big Bang 支持对中英两种语言的“炸”式处理,尤其是中文,会根据智能语义拆分成词组。使用者可以选定某个或某些进行搜索查询、复制和分享操作。比如,将微信聊天记录中的聚会地址,“炸”开只选取地址词语,直接发给高德地图软件。

Big Bang 的技术概览

Big Bang 以悬浮于当前应用窗口的形式,展示选定文字或便签图的“炸”开结果,所有工作都是软件层面实现。Big Bang 是贯通锤子科技、三角兽、扫描全能王三家公司的技术,通力合作的结果。其中三角兽负责进行分词的算法与优化,扫描全能王负责图片的识别解析。锤子做了两件事:一个是打通界面与文字的区隔,尽可能用技术手段直接提取出文字,为此全系统做了很多工作配合文字提取,包括浏览器从内核层面上给予了支持,允许大爆炸从网页中提取文字;二是从系统层面上,整合这些技术,再根据用户的实际使用体验,交互与需求,进行不停的打磨与优化。

因为是深度定制 Smartisan OS,所以能从框架层做出应用层无法实现的功能。比如炸开任意位置的文本, 只要一个应用使用了文本,这个应用不需要做任何事情,Big Bang 就能炸开文字段。

分词技术我们采用了三角兽的方案,虽然这个公司成立时间不久,但是技术实力毋庸置疑。

三角兽目前提供的技术分为两种,一种是离线,一种是在线,开源的代码上面是使用的在线的分词库。离线库的指标:内存 70-80M,100 字的分词时间在 20-30ms。在线库的指标:内存在 5M 以内,100 字的时间在 120ms 左右(网络状态好的情况下)。

考虑到解析效率与内存的问题,Big Bang 现在对文字的长度限制是 1000 个字。三角兽目前的能力最大上限是 8192 字节, 采用的 UTF-8 编码,大部分汉字是三个字节的长度。因为这个长度越大分词的时间就需要越长。我们在综合考虑了分词的体验与实际的使用情况后, 限制了最大的长度是 1000 个字。对于自然语言的理解,三角兽有一个机器学习的平台,可以进行不断的训练,不断提高。同时还有一个人为干涉修正的因子,这样就尽可能的保证断句的准确性。

除了单一语言的中文或英文字段,Big Bang 同样胜任中英文混排的语句的分词,还可以通过专业语库拆分一些难以理解的句子,比如在锤子 M1 发布会上,罗老师就运用 Big Bang 功能将一段文字“碳碳键键能能否否定定律一”,炸成了“碳碳键 / 键能 / 能否 / 否定 / 定律一”。针对有些文字语句的划分和理解有两种以上合理解释,也就是说连正常人都分不清的断句,非得交给机器来按照你想要的效果来处理,恐怕也是不合适的。

Big Bang 还可以实现将图片转成文字,当用户大面积按压一张图片时,系统会对屏幕上的显示内容进行截屏,进行适当的处理后(例如相册中,会裁掉上方和下方的工具条),交给扫描全能王进行文字识别。识别结果返回后,文字再交给三角兽智能分词引擎进行分词,最终呈现给用户。

纯色背景下的长微博几乎能全部识别,包括标点符号。标准打印字体,清晰的图书扫描的识别率也非常不错。图片转文字的正确率 97%。不过,对于海报、漫画识别率会有不同程度的下降。目前尚不支持手写字体。

研发故事

十年前,iPhone 的诞生让触摸屏全面取代手写笔和实体键盘,进行了人机交互的全面革新,但触摸屏无法精准定位的特性,让移动设备上的文字处理效率相比传统的键盘加鼠标而言,非常低下。

十年间,我们见证了微信、微博等互联网应用的诞生,但是移动设备上糟糕的文字处理体验却几乎没有任何提升。Big Bang 正是从这里切入,解决了手机屏幕上难于处理文字信息的弊端。

单纯提取应用内的文本,已经有友商做过类似的功能。如何方便地提取以及提取后如何方便地选取,才是大爆炸需要解决的核心问题。通过大拇指按压从而让文字“炸”出来,罗老师已经有提到过,灵感来源于他生活中的一件每个人都做过的,寻常的不能再寻常的小事 —— 蹲马桶。

提取的问题解决了,还需要解决选取的问题。最简单的做法是将每个字都做成一个按钮,用户选几个是几个。考虑到大多数情况用户需要选择的不是“字”,而是“词”,锤子科技与三角兽合作,通过其提供的智能语义分析能力对提取出的文本进行智能分词,这样炸出的结果大多数情况下用户只需要一次点击即可选中所需要的词。

产品需求的确定也是一个递进的过程。在开发过程中,也尝试过不同的方案,最终在使用的便利程度、界面的美观程度以及工程实现的复杂程度上选取了一个平衡点,才有了现在的大爆炸。

开源之举

与 Big Bang(大爆炸)同时对外亮相的功能还有 One Step(一步)。One Step 简化跨应用之间的操作步骤,简化了文字图片等信息的复用再分享。在 12 月 20 日正式开源后,一周左右就冲到 github 周排行榜第二名,截至目前已收获 1400 多个好评(Star )。

锤子科技的这两个开源项目在 GitHub 上的地址是 https://github.com/SmartisanTech/android

这两个开源项目的目标群体是谁呢?针对 One Step,开源分成两部分,一部分是提供给手机厂商、ROM 开发者,希望可以集成这些功能,一起改善用户的使用行为和习惯,让整个系统更加便利;一部分是提供给第三方软件的开发者们,锤子科技同时开源了 API,希望第三方开发者可以直接集成而适应所有已经支持 One Step 的厂商。锤子科技也很欢迎第三方的开发者们提交修改建议,比如魔趣 ROM 的开发者就发现了一个 One Step 的 bug,并且帮助进行了修复。而此次 Big Bang 开源,则只针对手机厂商、ROM 开发者。

为什么要开源?罗老师对此曾有过表述,“有人说‘软件抄袭是没有技术门槛的,而且在中国,一般说来,被抄袭的去打官司也打不赢,老罗这小子很聪明,知道别人反正都会抄,就索性做成了开源,弄得大家抄也不是,不抄也不是,最后大家拿去用了,还会念你的好。’其实没这么复杂,这件事真正的原因是,锤子科技希望通过开源,使更多其他厂商也都做这两个功能,最终带动大多数安卓系统的第三方应用开发商都支持这些特性。否则我们作为一个小厂商,很难推动这件事。我们后续还有很多类似的功能设计,大部分要依赖这样的开源方式来推广普及。”

目前开源的仅为 Big Bang 的 1.0 版本,在之后的版本中,One Step 和 Big Bang 还有几十项的改进,并且在新版发布后也会开源的新版本代码。总有一天,在手机上要实现比电脑端还高的文字处理效率。

谈谈 Smartisan OS

Smartisan OS 的创新很多,我们认为主要分为生态创新,功能创新,交互创新:生态创新典型案例是一步和大爆炸;功能创新指单手下拉悬停,定时静音等;交互创新指音乐打碟功能等。

伴随着这些创新难度的不同,它们从构思到诞生所经过的不同阶段的时间比重截然不同。像一步和大爆炸,实际上产品团队从有构思到形成交互经历了漫长的阶段(半年以上),而开发到发布则只有 5 个月时间;而大部分的需求,它的研发周期是要长于产品构思周期的。从大的方面来讲,这些创意会经历构思、需求交互、设计、研发、测试和产品验收阶段。根据难度和工作量的不同,部分需求会在交互到验收阶段折腾几轮,才能达到理想效果,触动用户心灵。

锤子科技在创新需求上很多时候是设计驱动的。一些技术实现需要在兼顾系统框架稳定的前提下做出大的突破才能实现,这比在遵循框架能力的前提下去完成创新要付出的更高昂的代价,而这直接的体现就是我们一些主要的研发负责人要么身材更加丰满,要么发际线后移直至消失。因为我们清醒的知道锤子科技的核心竞争力是什么,所以虽然免不了与产品团队相爱相杀,但(极端)创新需求的开工和完成度仍然非常高,基本上是超过 90% 的。

在创新需求的整个技术评估阶段,研发团队的出发点是两个:技术可行性和开发周期,只要可以按时交付,那需求就可以开工。从 12 年成立后到 16 年 10 月份的时间段里,研发团队是在需求的路上飙到了 180 迈。当然随着系统的日渐完善和产品思路的逐渐转变,我们会将更多的精力放在一些系统优化和手机使用效率提升相关的特性上去,后面会在一些效费比低的创新上保持克制,行四两拨千金之道。

采访对象

邹伟,锤子科技的软件研发副总裁,负责软件团队的相关工作。2003 年北邮毕业后,十余年一直从事手机的研发工作,是中国最早的从事 Android 研发的一批人,在整机软件研发,framework、通信、应用开发等领域有着丰富的经验。

2017-01-21 18:004432
用户头像

发布了 58 篇内容, 共 44.1 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

RocksDB在大规模分布式系统应用中的经验

CnosDB

时序数据库 开源社区 CnosDB 工程师有话说 CnosDB Tech Talk

ABAP工作进程对数据库表读取操作的检测

汪子熙

数据库 SAP abap Netweaver 8月月更

Kubernetes 云原生日志构建

CTO技术共享

开源 签约计划第三季 8月月更

【精通内核】深入理解汇编语言

小明Java问道之路

指令集 寄存器 汇编语言 8月月更 机器语言

自媒体代运营为何被诟病,代运营的水有多深

石头IT视角

把充电宝拆了看看

Sher10ck

拆解 充电宝

开源一夏 | Node.js实战对于Buffer和Stream模块系统的深入剖析

恒山其若陋兮

开源 8月月更

【Django | 开发】面试招聘信息网站(快速搭建核心需求)

计算机魔术师

8月月更

文件管理-Linux系统压缩打包

Albert Edison

Linux centos 文件管理 tar命令 8月月更

新书上市 | 连载 5 年,千万读者追更,这本书讲透了通信背后的故事!

图灵教育

[极致用户体验] 网页里的「返回」应该用 history.back 还是 push ?

HullQin

CSS JavaScript html 前端 8月月更

【精通内核】汇编下的C语言

小明Java问道之路

指针 C语言 结构体 汇编语言 8月月更

【React源码系列】React Context原理,为什么我建议尽可能少的使用React Redux管理状态 审核中

爱切图的木子老师

react源码 react context react redux

打破底层技术瓶颈,RTC技术或成为物联网市场的强劲引擎

擎声科技

物联网 RTC sdk 实时音视频 擎声Qtt

5 分钟温故知新 RxJS 【转换操作符】

掘金安东尼

前端 函数式编程 8月月更

leetcode 303. Range Sum Query - Immutable 区域和检索 - 数组不可变(简单)

okokabcd

LeetCode 算法与数据结构

Kubernetes Kruise Rollout

CTO技术共享

开源 签约计划第三季 8月月更

深度学习公式推导(3):初探神经网络

老崔说架构

HPC、AI与云计算:当智能时代三叉戟在亚马逊云科技完美融合

脑极体

每日一R「09」类型系统(三)

Samson

8月月更 ​Rust

Kubernetes 重大更改和删除

CTO技术共享

开源 签约计划第三季 8月月更

百炼成钢 —— 声网实时网络的自动运维丨Dev for Dev 专栏

声网

Dev for Dev 自动运维

关于 SAP ABAP 字符变量和字符串变量字符个数的一个知识点

汪子熙

字符串 SAP abap Netweaver 8月月更

RocketMQ高可用设计之故障规避机制

急需上岸的小谢

8月月更

我眼中的无影云桌面‖云桌面使用者角度

乌龟哥哥

8月月更

头脑风暴:最长递增子序列

HelloWorld杰少

算法 LeetCode 数据结构, 8月月更

IPv6邻居发现协议详解

穿过生命散发芬芳

NDP 8月月更

微服务的拆分与设计原则

阿泽🧸

微服务 8月月更

C语言基本的窗口开发

计算机魔术师

8月月更

【源码解析】MyBatis结果集映射和参数绑定

小明Java问道之路

源码解析 mybatis源码 mybaits 深度 8月月更

C++继承中的多继承语法与菱形继承

CtrlX

c c++ 面向对象 继承 8月月更

来自锤子开源项目:Big Bang大爆炸智能化地“炸开”文字块_语言 & 开发_木环_InfoQ精选文章