知乎是目前国内最大的知识问答社区。截止 2019 年 1 月,它已经成为一个拥有 2.2 亿用户的平台。每天平台上都会产生大量的新提问,但是如此海量的问题往往不会被能够回答问题的答题者主动发现。因此,有时候需要用户或平台算法主动向潜在的答题者提出邀请,让他们来回答问题。
在知乎建立的早期,邀请主要由用户向熟悉的其他答题者进行邀请。随着用户规模和问题数量的增长,人工方法不能满足实际的需求,因此知乎需要一种算法能够自动向专家邀请回答领域内的问题。
为了利用知乎积累的海量高质量文本数据和行为数据,2019 年 8 月份知乎联合智源人工智能研究院推出了专家发现算法大赛,寻找一种答题者推荐合适问题的算法。据介绍,为期四个月的比赛中,吸引了全球 11 个国家或地区 711 支队伍、1631 名选手参赛。
本次比赛共设三个级别的奖项,其中一等奖一名,二等奖两名,三等奖四名。经过几轮角逐后,昨日,智源-看山杯专家发现算法大赛举行了颁奖典礼。比赛冠军由 test 团队获得,团队成员为来自腾讯的曹雄。而亚军和季军获奖团队成员分别来自电子科技大学、广东工业大学、华南理工大学、重庆邮电大学、北京邮电大学、Keep、京东等高校和企业。
在颁奖典礼上,北京智源人工智能研究院副院长、清华大学计算机系副主任、教授唐杰称,2019 年智源人工智能研究院先后组织了 10 次竞赛,本次比赛是智源 2019 人工智能大赛的任务之一。智源研究院通过采用新的科研组织形式和人才引进培养模式,希望推动人工智能发展方向和理论、方法、工具、系统等方面的关键性突破。
知乎技术副总裁李大任表示,知乎希望能够贡献自身的数据,帮助人工智能社区发展,同时通过大赛改进知乎的内容推荐和搜索方法,推动技术进步。
随着算法等方面的进步,目前知乎平台上新提问的三天解答率为 70%,在热门关注问题上解答率则为 80% 以上。
为 183 万问题寻找答题者,这个赛题不简单
本次比赛的任务是:给定相关数据,判断被邀请的答题者是否会回答被推荐的问题,是一个推荐领域的匹配问题。
尽管看起来这是一个 matching 方面的问题,但是这一任务实际上面临很多挑战。例如它有着冷启动方面的问题——85% 的问题只有四个及以下的回答,而 66% 的用户没有回答过任何问题。
同时,任务也面临着新出现问题信息少、描述少、获取文本特征不充分的问题。此外,考虑到现实中答题者本身精力有限,而提问者对问题的需求有一定的即时性要求。如何让算法能够平衡这一矛盾也是一个值得探究的话题。
另一个较为困难的点在于,赛题涉及的数据量非常大但较为稀疏。数据集总共包含了 183 万个问题,近 200 万专家(即答题者)画像,以及 1100 多万的问题邀请记录。其中有很多问题从来没有人回答过,大量潜在的答题者都是潜水的小白,许多邀请记录是负样本。
这样一来,就要求参赛者能够从海量的稀疏数据中使用特征工程的方式,尽可能多的获取问题、用户画像和邀请记录中的各种特征,从而将数据进一步凝练。
在数据集的构建中,知乎随机选择了一个月的邀请数据进行训练,其之后一周的数据则为测试数据。其中正样本进行保留,而负样本则采样了一部分。
在比赛中,参赛队伍在获得数据后需要进行训练和测试,测评以 AUC 为指标,并按照性能进行排名。
获奖队伍使用的算法模型如下所示:
从较为靠前的排名选手使用的模型可以看出,大部分参赛者都使用了模型融合的方式进行构建。其中,使用最为广泛的是 LightGBM,一个决策树机器学习模型。此外,还可以看到和梯度提升有关的模型也受到关注,如 Catboost 和 XGBoost。最后,深度学习模型也占据着重要地位,包括 DeepFM、Wide&Deep 等。
从这里可以看出,在推荐任务上,非深度学习算法依然有着重要的地位,特别是 LightGBM、各类 Boosting 算法。它们在计算效率、特征处理等方面具有一定优势。但是深度学习强大的拟合能力,使其在包括推荐系统在内的机器学习领域都具有了一定的地位。
算法加持,特征工程也很重要
获得一等奖的是来自腾讯的 test 团队,团队仅有成员曹雄一人。他主要的研究方向是推荐算法和系统。
这一算法使用了两种机器学习模型,并采用了 5 类数据特征,通过训练模型并融合结果,取得了 0.8969 的 AUC 性能,在 700 多支参赛队伍中排名第一。
在他的解题过程中,首先对数据进行特征工程,然后将特征输入到模型中进行训练并调参,最终评价结果。其中,特征工程无疑是解题中非常关键的步骤。
5 大类别数十种特征的使用
在数据特征上,冠军算法采用了以下 5 类特征,其中每一类都包含了很多特征:
1. 用户特征2. 问题特征3. 用户兴趣命中特征4. 问题统计特征5. 用户行为特征
看起来非常分的很清楚了,但实际上,这些特征还可以继续细分,分为类别特征、文本特征、行为特征等,有些可以直接从数据中获得,而有些则需要按照时间等方式进行统计,还有一些则需要进行编码处理(如文本等)。
举例说明,在用户特征方面,用户性别、创作数量、关注话题等属于其本身的类别特征,但同时也会有它的行为特征,如用户问题标题点击率统计等。有些用户行为就需要按照天区间进行统计,如分为 1 天、7 天、14 天、30 天。同时,还可以对用户行为相似性进行统计,如问题标题点击相似等。而问题也具有类别特征,如所属话题等,还有点击率等需要统计计算的特征。
另一方面,对问题标题、描述等文本进行特征工程也是必不可少的。例如,对于问题的标题和描述,可以使用单字的嵌入或分词后进行词嵌入的方式进行处理,像冠军算法中就采用了 64 维的词嵌入。
在经过了周密的特征工程,充分挖掘特征后,解题进入下一阶段:选择模型并训练。
LightGBM+DeepFM:优势互补的模型融合
冠军算法采用的是模型融合的方法,分别使用数据在 LightGBM 和 DeepFM 两个模型上进行训练,并以 0.7 和 0.3 的权重进行融合,取得最终的 AUC 结果。
据曹雄介绍说,LightGBM 是一种较为常用的、推荐系统领域的机器学习算法。在处理特征数量不太多的情况下性能较好。
具体而言,LightGBM 是一个梯度 boosting 的框架。使用决策树算法。和其他决策树(如 XGBoost)不同,LightGBM 的树在「生长」的过程中随树叶向下,即「Leaf-wise」。而其他树的生长,如 XGBoost,则是 Level-wise 的。
LightGBM 算法图解
随着树的子叶进行收敛使其速度更快,对于内存的占用也更少了。而且 LightGBM 支持使用 category 的特征,因此在有很多类别特征的推荐系统中使用较广。这也是为什么基本上所有参赛选手都选择它作为模型一部分的原因。
在冠军算法中,LightGBM 模型中使用的超参数如下:
num_leaves=800learning_rate=0.035min_data_in_leaf=100max_bin=2047
当然,和科研有所区别,竞赛中一般会选择采用多个模型融合的方式,使整体效果得到提升,因此冠军算法还选择了 DeepFM。
DeepFM 是一个深度学习模型。首先,对于不同的特征,它采用「分而治之」的方法,让不同的特征都对应不同神经网络层,将这些特征的独热编码映射为密集向量。然后,将神经网络和因子分解机(Factorization Machines, FM)结合起来,采用并行或串行的方式,让 FM 和全连接层分别映射低阶和高阶的特征,最终实现预测。
DeepFM 的优势在于其强大的学习能力,和相比 DNN 更小的计算量。据曹雄介绍,当特征量非常巨大的时候,神经网络相比 LightGBM 等算法实际上具有更好的性能优势。
在实际过程中,test 团队对于 DeepFM 进行了一定改进,具体架构图如下:
从架构上可以看到,这里的 DeepFM 模型采用的是并行的方法:一方面使用 FM 建模特征,但同时使用 Pooling 方法单独建模用户相关的特征。同时还使用了点积计算,将问题和用户特征共同映射。最终,和 DeepFM 一样,将 FM 学习到的特征和神经网络学习到的特征一同映射到一个全连接层,并最终预测结果。
从最终的结果来看,LightGBM 取得 AUC 为 0.895,DeepFM 取得的 AUC 为 0.88。通过模型融合的方式,最终的 AUC 为 0.8969。
在专家点评环节,知乎算法团队负责人孙付伟评价说,这一工作采用了和知乎团队相似的特征工程工作,但是仅使用单模型就取得了很高的性能,是非常令人惊讶的。
作为一家知识内容平台,知乎一直重视技术创新价值的挖掘。自 2016 年引入机器学习技术以来,知乎已经将人工智能、算法技术应用到社区内容和产品体验的各个环节中。通过比赛征集算法思路,知乎可以进一步生产大量优质内容,每天为 10w+的问题找到合适的答题者。