这篇博客主要复盘这次比赛的冠军方案。个人对文本生成的相关工作中,最看好的是data2text类任务,也即是从结构化文本到自然文本的过程。可以用于天气预报,金融报告,新闻生成等众多任务中。
针对2018年的俄罗斯足球世界杯,实时性产生新闻。
属于文本生成领域的data2text子任务,但是该比赛的data层面包含了文本,表格数据和图集数据,比起传统的data2text任务,在输入端更加的丰富。具体来说,一篇新闻报道的产生包含:新闻事件数据(实时),新闻图集数据和历史足球比赛新闻原文数据。
新闻事件包括伤停补时,开球等多个事件,针对每个事件给出了尽可能详细的信息,包括事件的关联人,主客队的信息,发生的时间,原因等。
图集数据包含:比赛场次,图片描述和图片的下载地址。
历史新闻数据的字段包括:新闻标题,新闻内容,新闻发布时间,新闻中出现的实体信息(人名/组织/地名),新闻图片链接,从新闻中提取的关键词(关键词之间使用逗号分隔)。
这次比赛是开放性赛题,也就是赛题形式不限。主办方建议的比赛形式:对应场次的比赛详情描述,球队历史战况分析,比赛结果预测和球队各位置的球员历史表现。
全网用户阅读PV统计+评委评分,其中评委评分维度包括:新闻专业度(新闻的准确性,时效性,描写是否生动,分析角度是否独特)+数据角度+算法角度。全网用户阅读的PV统计是直接将生成的稿件放在面向用户的平台,统计PV。这也是个人觉得该比赛比较酷的一个地方。
设计模板,例如时间+人物+事件。从结构化的表格数据中直接提取对应字段的值填入模板。显然,这种方法生成的新闻千篇一律,单调无趣,但是不会出现事实性错误。
“历史总是惊人的相似”。既然有历史新闻数据可用,为什么不用呢?可以从历史新闻原文数据中提取与实时新闻事件数据相关的关键句,这些关键句可以直接作为摘要,也可以作为实时新闻生成的辅助数据。怎样找到关键句?设置实时新闻事件数据的关键词(国家队名+重要球员名+自定义关键字),提取历史新闻文本中的关键词(TextRank),两类关键词进行查询匹配,得到关键句。
反思这种思路,其实是做了基于检索式的方案。用一种模糊查询的方式,搜出一些历史报道的文本,继承自历史文本数据,生成的摘要则更加的灵活,但是多个查询结构如何逻辑通顺的衔接在一块是一个重要问题。
实时事件文本和历史新闻数据文本相比的区别在哪里?后者有更多的定语和状语,连接词等修饰语。既然是这样,那么从实时事件文本到新闻数据要去做的事情就很清楚了。可以将历史新闻数据中的描述性词语mask掉作为输入文本,将对应的原始文本作为目标文本。这样模型学习到的就是怎样给只有实体词的文本添加修饰语了。当测试的时候,也就是给出实时事件文本的时候,直接将实体词进行拼接,同时加上mask的标志位就可以了。这样的话,mask标志位相当于一种占位作用,当然可以直接删除,只要训练数据的输入和测试数据的输入格式保持一致就行。
在最终的方案中,冠军采用了mask占位符的方案,但是这里有两个困难:
第一:如果保留mask标志位,由于测试时,实体词和标志位的组合方式较多,需要做筛选;
第二:如果保留mask标志位,需要避免模型学习到一个占位符对应一个单词的模式,因此可以对训练数据中的相邻占位符合并。
采用这种思路不仅可以从结构化文本中生成对应的描述新闻,同时也可以对非结构化文本进行文本复述和改写。
“在将结构化数据转换为自然语言的过程中,第一名并没有使用传统的人工预定义的模板方法,而是富有创造性地先将数据字段转化为对应的实词,再利用赛事提供的语料训练出的深度神经网络将这些实词之间的状语,定语补齐,由此巧妙地解决了机器自动生成中的衔接连贯问题。”
2.冠军比赛方案