- 财经新闻作为重要却海量的投资数据,无时无刻不在影响着投资者们的投资决策,为了更好地提示客户当下新闻事件对应的投资机会和投资风险,本课以研发“历史事件连连看”为目的,旨在根据当前新闻内容从历史事件中搜索出相似新闻报道,后期可以结合事件与行情,辅助客户采取相应投资策略。
- 该赛题是让参赛者为每一条测试集数据寻找其最相似的TOP 20条新闻(不包含测试新闻本身),我们会根据参赛者提交的结果和实际的数据进行对比,采用mAP值作为评价指标。 评价指标 该赛题是让参赛者为每一条测试集数据寻找其最相似的TOP 20条新闻,我们会根据参赛者提交的结果和实际的数据进行对比,采用mAP值作为评价指标,评分公式如下:
训练集数据 | train_data.csv |
---|---|
id | 训练集的新闻编号 |
title | 训练集新闻(标题) |
测试集数据 | test_data.csv |
---|---|
id | 测试集的新闻编号 |
title | 测试集新闻(标题) |
- Python 3.6
pip install -r requirements.txt
Algorithm | mAP |
---|---|
sequence-overlap | 0.0587 |
average-word2vec | 0.0770 |
LSI(num_topics=1000) | 0.0854 |
LSI(num_topics=2000) | 0.0870 |
simhash | 0.0310 |
bm25(jieba) | 0.1137 |
bm25(jieba&去停用词) | 0.1058 |
bm25(char) | 0.0850 |
bm25(thulac) | 0.0932 |
bm25(NLPIR) | 0.0957 |
-
建立词袋模型
-
用gensim建立BM25模型
-
根据gensim源码,计算平均逆文档频率
-
利用BM25模型计算所有文本与搜索词的相关性(使用gensim库)
-
找到最相关的top20文本
-
通过调整k1和b这两个参数,可以达到更好的效果
bm25 | mAP |
---|---|
k1=1.5, b=0.75 | 0.1137 |
k1=1.5,b=0.85 | 0.1182 |
k1=1, b=1 | 0.12 |
k1=1.2, b=0.9 | |
k1=1.4, b=0.85 | 0.1185 |
- 使用jieba分词对训练集数据进行分词
- 使用google提供的word2vec对分词后的训练语料进行训练,得到词向量(命令行参数设置为:./word2vec -train ../path_corpus/corpus_train.txt -output ../path_corpus/vec.txt -cbow 1 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -iter 10 -binary 0 -min-count 0 -save-vocab ../path_corpus/vocab.txt
- 对于分词后的训练语料中的每一个样本,将句子中每一个词对应的词向量按位相加取平均值作为句子的向量表示
- 采用cosine similarity作为文本相似度的度量标准,并取top20作为最终结果
- 该模型不需要对训练语料进行分词
- 文本相似度采用字符串的重叠度来度量
- 分词、去停用词
- 词袋模型向量化文本
- TF-IDF模型向量化文本
- LSI模型向量化文本(使用gensim库)
- 计算相似度
- 过滤清洗,提取n个特征关键词
- 特征加权,tf-idf
- 对关键词进行hash降维01组成的签名(上述是6位)
- 然后向量加权,对于每一个6位的签名的每一位,如果是1,hash和权重正相乘,如果为0,则hash和权重负相乘,至此就能得到每个特征值的向量。
- 合并所有的特征向量相加,得到一个最终的向量,然后降维,对于最终的向量的每一位如果大于0则为1,否则为0,这样就能得到最终的simhash的指纹签名(使用simhash库)