6月28日 看完论文《融合LDA与TextRank的关键词抽取研究》,基本理解其思想。

6月29日 看完第二篇论文《词语位置加权TextRank的关键词抽取研究》,理解其思想。

7月1日 和包睿,礼明师兄确定交接事宜《关键字提取流程》。

主题词抽取的流程:
(1)分割博客文件 --- (镇宇)
将1_BlogContent分割成单个单个的博客文件;
文件命名为:博客编号(D0000001)
文件内容为:博客编号(\n)博客标题(\n)博客内容
分割的文件有1,000,000个, 分200个文件夹保存,
文件夹的名为”D0000xxx-D0000xxx”,每个文件夹有5,000篇博客
建议技巧:Spark
(2)搭建文本检索系统(whoosh) -- 包睿
对每个文件夹中博客搭建whoosh检索系统, 分有200个检索系统,
格式:
Id:博客编号
Title:博客标题
Content:博客内容
keyWord:暂设为空, 即””
提取SMPCUP2017_TrainingData_Task1.txt内容, 将对应的关键词存到对应的检索系统当中.共有14557个训练博客
(3)统计关键词的特征 -- 包睿
位置特征:
是否出现在标题
在博客内容中出现在第几句
句中第几个词
词性特征:
名词/动词/名动词
组合词特征:
单节词/双节词/三节词
名名组合/名动组合/动名组合
(4)关键词提取算法 ----  柏琪
根据关键词特征训练特征权重, 对词语赋予权重
利用TextRank算法对词语进行排名
(5)协同训练 ----  镇宇(待续)
涉及到聚类, 词汇链构建, 命名实体识别

 

7月4日 理解textrank算法思想,下载textrank包。

7月5日 了解jieba词性标注分词原理及用法

7月6日 弄清textrank包用法,修改算法。

7月8日 开始实现lda算法,向镇宇师兄和靖达师兄lda工具的安装使用(疑问:选lda或gensim包,corpus,word_id,topic_id参数如何正确输入)。

7月9日 完成TR算法(看懂代码),对其进行改进,代码优化简略。(lda相关问题得到解答,如使用gensim包,corpus,word_id,topic_id参数如何正确输入等)

7月10日 打出lda算法,并与TR算法进行融合,加入数据预处理程序analysis,学会函数分类编程思想(类封装函数,用对象调用类(一些方法仅在类创建对象时调用,就不用每次调用对象时函数都被调用,比如说是去停用词的算法,就不用每次处理一篇文档都调用一次),提高算法效率),最高准确率为27.3%.

7月11日 上午 做TR效果测试

    下午 改进lda算法,优化了lda效率;

      改进analysis预处理,让TR与lda输入单词数相同;

      加入“先分句后分词”预处理;

    晚上 做参数遍历,寻找最优参数设置;(lda:32%;TR:31.8%;lda+TR:())

      调整lda+TR融合算法,分为4种:

    1.  ex1 转移矩阵加权平均(0.5
    2.     ex2 转移矩阵相乘
    3.     ex3 最终结果相加
    4.     ex4 最终结果相乘

 经测试,最终确定第2种方法ex2 转移矩阵相乘的效果最好,准确率为33.9856490541%.

7月12-13日 任务有5个:

(1)不去掉“类”,“栈”,“3d”;(ok,准确率下降)

(2)提取《SMPCUP2017_ValidationSet_Task1.txt》里的所有文件;(ok)

(3)导入结巴自定义词典《trainSet.txt》,计算召回率,代码如下;(ok)

 

 1  # 计算导入自定义词典后,结巴分词结果召回率
 2     recall = 0
 3     text_set = []
 4     for i in xrange(len(filenames)):
 5         text_set.append([])
 6         for list in text:
 7             for w in list:
 8                 text_set[i].append(w)
 9 
10     for t in xrange(len(text_set)):
11         for w in set(text_set[t]):
12             if w in result_list[t]:
13                 recall+=1
15    print '召回率',recall/(len(text_list)*5)

 

(4)模糊匹配,若两个词均含有相同内容,保留长字去短字。(ok,,准确率提高到36.3%)

(5)增加去停用词规则,过滤含数字/符号的单词(纯数字)。(ok)

7月17日,《SMPCUP2017数据标注(1-1200).xlsx》计算词频。(ok,17号完成)

      加入组合词方法(词频不低于3的词和其左边的词和右边的词组合),效果不太好。

7月18日,和子旋师兄聊关键词提取的方法(特征工程和word2vec的skip-gram模型);

     发现引入PositionAnalysis方法计算词的权重都一样,错误已修正;

     错误修正后,去掉lda,转移矩阵相乘(1×panalysis)准确率为46。3%;

     任务一提交,结果最好为56%(第3名)。

7月19日,加权平均——权重归一化;

     融合textrank和PositionAnlysis方法(去除lda),调整转移矩阵和最终矩阵参数,准确率为47。5%;

     学习skitit-learn方法,做词二分类问题(是否是关键词);

8月4日,整合了scikit-learn文本分类方法和位置信息,来训练分类器;

8月6日 ,文本分类方法加入了词性特征和词的idf值特征,来训练分类器;

8月9日,尝试用各种scikit-learn里的方法(除svm)训练分类器;

    开始的时候数据过拟合,后来将训练集70%做训练集,30%做测试集,发现adaboost(200)的效果较好(50%);

8月10日,引入新的停用词表,将没有idf值的单词的idf赋为13,重新引入analisis方法里对词过滤的方法发现adaboost(250)的效果较好(54.6%);

8月27日,和加拿大蒙特利尔大学聂建云教授交流后,想尝试采用learning to rank中的ranking svm算法试试效果。