本文通过调研学术、商业、开源三个领域词云相关的产品,对词云相关算法、产品进行从上至下的总结,帮助读者快速了解词云相关的算法发展,并希望总结出当前字节跳动数据平台词云发展的路线。 全文将分两次推送,第一篇专注分享词云算法的行业情况。第二篇介绍字节跳动数据平台词云实践。

文 |橘子 from 字节跳动数据平台前端团队

DATA

前言

前文我们介绍了当下词云发展的情况,和行业内一些商业\开源的词云项目交互体验。接下来我们将重点分享针对学术算法的调研和商业产品的总结,对字节跳动数据平台词云发展的一些体会和当下的实践。

DATA

发展方向探讨

Geo Word Cloud

目前业界和开源并没有可用的地理词云生成工具,属于空白领域。

可能会遇到的问题:

  1. 是否有价值。地理词云的输入是地理坐标和标签,生成的词云可以展示标签在不同地理位置的大致分布,是否有合适的业务场景和应用价值?可能在 GIS 相关的项目中比较有应用前景,可以方便的将 GIS 系统中的地理和标签数据直接可视化出来。

  2. 算法效率低。计算上需要使用 K-means 、PCA(主成分分析),再加上放置单词时在传统词云算法的基础上需要额外考虑地理信息等,运算复杂度高。原论文(2016年)的 python 实现一张大数据量的图(上图)需要 30min。通过 简化/优化算法 应该能提高速度,但随着数据量的增加,效率依旧较低。

  3. 输入要求高。如果用户输入的地理点和标签密度较小,生成的词云会很稀疏、难看。

Shape Word Cloud

开源领域没有提供一个 有效/好用 的形状词云库实现。

我们可以在 Shape Wordle 算法的基础上,实现一个算法简化版本的形状词云:

  1. 放弃需要大运算量的基于 distance field 的形状感知螺旋线的算法,使用简单的螺旋线算法实现。

  2. 最好能够保留纯前端的图形分割,对每个 独立的图形/切割后的图形 进行独立的螺旋线算法可以极强的提高结果的美观度。

  3. 保留二次填充算法。在核心单词布局完之后,使用二次填充可以提高用户对图形的感知程度。此处可能会算法效率问题,特别是在跨端上会有问题。

但这样的缺点是:

  1. 二次填充算法是良好效果的基础,但一定会有效率问题。或许会导致其很难应用在性能较差的移动端。

  2. 能否找到效率和效果都比较合适的前端图形分割算法库。

词云创作工具

无论开源界还是商业上,都没有一个 方便编辑且美观的形状词云的生成工具。WordArt 和 微词云等工具编辑逻辑只能固定少数单词,非固定词每次算法运行位置都会发生改变,难以进行复杂的便捷操作。同时词云创作工具的应用场景和用户群体非常丰富,可以推动一个开源且好用的词云创建工具。

在上文简化版 Shape Wordle 算法的基础上,引入刚体力学的编辑方式,并以此为基础搭建一个设计工具。可能会遇到的问题:

  1. 纯前端的分词和词性还原。WordArt 分词是纯前端计算,对于英文来说,需要进行词性还原,对于中文来说,需要有效的分词工具。这两者在前端的落地均可能遇到一些问题。

  2. 其他算法上的问题跟 Shape Word Cloud 会遇到的问题一致。

图云方向

对于拼接效果非常完美的图云(如下图所示)一般需要较为复杂的图形学计算。下图为设计师设计的图云(网络素材)

较为前沿的算法生成的图云可以做到几乎完美接近设计师结果的紧凑度,下图为 Pyramid of Arclength Descriptor for Generating Collage of Shapes 论文的运行结果。

但其生成算法的复杂度极高,在使用 GPU 并行加速的前提下,完成上图使用了60min+,显然是对于纯前端库是很难接受的。

故图云的初步方向大概为:

  1. 将图片视作简单的矩形 或 多边形,直接采用螺旋线算法进行拼接。其生成结果一般会有紧凑性的问题,但具有可接受的速度。

  2. 引入力导向布局的概念。首先使用螺旋线算法对图云进行初步布局,然后引入力导向将布局好的图云进一步拉紧,提高紧凑度。

  3. 这两种方式都可以在可接受的速度下提供一个较为初级的图云实现。

DATA

数据平台形状词云实践‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

综合上述调研,我们首先探索了形状词云在 字节跳动数据平台业务中的落地。考虑到前端对性能的限制,需要在算法复杂度和可视化效果之间做取舍和平衡,我们在学术界诸多成果的基础上,设计并实现了符合 字节跳动数据平台业务需求的自研形状词云布局算法

该算法已经在字节跳动数据平台内部产品中实现落地,我们这里以一个实际业务场景举例展示算法的效果。

在抖音电影指数这个业务场景中,会使用词云来展示有关于各个电影的相关评论数据词云,以向用户传递大众对该电影的观点,如下图所示:

上图中使用了一个相对基础的词云,仅能表现评论中的词频信息,并且每个电影的词云大多相似,没有具有电影相关的特色信息。

(下述中图片数据来自于无版权网站,文字数据由代码随机生成,文字位置为算法自动生成)

如果电影是相关人物的传记,那我们可以采用相关人物的剪影来突出电影特色,输入图形:

构建形状词云:

目前构建的形状词云能够在保证词频数据传递的准确性的基础上,自动构建出视觉效果良好的形状词云,可以更好的展现不同词云应用场景的特点。

甚至对于文字轮廓这种非常复杂的形状,我们也能实现一个良好的效果,输入图形:

构建形状词云:

此外,在更复杂、细节更多的形状中也实现了维持良好的视觉效果,输入图形:

构建形状词云:

也可以使用更随机的单词角度来表现摩托车手的“自由感”:

形状词云作为一个基础图表,我们提供了非常丰富的 API 来给字节内部使用者打造非常自由的创作空间。对于不想花时间配置复杂参数的用户,我们也引入了多种自动化算法根据用户的输入数据自动生成合适的配置,最少仅需三个属性(数据、文本对应的 key、形状图片) 即可生成效果良好的形状词云。

同时,有效的自动化算法也可以扩展形状词云的应用场景,例如在上述电影指数场景,用户不需要针对每个电影的数据量和形状对参数进行调节,依靠自动化算法可以生成相对合适的参数,从而减轻了大量使用形状词云的配置负担。

另外在词云动画效果上我们进行了精雕细刻,设计了不同的入场效果,比如位移动画:

渐变(同时改变字体和透明度):

未来,我们将会持续探索形状词云细节算法的优化,以及探索在性能可接受前提下图云相关算法的落地。

相关阅读:

观点|词云指北(上):谈谈词云算法的发展

团队介绍

字节跳动数据平台前端团队

在公司内负责大数据相关产品的研发。我们在前端技术上保持着非常强的热情,除了数据产品相关的研发外,在数据可视化、海量数据处理优化、web excel、WebIDE、私有化部署、工程工具都方面都有很多的探索和积累。接下来本文还将介绍数据平台前端团队自研的简单、易用、跨平台、高性能的图表库与图表研发框架。

- End -

干货|词云指北(下):字节跳动数据平台词云实践相关推荐

  1. 观点|词云指北(上):谈谈词云算法的发展

    本文通过调研学术.商业.开源三个领域词云相关的产品,对词云相关算法.产品进行从上至下的总结,帮助读者快速了解词云相关的算法发展,并希望总结出当前字节跳动数据平台词云发展的路线. 全文将分两次推送,第一 ...

  2. 字节跳动有状态应用云原生实践

    本文整理自爱奇艺技术沙龙"云原生落地探索与实践"现场演讲,主要介绍了字节跳动有状态应用云原生化过程中在状态管理.基础能力增强.自动化运维等方面的挑战和应对,以及有状态应用云原生化之 ...

  3. 网络营销外包下字节跳动如此优秀私有市场估值远超拼多多与京东

    近日根据早前消息报道称,由于字节跳动投资者对其旗下业务及前景充满信心,当下字节跳动在私有市场下的估值已远超2500亿美元,换言之,字节跳动的估值已超过埃克森美孚与可口可乐位列纳斯达克第十四名,相当于两 ...

  4. 字节跳动携火山引擎云躬身入局 这朵云究竟要做成什么样子?

    科技云报道原创. 未来的互联网究竟是什么样子?凯文·凯利给出了自己的预言--The Mesh.这个被定义为"网状物"的单词暗示了"万物网络化"的未来科技趋势,而 ...

  5. 字节跳动数据中台的 Data Catalog 系统搜索实践

    动手点关注 干货不迷路 1. 背景 Data Catalog 能够帮助大公司更好地梳理和管理自己的资产,是 Data-drvien 公司的重要平台.一个通用的 Data Catalog 平台通常包含元 ...

  6. 字节跳动数据质量动态探查及相关前端实现

    更多技术交流.求职机会.试用福利,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 需求背景 数据探查上线之前,数据验证都是通过写 SQL 方式进行查询的,从编写 SQL,到解析运行出结果 ...

  7. 字节跳动数据部门收入证明,月薪13.9万!果然还是程序员吃香!

    网传字节某员工办理旅游签证,证明材料里面月薪这项税前高达139864.76元.今天就聊一聊互联网大厂的百万年薪都是一些怎样的存在. 今天这张图在微信群热传,字节跳动数据部门某技术职员,女,92年8月出 ...

  8. 云原生架构下日志服务数据预处理

    简介:本篇实践将以某家国际教育机构为例,为大家详细介绍云原生架构下日志服务数据预处理以及对应的解决方案和最佳实践操作手册,方便用户快速对号入座,解决云原生架构下的常见日志难题. 直达最佳实践:[htt ...

  9. 2020字节跳动数据库面试题及答案(二)—— NoSQL部分

    本文答案整理为原创,转载请说明出处 文章目录 redis 的底层数据结构有哪些 redis 中的 SDS 和 C 语言中的字符串有什么区别,优点是什么 redis 中的字典是如何实现的,如何解决冲突和 ...

最新文章

  1. 从Hive导出数据到Oracle数据库--Sqoop
  2. Python字符串的两种方式——百分号方式,format的方式
  3. python 柱形图 负值_Highcharts 使用负值的反向柱形图
  4. 三十九、Vue项目上手 | 用户管理系统 实现添加用户功能(中篇)
  5. c++ 多重背包状态转移方程_动态规划入门——详解经典问题零一背包
  6. C#命名空间namespace中不能直接包含字段(变量)或方法(函数)之类的成员
  7. 我的RSS我做主:My RSS
  8. 树形图,多层级目录等其他名称待补充……
  9. cpython知乎_Numpy为什么可以用C语言写?
  10. centos/linux下的安装Nginx
  11. try-catch(C# 参考)
  12. 如何更改电脑开机密码
  13. java实现小写金额转换大写金额
  14. 计算机主机配件及图解,电脑主机配件组成解析图文
  15. Win10耳机插上没反应,外放正常怎么解决?
  16. %3c php 能用什么代替,Phpwind9
  17. 教你炒股票25:每日解盘
  18. win10计算机打开之后隐藏3d对象视频,Win10 3D对象文件夹如何隐藏?手把手教你隐藏3D对象文件夹...
  19. 立体视觉入门指南:相机标定之Zhang式标定法
  20. 我上了一节小学AI课,发现四年级的小朋友不仅懂AI,还学会了写代码运行

热门文章

  1. 【文艺复兴之swing】JOptionPane.showConfirmDialog设置字体大小
  2. 如何在Mac上将视频刻录到DVD / ISO文件
  3. cad在线转换_CAD如何转为PDF?四个方法总有一个适合你!
  4. 小米5预装android版本,小米 Mi5(小米5 安卓8.0)获取Root权限服务含精简系统方案...
  5. Pytorch实战2:ResNet-18实现Cifar-10图像分类(测试集分类准确率95.170%)
  6. Java 编程风格军规,看这一篇就够了
  7. python入门语法《python入门经典》
  8. 武汉理工大学计算机组成与系统结构 Educoder实验
  9. 4.3连续分配存储管理方式 4.4对换
  10. 菜鸟是怎么练成的(四)