2017 开放学术精准画像大赛 - task2 解决方案

2023-10-13 21:40

本文主要是介绍2017 开放学术精准画像大赛 - task2 解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一次和同学组队做比赛。参加了 2017 开放学术精准画像大赛,三个人各自完成一个task。
队伍最终排名第二名,三个任务的python代码已经开源,见 https://github.com/geekinglcq/aca

ps: 三个人能一起做完比赛,很开心。其次,比赛赛制虽然出现了一些小插曲,但总体来说主办方还是挺nice的。

我负责task2部分的任务,算法在初赛时表现不佳,排名17名。决赛时,测试集的数据分布和训练集、验证集的数据分布差异较大。我的模型泛化性能尚可,最终单项排名第2。下面简要介绍一下task2的解决方法。

颁奖时和前几名的队伍交流了一下做法,大抵可以分为两种方向:

  • 文本多标签分类
  • 兴趣推荐

我是把任务当成一个推荐问题做的,即根据已知的一些兴趣给待预测学者推荐兴趣。

程序利用学者发表的论文标题信息、论文的引用和学者投稿期刊信息来预测学者的兴趣标签。程序先利用四个简单模型分别计算学者的兴趣得分,然后按照权重求出学者兴趣的加权平均得分,最后选择得分最高的5个兴趣作为最终预测结果。

模型中出现的符号如下: A 代表学者,AT表示训练集中的学者, AU 表示待预测的学者,
I 表示兴趣标签,T表示论文标题, Id 表示论文的序号, P 表示论文的发表刊物,SPAi代表第 i 学者投稿刊物集合,SIAi代表第 i 位学者的兴趣集合。

模型一

模型一的基本思想是:发表论文标题内容相似的学者,他们的研究兴趣相似。



程序首先从论文集合中找出每位学者Ai发表的文章,即 STAi={Ti1,Ti2,...,Tik} ,集合 STAi 可以描述学者的研究内容。为了找出训练集中和待预测学者 AUi 研究内容相似的学者,模型利用待预测的学者 AUi 发表论文的集合 STAUi 和训练集中学者 ATj 发表的论文集合 STATj 进行标题文本相似度计算。论文标题集合 STAUi STATj 的相似度越大,表示学者 AUi ATj 的研究内容越相近,学者 AUi 和学者 ATj 的兴趣越相似。因此学者 AUi ATj 的相似度 Sims(AUi,ATj) 可以定义为如下形式:

Sims(AUi,ATj)=Similarity(STAUi,STATj)

Sims(AUi,ATj) 可以作为学者 AUi ATj 兴趣相似度的表示。
最终,学者 AUi 对兴趣 Ij 的得分可以表示为:
Score(Ij|AUi)=k=0PSims(AUi,ATk)Identify(Ij,SIATk)

Identify(Ij,SIATk)=10 , IjSIATk , IjSIATk

根据上式,模型选取得分最高的5个兴趣作为学者的兴趣标签。

模型二

模型一先给待预测学者 AUi 在训练集中寻找研究内容相似的学者,再将学者的兴趣赋给待预测学者 AUi 。这个模型有两个问题:

  • 学者 ATj 对自己的三个兴趣 {Ij1,Ij2,Ij3} 的感兴趣程度不同;
  • 待预测学者 AUi 和找出的相似学者 ATj ,他们可能只有部分研究内容相似;

模型一使用同样的权重 Sims(AUi,ATj) 将兴趣 {Ij1,Ij2,Ij3} 赋给待预测学者 AUi ,不能真实地表示学者 AUi 研究兴趣。
为了解决上述问题,模型二直接计算待预测学者 AUi 和兴趣 Ij 之间的相似度。

模型二的基本思想是,学者发表的论文标题描述了学者的研究兴趣。




程序将训练集中学者发表的论文集合,按照学者的兴趣进行分类。
假设学者 ATi 发表的论文集合 STATi ,兴趣集合 SIATi{Ii1,Ii2,Ii3} ,则将集合 STATi 加入到集合 STIj1 STIj2 STIj3 中,其中 STIj1 表示属于兴趣 Ij1 的论文标题集合。
每个兴趣 Ii 都有相应的论文集合 STIi={Ti1,...Tip} ,集合 STIi 可以用来描述兴趣 Ii
预测时,程序计算出集合 STAUi 和集合 STIj 的相似度,将其作为学者 AUi 对兴趣 Ij 的得分,即:
Score(Ij|AUj)=Similarity(STAUi,STIj)

根据上式,模型选取得分最高的5个兴趣作为学者的兴趣标签。

模型三

此模型的基本思想是:学者发表的文章,引用的文章和引用学者的文章可以反映出学者的研究兴趣。研究兴趣相似的学者在上述三种情况下重合度较高。



学者 Ai 上述特征可以表示为集合 SIdAi={Idi1,...,Idik} ,模型利用集合 SIdAi 计算学者之间的相似度。
模型使用 Jaccard 相似系数作为相似性度量函数:

Sims(AUi,ATj)=|SIdAUiSIdATj||SIdAUiSIdATj|

和模型一类似,算法将相似函数 Sims(AUi,ATj) 作为学者 AUi 兴趣的得分。
AUi 对兴趣 Ij 的感兴趣程度可以表示为:
Score(Ij|AUi)=k=0PSims(AUi,ATk)Identify(Ij,SIATk)

Identify(Ij,SIATk)=10 , IjSIATk , IjSIATk

模型四

此模型的基本思想是:期刊通常收录某一领域的论文,具有一定的兴趣集合。学者将论文投到与自己研究兴趣相近的期刊。模型先计算期刊的兴趣分布,然后根据待预测学者投稿期刊的信息,预测学者的兴趣。



模型将训练集中学者的兴趣指派为其投稿期刊的兴趣,由此可以得到期刊的兴趣集合 SIPi={Ii1,...,Iik} ,则

Score(Ik|Pi)=C(Ik,SIPi)lj=0|(SIPi)|

在计算待预测学者兴趣时,先统计待预测学者 AUi 的发表的期刊信息 SPAUi={Pi1,...,Pik} 。根据集合 SPAUi 可以计算出学者对于期刊 Pi 的偏好:
wi=C(Pi,SPAUi)|(SPAUi)|

其中 C(Pi,SAUi) 表示集合 SAUi Pi 的个数。
由此可以计算出待预测学者对兴趣 Ii 的得分:
Score(Ij|AUi)=k=0PwkIdentify(Ij,SIATk)

Identify(Ij,SIATk)=10 , IjSIATk , IjSIATk

预处理

模型一和模型二涉及计算文本相似度的计算。文本处理过程包括:

  • 去停用词
  • 将文本转化为词袋模型
  • 文本转成TF-IDF表示
  • LSI模型降维LSI
  • 计算文本相似度

模型融合

上述四个模型利用不同特征预测学者的兴趣。为了使预测更加客观、合理,程序对四个模型进行了融合。待预测学者 AUi 对兴趣 Ij 的最终得分
如下:

Score(Ij|AUi)=k=04αkScorek(Ij|AUi)

总结

比赛中没有用到高大上的模型和算法,难度属于文本处理入门级别。

其他队伍的模型比较优雅一些。有使用Graph Embedding、SGD、RandomForest等,期待他们的算法和代码。

这篇关于2017 开放学术精准画像大赛 - task2 解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/206062

相关文章

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

html 滚动条滚动过快会留下边框线的解决方案

《html滚动条滚动过快会留下边框线的解决方案》:本文主要介绍了html滚动条滚动过快会留下边框线的解决方案,解决方法很简单,详细内容请阅读本文,希望能对你有所帮助... 滚动条滚动过快时,会留下边框线但其实大部分时候是这样的,没有多出边框线的滚动条滚动过快时留下边框线的问题通常与滚动条样式和滚动行

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null