#数据结构#构建一个符合当前业务场景的专

#数据结构#构建一个符合当前业务场景的专

我们使用CSDN内部通用8W词表去做特殊业务场景的主题抽取,能够好才怪呢!于是,我竭力说服众人去一个事:为这个项目整理一个专门的词表(至于说为何要说服他们,嘿嘿,不说服他们,谁帮我进行人工整理O(∩_∩)O~)。

于是,我在G的技术博文中,过滤出针对这个业务场景的76W篇文章,然后进行常规的分词处理,最终处理出一份近8W词并且带文档频的词表。

其实,在特定的业务场景下,其总词数也是远远低于通用总词数的。随后,我把任务下发到8个人手里,哈哈,没人领了1W词回去(当然也包括我),进行人工筛词。

在众人看得眼花缭乱之后,终于整理出一份5W词左右的词表。然后替换词表之后,重新进行结果测试。

从个人抽样结果来看,效果真心好了不止一筹。其实我们仔细分析一下会发现,替换一个符合业务场景的词表主要体现在以下两个方面:一是筛除了很多的干扰词;二是TF-IDF模型中,符合业务的真实词分布相当重要。

除此之外,需要提一下的就是,我们在进行人工筛词的时候,适当的看中名词与动词,而形容词与副词之类的,其实大部分情况下是可以筛除掉的。

然后,在考虑词上下文的时候,由于CSDN技术博文很难像正规论文那样,通过类似文章头部尾部来体现部分词的加权,但是例如文章标题其实是可以考虑加权的。

不管文章是不是一篇正规文章,标题大部分时候都是主题高度凝练的体现。

TextRank算法关于TextRank算法,可能了解的人稍微的少一点。它是一种非监督式的主题抽取算法,即它可以不依赖于其他语料,直接从文本中抽取主题词。

说到TextRank算法,我们先来说一说PageRank算法。PageRank算法想必不少人都熟悉,它是一种很有名的网页排名算法。

PageRank的核心思想:一个网页的重要程度取决于链接到它的网页的数量以及这些网页的重要程度。即每一个网页的重要程度都是通过其他网页来体现的,而它的重要程度又反过来影响它外链中的网页重要程度。

而TextRank算法则是借用了PageRank的核心思想,其把词看做是一个网页,而词与词之间的联系则通过词之间的距离来表示,任何一个词与其左右为5的词都是类似外链关系的。通过不断的权重计算,并且移动词排序,重新迭代计算权重,最终达到一定的收敛即停止。

算法实践:

我在MapReduce中跑了一批数据,其实其效果,我个人认为还行,特别是使用专用词表进行杂词过滤之后,效果还是可以的。

这是一种比较容易实现,并且相对比较简单的主题抽取算法。所以,如果在主题抽取方面不愿意投入过多资源的,可以适当的考虑。

但是,我们需要注意的是,由于它的实现机制,一方面它如TF-IDF算法那样,在富文本领域表现较佳,并且词频对于其结果影响较大;另外一方面就是由于每次它都需要进行迭代计算,所以效率上会有所降低,特别是迭代次数越多的时候。

可以作为一种备用选择吧。

主题模型先简单的说一下LDA的核心思想:我们认为每一个文档Doc都是由多个主题Topic组成,而每一个主题Topic由多个词Word组成。

通过对语料库D中所有的文档d进行分词或者抽词处理之后,通过模型训练(具体的训练过程我就不写了,有点复杂,而且我不一定能够写清楚),我们得到两个概率矩阵:一是每一个Doc对应K个Topic的概率;二是每一个Topic对应N个词组成的词表的概率。

有了这两个概率矩阵,那么,我们需要的是每一个Doc对应的Word概率,然后找M个概率最大的词作为关键词。有Topic作为中间桥梁,那还有什么问题么?

并且,从这里,我们会发现,通过LDA模型进行关键词查找,其关键词不再依赖于词是否出现在该文档中,这点与传统的基于统计模型的主题抽取方式是不一样的。

算法实践:

在写这篇文章的时候,我们刚把LDA结果跑出来,词表大约5W左右,K值设置的大概是,迭代次数为左右。出来的结果简直惨不忍睹。

具体的方式也可以稍微的说一说,我们使用了SparkMLlib上的LDA实现。

(1)DistributedLDAModel类中有describeTopics方法,可以获取到每一个Topic对应的词Word概率矩阵;

(2)DistributedLDAModel类的topTopicsPerDocument方法可以获取到每一个Doc对应的K个Topic概率矩阵;

(3)有了如上两个矩阵,求Doc到Word的概率矩阵不是手到擒来?

(4)对于新文本,DistributedLDAModel类同样提供了topicDistributions方法进行新文档对应于K个Topic的概率预测;

参数肯定还是会继续调整的,但从我个人的角度上来说,我们目前的业务场景并不是很适合LDA算法模型,首先个人认为K值会比较大,因为K值的设置需要尽量的跟实际情况吻合,而我们的业务场景恰巧是主题分散的类型。

其次,LDA主题模型是三层概率模型,通过中间层进行桥接,概率映射的精度会进一步下降,所以,个人认为在富文本的场景下,直接的统计模型不会输于LDA。

再其次感觉就是LDA对干扰词相当的敏感,当然,也或许是我们没有用好。总之,我们会继续的进行探索。

TF-IDF与TextRank的融合我个人还尝试使用TF-IDF的值对TextRank权重进行修正,目前最简单的尝试就是直接类似TF与IDF的融合,直接进行累乘,其实效果还OK啦。

不过,通过与祝威廉的交流,他认为一个比较理性的融合方式是,如果我们有足够的样本,我们可以通过类似的线性回归的方式,来确定两种算法的结果权重,来计算最终的词权重值。

这个有机会,有人力物力的话,真心可以考虑试试。









































北京治疗白癜风哪家医院效果好
白癜风治疗最新方法



转载请注明:http://www.92nongye.com/ksfc/204612773.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了