Skip to content

Commit

Permalink
fix textrank and fix pip
Browse files Browse the repository at this point in the history
  • Loading branch information
moyongzhuo committed May 14, 2020
1 parent 7fd835f commit 937bfa7
Show file tree
Hide file tree
Showing 10 changed files with 131 additions and 66 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ doc = """PageRank算法简介。" \
"具体说来就是,PageRank有两个基本思想,也可以说是假设。 " \
"即数量假设:一个网页被越多的其他页面链接,就越重)。 " \
"质量假设:一个网页越是被高质量的网页链接,就越重要。 " \
"总的来说就是一句话,从全局角度考虑,获取重要的信。 """
"总的来说就是一句话,从全局角度考虑,获取重要的信。 """.replace(" ", "").replace('"', '')

# fs可以填其中一个或几个 text_pronouns, text_teaser, mmr, text_rank, lead3, lda, lsi, nmf
res_score = text_summarize(doc, fs=[text_pronouns, text_teaser, mmr, text_rank, lead3, lda, lsi, nmf])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,9 @@ def summarize(self, text, num=6):
sentences_score = {}
for cor in corpus:
tuple_cor = tuple(cor)
sentences_score[sentences[count]] = most_important_docs[tuple_cor]
count += 1
if tuple_cor in most_important_docs:
sentences_score[sentences[count]] = most_important_docs[tuple_cor]
count += 1
# 最小句子数
num_min = min(num, len(sentences))
score_sen = [(rc[1], rc[0]) for rc in sorted(sentences_score.items(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,10 @@ def text_summarize(doc, num=None, multi_process=False,
fs=[text_pronouns, text_teaser, mmr, text_rank, lead3, lda, lsi, nmf]):
"""
抽取式文本摘要, 汇总, 使用几个方法
:param doc:
:param num:
:param multi_process:
:return:
:param doc: str or list, 用户输入
:param num: int, 返回的句子个数
:param multi_process: bool, 是否使用多进程
:return: res_score: list, sentences of doc with score
"""
if type(doc)==list:
doc = "。".join(doc)
Expand Down Expand Up @@ -119,10 +119,10 @@ def text_summarize(doc, num=None, multi_process=False,
"具体说来就是,PageRank有两个基本思想,也可以说是假设。 " \
"即数量假设:一个网页被越多的其他页面链接,就越重)。 " \
"质量假设:一个网页越是被高质量的网页链接,就越重要。 " \
"总的来说就是一句话,从全局角度考虑,获取重要的信。 """
"总的来说就是一句话,从全局角度考虑,获取重要的信。 """.replace(" ", "").replace('"', '')

# fs可以填其中一个或几个 text_pronouns, text_teaser, mmr, text_rank, lead3, lda, lsi, nmf
res_score = text_summarize(doc, fs=[text_pronouns, text_teaser, mmr, text_rank, lead3, lda, lsi, nmf])
res_score = text_summarize(doc, multi_process=True, fs=[text_pronouns, text_teaser, mmr, text_rank, lead3, lda, lsi, nmf])
for rs in res_score:
print(rs)

10 changes: 5 additions & 5 deletions nlg_yongzhuo/text_summarization/readme_summary.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# nlg-yongzhuo


# nlg_yongzhuo(代码主体,未完待续...)
# nlg_yongzhuo支持的算法
- text_summary
- nous_base
- keyword
Expand All @@ -19,9 +19,9 @@
- NMF


# run(运行, 以textrank为例)
- 1. 直接进入目录文件运行即可, 例如进入:nlg_yongzhuo/text_summary/graph_base/textrank/
- 2. 运行: python textrank_textrank4zh.py
# run(运行, 易textrank为例)
- 1. 进入目录(cd):nlg_yongzhuo/text_summary/graph_base/textrank/
- 2. 运行: python textrank_textrank4zh.py


*希望对你有所帮助!
* 希望对你有所帮助!
12 changes: 6 additions & 6 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
gensim==3.7.1
jieba==0.39
numpy==1.16.2
pandas==0.23.4
scikit-learn==0.19.1
tqdm==4.31.1
passlib==1.7.1
textrank4zh==0.3
pandas==0.23.4
passlib==1.7.1
numpy==1.16.2
gensim==3.7.1
tqdm==4.31.1
jieba==0.39
7 changes: 4 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# !/usr/bin/python
# @time :2019/11/01 10:17
# @author :Mo
# @function :setup of Keras-TextClassification
# @function :setup of nlg-yongzhuo
# @codes :copy reference from https://github.com/TianWenQAQ/Kashgari/blob/master/setup.py


Expand All @@ -13,7 +13,8 @@

# Package meta-data.
NAME = 'nlg-yongzhuo'
DESCRIPTION = 'nlg of keras'
DESCRIPTION = 'text-summarization of extractive, ' \
'include text_pronouns, text_teaser, mmr, text_rank, lead3, lda, lsi, nmf'
URL = 'https://github.com/yongzhuo/nlg-yongzhuo'
EMAIL = '[email protected]'
AUTHOR = 'yongzhuo'
Expand All @@ -25,7 +26,7 @@
install_requires = list(map(lambda x: x.strip(), reader.readlines()))

setup(name=NAME,
version='0.0.3',
version='0.0.4',
description=DESCRIPTION,
long_description=long_description,
long_description_content_type="text/markdown",
Expand Down
3 changes: 2 additions & 1 deletion test/tet_feature_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
# @author : Mo
# @function:


from nlg_yongzhuo import word_significance
from nlg_yongzhuo import text_pronouns
from nlg_yongzhuo import text_teaser
Expand Down Expand Up @@ -41,4 +42,4 @@
sums_mmr = mmr.summarize(docs, num=6)
print("mmr:")
for sum_ in sums_mmr:
print(sum_)
print(sum_)
66 changes: 52 additions & 14 deletions test/tet_graph_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,57 @@
from nlg_yongzhuo import text_rank


docs ="和投票目标的等级来决定新的等级.简单的说。" \
"是上世纪90年代末提出的一种计算网页权重的算法!" \
"当时,互联网技术突飞猛进,各种网页网站爆炸式增长。" \
"业界急需一种相对比较准确的网页重要性计算方法。" \
"是人们能够从海量互联网世界中找出自己需要的信息。" \
"百度百科如是介绍他的思想:PageRank通过网络浩瀚的超链接关系来确定一个页面的等级。" \
"Google把从A页面到B页面的链接解释为A页面给B页面投票。" \
"Google根据投票来源甚至来源的来源,即链接到A页面的页面。" \
"一个高等级的页面可以使其他低等级页面的等级提升。" \
"具体说来就是,PageRank有两个基本思想,也可以说是假设。" \
"即数量假设:一个网页被越多的其他页面链接,就越重)。" \
"质量假设:一个网页越是被高质量的网页链接,就越重要。" \
"总的来说就是一句话,从全局角度考虑,获取重要的信。"
docs = """AutoML机器学习自动化与NNI
原创大漠帝国 最后发布于2020-02-29 19:46:21 阅读数 221 收藏
编辑 展开
一、AutoML简介
        AutoML(Automated Machine Learning),中文可以翻译为自动机器学习,我比较喜欢叫它“机器学习自动化”,更加接近人们所津津乐道的通用人工智能吧。
        人们一直有个朴素的想法,可以有一个通用的AI系统,它包罗万象,能够对整个宇宙进行建模,对我们遇到的一切问题,都给出解决办法。这在幻想书籍中数见不新鲜,比如漫威电影中钢铁侠的人工智能贾维斯,又比如说芯片系统流派的网络小说。不过这些大概可以算是人工智能的高级模式了吧,人们还是很宽容的,没有期待一步到位。
       现在算是AI的高潮期,尤其是以深度学习DL为代表的当代人工智能技术的成功,给以人类以无限的想象空间。那么,降低要求,以DL技术为基础,去开发一个低配版通用人工智能,也是可以的吧。所以,随着人工智能的火爆,2014年以来,AutoML也越发火热起来。
       深度学习时代的鲜明特征是大数据量、深层次网络、特征学习与端到端学习。我们希望能够从数据一步得到模型,而不需要其他的什么人为参与过程。如果再加上语音助手什么的,或许我们就能达到浅层次通用人工智能的目标呢。在深度学习DL模型架构难以取得更大突破的时候,给它再开辟一条道路呢。一如蒸馏模型,又如MobileNet。
        工程化和应用级市场,更能带来意想不到的惊喜。这一点,从近年来微软开源的AutoML工具NNI大受欢迎中,可以管中窥豹。
 
二、AutoML特性
        从比较出名的开源Auto平台、互联网大厂AutoML云产品,以及AI公司的AutoML软件来看,一般包括特征工程(FE,Auto feature engine)、神经网络搜索(NAS,Neural Architecture Search) 和超参数优化(HPO,Hyper-parameter optimization) 等功能,如下图所示:
        可能还存在其他一些小功能,如数据增强(几何,颜色), 激活函数(swish,Hybrid DNN), 归一化方法(Switchable Normalization, BN, IN, LN, GN), 优化方法(Neural Optimizer Search, sgd,rmsprop,adam, 衰减, 函数的组合), 优化目标(AM-LFS, Learning to teach with dynamic loss functions), 模型剪枝(AMC), 模型量化(HAQ), 部署上线等。
        AutoML优点:可用于传统机器学习、图像等较成熟领域,自动化摒弃了人为因素的干扰、增强泛化性;
                     缺点:消耗资源大、优化方法可能达不到经验模型甚至是严重偏向。
 
三、 NNI
        NNI (Neural Network Intelligence,[翻译为神经网络智能?]) 是微软开源的自动机器学习(AutoML)的Python工具包。NNI 通过 nni_manager模块 等管理 AutoML 的 Experiment (实验),调度并运行各种调优算法生成的 Trial (尝试) 任务,来完成搜索最优神经网络架构、超参数等。同时支持本机,远程服务器,单机,多机,OpenPAI,Kubeflow,K8S和其它云服务等训练环境。
        对比其他开源项目,或大公司产品可以发现,NNI支持的神经网络结构搜索、超参数优化等调优算法更多,功能最强大。
        以我的使用体验来看,NNI更像一个黑盒,浅度用户使用可能比较舒服。使用nni的SDK可以完美嵌入自己的网络结构进行超参数优化,详情如下:
        超参数优化需要定义搜索空间search_space.json,NNI配置config.yml,以及主程序调用main.py函数。
        此外,NNI还需要用特定命令行启动,自由度似乎不太够。
希望对你有所帮助!
————————————————
版权声明:本文为CSDN博主「大漠帝国」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rensihui/article/details/104578756"""


sums_textrank_textrank4zh = text_rank.summarize(docs, num=6, model_type="textrank_textrank4zh")
print("textrank_textrank4zh:")
for sum_ in sums_textrank_textrank4zh:
Expand All @@ -31,7 +69,7 @@
print(sum_)

# gensim自带的textrank只支持英文, 分隔符为". ", "? ", "! "
sums_textrank_gensim = text_rank.summarize(docs, num=6, model_type="textrank_gensim")
sums_textrank_gensim = text_rank.summarize(docs, num=100, model_type="textrank_gensim")
print("textrank_gensim:")
for sum_ in sums_textrank_gensim:
print(sum_)
18 changes: 3 additions & 15 deletions test/tet_text_summarize.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,24 @@
# -*- coding: utf-8 -*-
# @time : 2020/3/17 20:59
# @author : Mo
# @function:
# @function: test megre



from nlg_yongzhuo import *


doc = """PageRank算法简介。" \
"是上世纪90年代末提出的一种计算网页权重的算法! " \
"当时,互联网技术突飞猛进,各种网页网站爆炸式增长。 " \
"业界急需一种相对比较准确的网页重要性计算方法。 " \
"是人们能够从海量互联网世界中找出自己需要的信息。 " \
"百度百科如是介绍他的思想:PageRank通过网络浩瀚的超链接关系来确定一个页面的等级。 " \
doc = """PageRank算法简介。是上世纪90年代末提出的一种计算网页权重的算法! 当时,互联网技术突飞猛进,各种网页网站爆炸式增长。 业界急需一种相对比较准确的网页重要性计算方法。是人们能够从海量互联网世界中找出自己需要的信息。 百度百科如是介绍他的思想:PageRank通过网络浩瀚的超链接关系来确定一个页面的等级。 " \
"Google把从A页面到B页面的链接解释为A页面给B页面投票。 " \
"Google根据投票来源甚至来源的来源,即链接到A页面的页面。 " \
"和投票目标的等级来决定新的等级。简单的说, " \
"一个高等级的页面可以使其他低等级页面的等级提升。 " \
"具体说来就是,PageRank有两个基本思想,也可以说是假设。 " \
"即数量假设:一个网页被越多的其他页面链接,就越重)。 " \
"质量假设:一个网页越是被高质量的网页链接,就越重要。 " \
"总的来说就是一句话,从全局角度考虑,获取重要的信。 """
"总的来说就是一句话,从全局角度考虑,获取重要的信。 """.replace(" ", "").replace('"', '')

# fs可以填其中一个或几个 text_pronouns, text_teaser, mmr, text_rank, lead3, lda, lsi, nmf
res_score = text_summarize(doc, fs=[text_pronouns, text_teaser, mmr, text_rank, lead3, lda, lsi, nmf])
for rs in res_score:
print(rs)







62 changes: 49 additions & 13 deletions test/tet_topic_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,55 @@
from nlg_yongzhuo import lda, lsi, nmf


docs ="和投票目标的等级来决定新的等级.简单的说。" \
"是上世纪90年代末提出的一种计算网页权重的算法!" \
"当时,互联网技术突飞猛进,各种网页网站爆炸式增长。" \
"业界急需一种相对比较准确的网页重要性计算方法。" \
"是人们能够从海量互联网世界中找出自己需要的信息。" \
"百度百科如是介绍他的思想:PageRank通过网络浩瀚的超链接关系来确定一个页面的等级。" \
"Google把从A页面到B页面的链接解释为A页面给B页面投票。" \
"Google根据投票来源甚至来源的来源,即链接到A页面的页面。" \
"一个高等级的页面可以使其他低等级页面的等级提升。" \
"具体说来就是,PageRank有两个基本思想,也可以说是假设。" \
"即数量假设:一个网页被越多的其他页面链接,就越重)。" \
"质量假设:一个网页越是被高质量的网页链接,就越重要。" \
"总的来说就是一句话,从全局角度考虑,获取重要的信。"
docs = """AutoML机器学习自动化与NNI
原创大漠帝国 最后发布于2020-02-29 19:46:21 阅读数 221 收藏
编辑 展开
一、AutoML简介
        AutoML(Automated Machine Learning),中文可以翻译为自动机器学习,我比较喜欢叫它“机器学习自动化”,更加接近人们所津津乐道的通用人工智能吧。
        人们一直有个朴素的想法,可以有一个通用的AI系统,它包罗万象,能够对整个宇宙进行建模,对我们遇到的一切问题,都给出解决办法。这在幻想书籍中数见不新鲜,比如漫威电影中钢铁侠的人工智能贾维斯,又比如说芯片系统流派的网络小说。不过这些大概可以算是人工智能的高级模式了吧,人们还是很宽容的,没有期待一步到位。
       现在算是AI的高潮期,尤其是以深度学习DL为代表的当代人工智能技术的成功,给以人类以无限的想象空间。那么,降低要求,以DL技术为基础,去开发一个低配版通用人工智能,也是可以的吧。所以,随着人工智能的火爆,2014年以来,AutoML也越发火热起来。
       深度学习时代的鲜明特征是大数据量、深层次网络、特征学习与端到端学习。我们希望能够从数据一步得到模型,而不需要其他的什么人为参与过程。如果再加上语音助手什么的,或许我们就能达到浅层次通用人工智能的目标呢。在深度学习DL模型架构难以取得更大突破的时候,给它再开辟一条道路呢。一如蒸馏模型,又如MobileNet。
        工程化和应用级市场,更能带来意想不到的惊喜。这一点,从近年来微软开源的AutoML工具NNI大受欢迎中,可以管中窥豹。
 
二、AutoML特性
        从比较出名的开源Auto平台、互联网大厂AutoML云产品,以及AI公司的AutoML软件来看,一般包括特征工程(FE,Auto feature engine)、神经网络搜索(NAS,Neural Architecture Search) 和超参数优化(HPO,Hyper-parameter optimization) 等功能,如下图所示:
        可能还存在其他一些小功能,如数据增强(几何,颜色), 激活函数(swish,Hybrid DNN), 归一化方法(Switchable Normalization, BN, IN, LN, GN), 优化方法(Neural Optimizer Search, sgd,rmsprop,adam, 衰减, 函数的组合), 优化目标(AM-LFS, Learning to teach with dynamic loss functions), 模型剪枝(AMC), 模型量化(HAQ), 部署上线等。
        AutoML优点:可用于传统机器学习、图像等较成熟领域,自动化摒弃了人为因素的干扰、增强泛化性;
                     缺点:消耗资源大、优化方法可能达不到经验模型甚至是严重偏向。
 
三、 NNI
        NNI (Neural Network Intelligence,[翻译为神经网络智能?]) 是微软开源的自动机器学习(AutoML)的Python工具包。NNI 通过 nni_manager模块 等管理 AutoML 的 Experiment (实验),调度并运行各种调优算法生成的 Trial (尝试) 任务,来完成搜索最优神经网络架构、超参数等。同时支持本机,远程服务器,单机,多机,OpenPAI,Kubeflow,K8S和其它云服务等训练环境。
        对比其他开源项目,或大公司产品可以发现,NNI支持的神经网络结构搜索、超参数优化等调优算法更多,功能最强大。
        以我的使用体验来看,NNI更像一个黑盒,浅度用户使用可能比较舒服。使用nni的SDK可以完美嵌入自己的网络结构进行超参数优化,详情如下:
        超参数优化需要定义搜索空间search_space.json,NNI配置config.yml,以及主程序调用main.py函数。
        此外,NNI还需要用特定命令行启动,自由度似乎不太够。
希望对你有所帮助!
————————————————
版权声明:本文为CSDN博主「大漠帝国」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rensihui/article/details/104578756""".replace(" ", "").replace('"', '')

sums_nmf = nmf.summarize(docs, num=6, topic_min=8)
print("nmf:")
Expand Down

0 comments on commit 937bfa7

Please sign in to comment.