在那张地图上,他们相距并不遥远
东北女孩李天石在美国卡内基梅隆大学攻读博士学位。这个夏天,她和男友杨俊睿过着典型的“博六”生活,每天开组会、搞科研;4073公里外的华盛顿大学,博士生张明瑞最近正忙着暑期实习,在科技公司写代码。下班回家,他打开攒了好久的日剧剧集,发誓“今晚绝不加班”;11172公里外的北京,北京大学前沿计算研究中心的博士生蒋鸿达正忙着帮实验室开展保研季的招生工作、推进手头项目。
在7月里的某一天,这些年轻人并不知道,他们会因一场暴雨展开一次跨国合作。
李天石是在刷微博时,注意到河南的雨。她关注灾情实时动态,点开热搜词条,看到大量求救信息。
“焦虑、担心。”她回忆,当时问自己,“我能做些什么?”
河南遭遇强降雨天气,郑州是舆论关注的绝对中心。但李天石注意到,当她点开一条郑州雨情的信息时,就会在评论区看见被“淹没”的声音:“看看卫辉吧”“巩义请求救援”等。到了北京时间7月21日,微博“河南互助救援”话题下已涌入14万条讨论博文。求救信息繁乱、庞杂,热度稍低的消息一瞬间就被信息的海洋吞没。
李天石思考,能不能建一个网页,将求助消息的地理位置提取出来,标注在地图上,以二维的、扁平的图像直观地呈现灾情。
太平洋夏令时7月21日22时44分,她和男友在朋友圈发布了这一想法。
看到李天石的朋友圈,身在华盛顿、发誓“今晚绝不写代码”的张明瑞食言了。他掏出工作电脑,打开程序语言界面。北京的蒋鸿达则被导师告知:留美学生团队正在针对河南灾情制作救援信息地图,需要他的帮助。
就这样,在不同时区,4名初创成员开始搭建第一版救援地图。
这支小分队成立后5小时,网页正式上线。
“这个项目更像一座桥。”张明瑞在解释程序运行原理时这样比喻,桥的一端是互联网中海量的求救信息,另一端则是呈现在用户面前的地图。计算机会按程序指令,将网络发布的求救信息中的地址提取出来,汇总到已有的地图软件后台,地图软件会在需要救援的地方打上一个红色的标记。流经鹤壁的卫河被暴雨灌满,洪水漫上堤坝,村民发出了求救信息。机器获取到救援信息,在地图上标注红点:“浚县陈村北人工堤快要决堤,请求救援!请求救援!”
开发团队将网页链接发在朋友圈,有朋友帮忙转到微博,希望能扩大受众面。
随着时间推移,信息流不断汇聚到地图上,红色坐标显示的是求救者位置,经纬度精确到小数点后6位。那条标有河南拼音的网址出现在朋友圈、微博、科技论坛……地图开始扩散。
李天石和她的团队起初并没有想到,这张地图能引来很多人的关注。“当初就想着把它搭出来,能帮到人就好,传播不开的话就当作一次练手。”事实上,就在上线的第二天,网页就涌入了8万多的浏览量。宣传救援地图的那条微博,因转发量过大而被限流。救援地图上线的当天,张明瑞接到了河南开封蓝天救援队的电话,他们希望能在救援地图上发布消息,征集雨衣、胶鞋以及手电筒。
“程序已经开始了它的生命。”李天石和她的团队意识到,“在最初制作的时候,程序的走向完全靠开发者的意愿,但当更多的人了解和使用它时,它就不再完全属于你,用户的需求、想法决定了它的成长轨迹。”在救援地图的界面中,李天石开出“版本日志”小专栏,用于记录程序的更新历程。
优化信息筛选是最为紧要的。最初,计算机通过“河南”“救援”“暴雨”等关键词在微博中提取信息。但四人小分队很快发现,这种粗筛的方式会让不少无关信息混入其中。
“误抓”最多的是明星救灾、捐款的内容。张明瑞主要负责文本抓取和处理,程序上线初期,某些明星的名字一直占据他的电脑屏幕。
张明瑞说:“如果真正有需求的用户在救援地图中看到一则明星灾区救援的消息,他肯定就不想往下看了。”他的首要任务就是将这些无关信息剔除出去。
好在,明星的宣传文案“有一套自己的话术”,计算机程序通过学习能够识别并筛除相关内容。“我理解粉丝的心理,自家爱豆做了好事,肯定希望扩散让更多人知道,但占用救援信息传播的通道来增加曝光量确实不妥。”张明瑞与这类无效信息斗争了小半天:“这是对救援标签的污染。”
地图程序还在不断迭代。“救援信息是有时效性的。”开发团队意识到这一点。在初代救援地图中,求助的标识密布整个河南版图,李天石在想,是否能在二维空间呈现的基础上,增加时间筛选的维度,“救援队能根据时间节点更快作出救援判断,关注灾情的网友也能直观地看到事态发展。”最终,他们通过增加“时间轴”的控件实现了这一需求。拉动时间轴,可以看到从最近2个小时到过去12小时,每一个小时内所发布的信息。
李天石的团队也更新了。曹昊是清华大学软件学院的在读博士生。救援地图上线第二天,他申请参与到前端的“可视化开发”;博士生徐栩海是张明瑞的同学,他和自然语言处理方向的硕士生孙壬梁一起,共同负责数据标注及文本分类模型的搭建。
参与开发的远不只团队名单中的人。李天石将程序发布在论坛中,不少网友开始帮忙调试程序、提建议,还有人直接把写好的代码交给团队,希望能整合进程序。
接受采访时,李天石将网页地图左上角的信息列表圈了出来。“原本这个列表遮住了三分之一的屏幕,后来有网友帮我们加了一个折叠功能。”她指向列表右侧一个浅蓝色小箭头,点击,列表瞬间缩入屏幕左侧,“这是一个很小的功能改动,但却给地图呈现留出了更多空间。”
还有网友给他们提交了代码,能将获取的实时数据自动搬运到文本识别的文件夹。“这是特别好的想法,起初我们需要隔段时间把机器获取的信息复制、粘贴过去,这会很麻烦。”李天石介绍,当时的救援信息量不大,无法与网友提供的代码进行匹配,但网友的思路给团队带来启发,“我们借用了他的脚本实现了实时的数据更新。”
网页操作的流畅度得到提升,救援信息筛选、提取的精度也不断提高。彼时,救命文档刷爆网络,张明瑞提出用共享文档“飞书”辅助程序运行。开发团队开始与其他志愿者团队对接,将已审核的救援信息整合进入文档,再供机器处理,在地图上呈现。
随着共享文档的引入,团队中加入了人工审核员的角色。文档中,志愿者会根据信息的内容打上“物资”“求助”等标签,进行人工分类。人工的介入本不在李天石的计划中,“我一开始是希望它完全自动化,但后来意识到,其实人在里面依然是重要的角色。” 机器完成了诸如数据搬运、粗筛以及地图标志等重复性工作,更为细致的分类工作需要人来完成。
“机器也能做类似的分拣,但准确度不够。在时间有限且数据杂乱的情况下,求助于人是更好的选择。”张明瑞是“增加人工审核员”想法的提出者,审核员一栏留下了他的名字,“它还能形成一个回路,人对信息的标识结果会反馈给机器,机器通过学习能进一步优化它们的识别。”这一次,机器和人配合完美。
截至7月30日,第九版救援地图程序更新完毕。在一周内,地图共收录8560条有效信息,3.8万个独立账号接入网页,28万次访问……然而,这远未到终点。
“我也想出一份力,但我不会写代码怎么办?”救援地图发布以来,开发团队的私信框一直收到类似问题。“当程序面向更广泛的群体时,你才会发现,那些自己或者身边人都认为很容易的东西,对别人而言是有门槛的。”李天石后悔没能将“降低技术门槛”这一条纳入程序开发的考量。
“人工审核员”这一岗位,就因为技术门槛将不少热心人士“卡”了出去。张明瑞曾经和两个志愿者团队进行对接,对方希望协助团队筛选、分类和审核的工作。然而,为了能让机器读懂人工分拣的结果,志愿者需要接受培训,按照严格的格式进行信息处理。“这需要一定的学习周期和成本。”张明瑞说,“但时间紧迫,要优先用最简单、最易接受的方式。”志愿者团队没能真正加入,倒是他计算机系的几名师弟参与其中。
李天石还想到了一个细节。程序最开始上线时,前端开发还未完善,打开网页时会出现卡顿的情况。但评论区会有网友留言“外地网友尽量不要点开,不要给服务器压力,保持网页流畅”。“真的不是因为这个。”李天石半是感动半是无奈地表示,“大家对技术细节不太了解,以为服务器压力太大,其实是我们开发太匆忙,还没优化好。”
“用更低门槛、更广泛易懂的方法,让大家使用这一程序,感受到程序的价值。” 7月31日晚,开发团队开了个小会,“让程序更友好,操作更简单”将是他们之后的调整目标。
李天石的想法不止于此。“我想更多地去了解这种可视化功能在什么场景、对哪些群体是比较有用的。”虽然相隔万里,她感觉自己也站在那场暴雨中,她的身份是一名关注灾情动态的网民,她需要的是直观、实时的灾情动态,“这也是我凭直觉开发程序的动因。”但在救援的过程中,还有更多方的力量,求救者、救援队、志愿者,每一个群体都有他们的诉求。
她正在思考一个计划,灾情结束后,她要去联系志愿者与救援队,摸清他们的工作流程,看看“哪些问题能够让机器介入并解决”。她还想看志愿者使用程序的过程。讲到自己的专业领域,李天石有些兴奋,“我会记录下他们点击了哪些功能,对哪些信息比较感兴趣,包括光标会在哪些地方来回划过。”这些内容,能帮助她更好地把握程序优化的方向。
救援地图的开发者们相信,可视化技术会为这类事件带来更多帮助。比如,中国留学生团队在“一亩三分地”留学论坛中开发了“世界疫情实时动态”的网页,以可视化方式实时呈现新冠肺炎疫情的分布与发展,它也成为美国疾控中心(CDC)参考数据的来源之一;国外一款名为CITIZEN的程序,能呈现用户周边的突发事件以及新冠肺炎疫情传播情况,从而帮助用户规避风险……目前,李天石和她的团队也已将救援地图程序“开源”,欢迎网友借用或者协助更新。
随着河南灾情的缓解,网页的访问量也开始下降。扑在地图上快两周的李天石,需要把手头上的科研任务赶一赶;张明瑞终于有时间把落下的日剧补上,停更的个人公众号也恢复更新;蒋鸿达收到了好消息,论文被顶级学术会议收录,上周四,他和实验室的朋友聚在一起观看东京奥运会乒乓球男单半决赛,为马龙欢呼。
地图上交叠密布的红色标签已变为零星散落的红点。最近12小时内,唯一一条消息写着“需要蔬菜、鸡蛋2000斤、味精10袋”。李天石想,等到地图上不再出现新的求助信息,他们这一阶段的任务就完成了。