Science of Science 数据黑客松小总结

Science of Science 数据黑客松小总结

原本以为没有时间搞了,官方说测试集出现问题了,延长到11号早上。所以10号晚上考完视觉计算,瞎搞了一下,发现和前排的大佬差距甚大。简单记录一下自己的方法,日后方便回忆。

发现熬夜修仙真的不适合我,凌晨两点睡,第二天整个人废了,还是提高一下白天和晚上的效率吧

赛题要求

本次比赛任务是匹配科研论文和科研新闻。发布的数据包括论文和新闻的信息。训练集将提供正确的匹配,测试集要求选手为每一篇新闻匹配三篇最可能相关的论文。
训练集:(2019年6月8日发布)
press_train.csv:科研新闻数据集,字段如下:

  • press_id:每篇科研新闻都有一个唯一的ID
  • press_headline:新闻标题
  • press_org:发布新闻的机构
  • press_text:新闻正文
  • paper_train.csv:论文数据集,字段如下:
  • paper_id:每一篇新闻都有一个独立的ID
  • paper_title:论文标题
  • paper_journal:论文发表期刊
  • paper_authors:论文作者,用逗号隔开

match.csv:训练集提供匹配结果,字段如下:

  • paper_id:论文ID
  • press_id:和同一行paper_id对映的新闻的ID

测试集:(2019年6月8日发布)

  • press_test.csv:科研新闻数据集,字段和press_train.csv相同
  • paper_test.csv:论文数据集,字段和paper_train.csv相同

评测指标

MAP@3

MAP@3代码

y_true = match.paper_id
y_top_3 = y_pred

MAP_score = [[(y == y_true[j])/(i+1) for i, y in enumerate(y_sample)]
             for j, y_sample in enumerate(y_top_3)]

map_score = np.sum(MAP_score, axis=1).mean()
map_score

方法

主要采用的是提取论文标题和新闻的tf-idf向量,再取最大的3个余弦相似度。最后结果只有0.62.
以下是代码

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import TfidfVectorizer
from tqdm import tqdm
import pandas as pd
import numpy as np

paper_test = pd.read_csv('../data/final_testset_20190610/new_paper_test.csv')
paper_test = paper_test[['paper_id','paper_title']]
press_test = pd.read_csv('../data/final_testset_20190610/new_press_test.csv')
press_test = press_test[['press_id','press_headline','press_text']]
press_test['press_content'] = press_test['press_text']

test_set = []

for i in tqdm(press_test.index):
    
    doc = press_test.press_content[i]
    test_set.append(doc)
    
for i in tqdm(paper_test.index):
    
    p = paper_test.paper_title[i]
    test_set.append(p)
    
tfidf_vectorizer = TfidfVectorizer(stop_words='english')
tfidf_matrix_test = tfidf_vectorizer.fit_transform(test_set)

press_test['res0'] = 0
press_test['res1'] = 0
press_test['res2'] = 0

top_k = 3
for i in tqdm(paper_test.index):
    result = cosine_similarity(tfidf_matrix_test[i], tfidf_matrix_test[25000:])
    arr = result.argsort()[0][::-1][:top_k]
    press_test['res0'][i] = paper_test.paper_id[arr[0]]
    press_test['res1'][i] = paper_test.paper_id[arr[1]]
    press_test['res2'][i] = paper_test.paper_id[arr[2]]

res = press_test[['press_id','res0','res1','res2']]
res.to_csv('../result/res.csv',index=0,header=None)

总结

  • 后面有时间的话,其实想做监督学习的二分类,利用tf-idf和余弦相似度看看取个top5在训练集上能不能包含对的答案,这样来构成正负样本训练。
  • 这是我的第一篇文章,欢迎大家指正学习。(想找个长期靠谱的队友,毕竟一个人做比赛没人沟通很容易放弃,欢迎关注我的公众号后台私聊)

前排大佬发的ppt特征总结

  • 论文的作者出现在新闻中,那么这篇论文大概率和这个新闻匹配
  • tf-idf
  • LDA
  • whether the author in the press
  • whether the journal in the press
  • how many times author in press
  • 在论文钟journal缩写,在新闻中全拼,所以要替换成full name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值