本发明涉及网站社区内容推荐技术,尤其涉及一种基于LDA(隐含狄利克雷分布)主题模型的内容推荐方法。
背景技术:
现有的推荐系统多基于协同推荐算法,例如基于标签的用户协同过滤的内容推荐方法(基于标签的用户协同过滤内容推荐方法及装置,申请号2016104907106),但是在现有阶段的推荐算法并没有解决标签的问题,仍然需要人为地输入标签。同时基于内容的推荐算法在效率上仍然收到一些限制,在时效性上有所缺陷。针对这些难点以及网络论坛内容推送的需要,自动提取主题关键字并进行相关内容推送具有更多的优势。
技术实现要素:
本发明要解决的技术问题在于针对现有技术中的缺陷,提供一种基于LDA主题模型的内容推荐方法。
本发明解决其技术问题所采用的技术方案是:一种基于LDA主题模型的内容推荐方法,包括以下步骤:
1)根据需求选择网站社区话题数据建立中文语料库;所述网站社区话题数据由该话题下的子话题数据组成;
2)使用LDA主题模型训练文档集,建立多个一级主题LDA模型;
2.1)通过子话题原始数据的人工标签信息,以最小集合的大小确定主题数目;
2.2)针对每一个子话题,使用步骤1)中文语料库中的文档集训练Gensim的主题模型;
2.3)根据主题模型的训练结果,以每个主题的构成的前设定个数的高比重词语作为该主题的主题关键词;
3)接收用户输入信息,针对用户输入信息,通过一级主题LDA模型生成主题词组,应用于该输入和用户,应用步骤如下:
3.1)当用户在论坛中发布帖子时,默认让用户选择论坛中事先设置的一级话题标签,获取帖子和一级话题标签之后运用对应的主题模型进行主题词组提取;
3.2)如果用户针对该发布的帖子,还输入了若干标签,那么将用户输入标签和模型生成的主题词作为最终的主题词组;
3.3)根据最终的主题词组更新用户的标签;
4)根据用户的标签进行匹配推荐:
根据用户的标签,按照词语权重依次减少的顺序筛选相关内容进行推荐。
按上述方案,所述步骤1)中建立中文语料库,包含以下步骤:
1)使用爬虫,获取所选择网站社区话题子话题的数据,各一百个帖子;
2)针对每一子话题,使用结巴分词,过滤停用词以及回答字数较短的回答,每一问题作为文档原始数据;
3)针对每一子话题,通过Gensim的dictionary工具建立词向量以及文档模型建立文档集合。
按上述方案,所述步骤2.3)中设定个数为3个至5个。
按上述方案,所述步骤3.2)中最终的主题词组顺序为用户输入标签在先,模型生成的主题词组在后。
本发明产生的有益效果是:
1.本发明建立了多个一级主题的LDA主题模型,借用了决策树中的小领域专家概念,能够减少由于单一主题模型过大导致的加载和应用较慢的情况。
2.本发明通过后台LDA主题模型生成标签,并通过计算排序选择设定数量的标签,同时根据标签来推荐帖子,这样减少了计算的代价,而且也提升了推荐的精准度。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明实施例的使用知乎健康话题数据建立中文语料库图的方法流程图;
图2是本发明实施例的建立多个一级主题LDA模型的方法流程图;
图3是本发明实施例的根据用户输入应用模型生成主题词组的方法流程图;
图4是本发明实施例的对用户的主题词组进行匹配推荐的方法流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
如图1所示,一种基于LDA主题模型的内容推荐方法,本实施例基于知乎健康话题数据,具体如下:
一、使用知乎健康话题数据建立中文语料库,包含以下步骤:
1)建立知乎账号,用于信息获取;
2)使用爬虫,获取所有健康子话题的数据,各一百个问题;本实施例中使用BeautifulSoup,request实现知乎爬虫;通过https://www.zhihu.com/topic/19550937/organize/entire#anchor-children-topic获取所有一级子话题的连接,通过每一个连接获取100个问题的数据。数据包括问题的标题,描述,标签(人为标注的),前五十个回答;然后将所有信息保存至数据库(添加对应的子话题标签),使用Sqlalchemy封装每一个问题为一个数据库行对象;
3)针对每一子话题,使用结巴分词,过滤停用词以及回答较短的回答,每一问题作为文档原始数据;
a)从数据库中按照子话题提取该话题下的所有原始数据;
b)针对每一个问题,如果当前问题的回答字数小于三十字,则忽略当前回答;
c)针对每一个问题,合并所有已分词的回答作为文档原始数据;
4)针对每一子话题,通过Gensim的dictionary或word2vec工具建立词向量以及文档模型建立文档集合;
a)针对上一步产生的文档原始数据,使用dictionary.doc2bow函数建立corpus;
b)保存corpus以及dictionary到本地,便于以后使用;
二、使用LDA主题模型训练文档集,建立多个一级主题LDA模型。如图2所示,使用LDA主题模型训练文档集,建立多个一级主题LDA模型,包含以下步骤:
1)通过子话题原始数据的人工标签信息,以最小集合的大小确定主题数目;从数据库中获取当前一级话题的所有标签信息,进行去重计数,确定主题模型的主题数目k;
2)针对每一个子话题,使用步骤一中生成的文档集训练Gensim的主题模型;调用Gensim的模型库中的LdaModel函数建立模型;
3)针对主题模型结果,以每个主题的构成的前五个高比重词语作为该主题的主题关键词;
使用LDA主题模型训练文档集,建立多个一级主题LDA模型,包含以下步骤:
三、针对用户输入,应用模型生成主题词组,应用于该输入和用户。
如图3,针对用户输入,应用模型生成主题词组,应用于该输入和用户,包含以下步骤:
1)用户在论坛中输入一段文字以及选择一级话题标签,后台获取之后运用对应的主题模型进行主题词组提取;
2)如果用户针对该段文字,也输入了一些标签,那么结合用户输入标签和模型生成的主题词作为最终的主题词组;
3)同时更新用户的标签;
从主题词组中取出前n个(n可以设定,例如n=5)主题词,这n个主题词将用于更新用户标签,如果这n个主题词有与用户当前标签重合的,那么增加该标签的权重,计算方式为:
其中,s(m)表示当期第m个用户标签的得分,Ti(m)表示当前m标签第i次出现的得分,值为1;
分母表示所有标签的总分,k表示当前标签的序号,范围从0~4,共五个标签。
四、对用户的主题词组进行匹配推荐。
如图4,对用户的主题词组进行匹配推荐,包含以下步骤:
1)根据用户的主题词组,按照五个词语权重依次减少的顺序筛选相关内容进行推荐;依次筛选搜索数据库中包含用户主题词的相关内容,作为推送的最终数据。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。