本文通过调研学术、商业、开源三个领域词云相关的产品,对词云相关算法、产品进行从上至下的总结,帮助读者快速了解词云相关的算法发展,并希望总结出当前字节跳动数据平台词云发展的路线。 全文将分两次推送,第一篇专注分享词云算法的行业情况。第二篇介绍字节跳动数据平台词云实践。
文 |橘子 from 字节跳动数据平台前端团队
DATA
前言
前文我们介绍了当下词云发展的情况,和行业内一些商业\开源的词云项目交互体验。接下来我们将重点分享针对学术算法的调研和商业产品的总结,对字节跳动数据平台词云发展的一些体会和当下的实践。
DATA
发展方向探讨
Geo Word Cloud
目前业界和开源并没有可用的地理词云生成工具,属于空白领域。
可能会遇到的问题:
- 是否有价值。 地理词云的输入是地理坐标和标签,生成的词云可以展示标签在不同地理位置的大致分布,是否有合适的业务场景和应用价值?可能在 GIS 相关的项目中比较有应用前景,可以方便的将 GIS 系统中的地理和标签数据直接可视化出来。
- 算法效率低。 计算上需要使用 K-means 、PCA(主成分分析),再加上放置单词时在传统词云算法的基础上需要额外考虑地理信息等,运算复杂度高。原论文(2016年)的 python 实现一张大数据量的图(上图)需要 30min。通过 简化/优化算法 应该能提高速度,但随着数据量的增加,效率依旧较低。
- 输入要求高。 如果用户输入的地理点和标签密度较小,生成的词云会很稀疏、难看。
Shape Word Cloud
开源领域没有提供一个 有效/好用 的形状词云库实现。
我们可以在 Shape Wordle 算法的基础上,实现一个算法简化版本的形状词云:
- 放弃需要大运算量的基于 distance field 的形状感知螺旋线的算法, 使用简单的螺旋线算法实现。
- 最好能够 保留纯前端的图形分割 ,对每个 独立的图形/切割后的图形 进行独立的螺旋线算法可以极强的提高结果的美观度。
- 保留二次填充算法。 在核心单词布局完之后,使用二次填充可以提高用户对图形的感知程度。此处可能会算法效率问题,特别是在跨端上会有问题。
但这样的缺点是:
- 二次填充算法是良好效果的基础,但一定会有效率问题。或许会导致其很难应用在性能较差的移动端。
- 能否找到效率和效果都比较合适的前端图形分割算法库。
词云创作工具
无论开源界还是商业上,都没有一个 方便编辑且美观的形状词云的生成工具。WordArt 和 微词云等工具编辑逻辑只能固定少数单词,非固定词每次算法运行位置都会发生改变,难以进行复杂的便捷操作。同时词云创作工具的应用场景和用户群体非常丰富,可以推动一个开源且好用的词云创建工具。
在上文简化版 Shape Wordle 算法的基础上,引入刚体力学的编辑方式,并以此为基础搭建一个设计工具。可能会遇到的问题:
- 纯前端的分词和词性还原。 WordArt 分词是纯前端计算,对于英文来说,需要进行词性还原,对于中文来说,需要有效的分词工具。这两者在前端的落地均可能遇到一些问题。
- 其他算法上的问题跟 Shape Word Cloud 会遇到的问题一致。
图云方向
对于拼接效果非常完美的图云(如下图所示)一般需要较为复杂的图形学计算。 下图为设计师设计的 图云(网络素材)
较为前沿的算法生成的图云可以做到几乎完美接近设计师结果的紧凑度,下图为 Pyramid of Arclength Descriptor for Generating Collage of Shapes 论文的运行结果。
但其生成算法的复杂度极高,在使用 GPU 并行加速的前提下,完成上图使用了60min+,显然是对于纯前端库是很难接受的。
故图云的初步方向大概为:
- 将图片视作简单的矩形 或 多边形,直接采用螺旋线算法进行拼接。其生成结果一般会有紧凑性的问题,但具有可接受的速度。
- 引入力导向布局的概念。首先使用螺旋线算法对图云进行初步布局,然后引入力导向将布局好的图云进一步拉紧,提高紧凑度。
- 这两种方式都可以在可接受的速度下提供一个较为初级的图云实现。
DATA
数据平台形状词云实践
综合上述调研,我们首先探索了形状词云在 字节跳动数据平台业务中的落地。考虑到前端对性能的限制,需要在算法复杂度和可视化效果之间做取舍和平衡,我们在学术界诸多成果的基础上,设计并实现了符合 字节跳动数据平台业务需求的 自研形状词云布局算法 。
该算法已经在字节跳动数据平台内部产品中实现落地,我们这里以一个实际业务场景举例展示算法的效果。
在抖音电影指数这个业务场景中,会使用词云来展示有关于各个电影的相关评论数据词云,以向用户传递大众对该电影的观点,如下图所示:
上图中使用了一个相对基础的词云,仅能表现评论中的词频信息,并且每个电影的词云大多相似,没有具有电影相关的特色信息。
(下述中图片数据来自于无版权网站,文字数据由代码随机生成,文字位置为算法自动生成)
如果电影是相关人物的传记,那我们可以采用相关人物的剪影来突出电影特色,输入图形:
构建形状词云:
目前构建的形状词云能够在保证词频数据传递的准确性的基础上,自动构建出视觉效果良好的形状词云,可以更好的展现不同词云应用场景的特点。
甚至对于文字轮廓这种非常复杂的形状,我们也能实现一个良好的效果, 输入图形:
构建形状词云:
此外,在更复杂、细节更多的形状中也实现了维持良好的视觉效果, 输 入图形 :
构建形状词云:
也可以使用更随机的单词角度来表现摩托车手的“自由感”:
形状词云作为一个基础图表,我们提供了非常丰富的 API 来给字节内部使用者打造非常自由的创作空间。对于不想花时间配置复杂参数的用户,我们也引入了多种自动化算法根据用户的输入数据自动生成合适的配置,最少仅需三个属性(数据、文本对应的 key、形状图片) 即可生成效果良好的形状词云。
同时,有效的自动化算法也可以扩展形状词云的应用场景,例如在上述电影指数场景,用户不需要针对每个电影的数据量和形状对参数进行调节,依靠自动化算法可以生成相对合适的参数,从而减轻了大量使用形状词云的配置负担。
另外在词云动画效果上我们进行了精雕细刻,设计了不同的入场效果,比如位移动画:
渐变(同时改变字体和透明度):
未来,我们将会持续探索形状词云细节算法的优化,以及探索在性能可接受前提下图云相关算法的落地。
点击 原文阅读 继续了解 词云指北(上)
团队介绍
字节跳动数据平台前端团队
在公司内负责大数据相关产品的研发。我们在前端技术上保持着非常强的热情,除了数据产品相关的研发外,在数据可视化、海量数据处理优化、web excel、WebIDE、私有化部署、工程工具都方面都有很多的探索和积累。接下来本文还将介绍数据平台前端团队自研的简单、易用、跨平台、高性能的图表库与图表研发框架。
- End -