Skip to content

Files

Latest commit

3563b4f · Dec 1, 2020

History

History
This branch is 284 commits behind PaddlePaddle/PaddleHub:release/v2.2.

lda_novel

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Nov 20, 2020
Nov 20, 2020
Nov 20, 2020
Dec 1, 2020
Nov 20, 2020
Dec 1, 2020
Dec 1, 2020
Nov 20, 2020
Nov 20, 2020
Dec 1, 2020
Dec 1, 2020
Nov 20, 2020
Dec 1, 2020

模型概述

主题模型(Topic Model)是以无监督学习的方式对文档的隐含语义结构进行聚类的统计模型,其中LDA(Latent Dirichlet Allocation)算法是主题模型的一种。LDA根据对词的共现信息的分析,拟合出词-文档-主题的分布,从而将词、文本映射到一个语义空间中。本Module基于的数据集为百度自建的小说领域数据集。


更多详情请参考LDA论文

注:该Module由第三方开发者DesmonDay贡献。

LDA模型 API 说明

cal_doc_distance(doc_text1, doc_text2)

用于计算两个输入文档之间的距离,包括Jensen-Shannon divergence(JS散度)、Hellinger Distance(海林格距离)。

参数

  • doc_text1(str): 输入的第一个文档。
  • doc_text2(str): 输入的第二个文档。

返回

cal_doc_keywords_similarity(document, top_k=10)

用于查找输入文档的前k个关键词及对应的与原文档的相似度。

参数

  • document(str): 输入文档。
  • top_k(int): 查找输入文档的前k个关键词。

返回

  • results(list): 包含每个关键词以及对应的与原文档的相似度。其中,list的基本元素为dict,dict的key为关键词,value为对应的与原文档的相似度。

cal_query_doc_similarity(query, document)

用于计算短文档与长文档之间的相似度。

参数

  • query(str): 输入的短文档。
  • document(str): 输入的长文档。

返回

  • lda_sim(float): 返回短文档与长文档之间的相似度。

infer_doc_topic_distribution(document)

用于推理出文档的主题分布。

参数

  • document(str): 输入文档。

返回

  • results(list): 包含主题分布下各个主题ID和对应的概率分布。其中,list的基本元素为dict,dict的key为主题ID,value为各个主题ID对应的概率。

show_topic_keywords(topic_id, k=10)

用于展示出每个主题下对应的关键词,可配合推理主题分布的API使用。

参数

  • topic_id(int): 主题ID。
  • k(int): 需要知道对应主题的前k个关键词。

返回

  • results(dict): 返回对应文档的前k个关键词,以及各个关键词在文档中的出现概率。

代码示例

这里展示部分API的使用示例。

import paddlehub as hub

lda_novel = hub.Module(name="lda_novel")
jsd, hd = lda_novel.cal_doc_distance(doc_text1="老人幸福地看着自己的儿子,露出了欣慰的笑容。", doc_text2="老奶奶看着自己的儿子,幸福地笑了。")
# jsd = 0.01292, hd = 0.11893

lda_sim = lda_novel.cal_query_doc_similarity(query='亲孙女', document='老人激动地打量着面前的女孩,似乎找到了自己的亲孙女一般,双手止不住地颤抖着。')
# LDA similarity = 0.0

results = lda_novel.cal_doc_keywords_similarity('百度是全球最大的中文搜索引擎、致力于让网民更便捷地获取信息,找到所求。百度超过千亿的中文网页数据库,可以瞬间找到相关的搜索结果。')
# [{'word': '信息', 'similarity': 0.014140977159719738},
#  {'word': '找到', 'similarity': 0.012251022010382823},
#  {'word': '搜索', 'similarity': 0.004262275169349261},
#  {'word': '网页', 'similarity': 0.0026937499565468327},
#  {'word': '百度', 'similarity': 0.0021199508577209015},
#  {'word': '全球', 'similarity': 0.0010464078137351785},
#  {'word': '中文', 'similarity': 0.0009866259107630141},
#  {'word': '瞬间', 'similarity': 0.0009262589016537221},
#  {'word': '超过', 'similarity': 0.0008362863020592123},
#  {'word': '相关', 'similarity': 0.000793663877590302}]

results = lda_novel.infer_doc_topic_distribution("妈妈告诉女儿,今天爸爸过生日,放学后要早点回家一起庆祝")
# [{'topic id': 0, 'distribution': 0.7166666666666667},
#  {'topic id': 64, 'distribution': 0.11666666666666667},
#  {'topic id': 125, 'distribution': 0.020833333333333332},
#  {'topic id': 131, 'distribution': 0.016666666666666666},
#  {'topic id': 137, 'distribution': 0.016666666666666666}, ...]

keywords = lda_novel.show_topic_keywords(topic_id=0)
# {'妈妈': 0.36114392028319225,
#  '爸爸': 0.18456064543161096,
#  '女儿': 0.03591842787260316,
#  '孩子': 0.01567368390197123,
#  '家里': 0.014277018999815379,
#  '回家': 0.013514888275429099,
#  '回来': 0.013275213681108526,
#  '爸妈': 0.007931677222119656,
#  '告诉': 0.006841933742906693,
#  '父母': 0.00627464639375944}

查看代码

https://github.com/baidu/Familia

依赖

paddlepaddle >= 1.8.2

paddlehub >= 1.8.0

更新历史

  • 1.0.0

    初始发布

  • 1.0.1

    修复因为return的bug导致的NoneType错误

  • 1.0.2

    修复由于Windowsgbk编码导致的问题