最新版本:安装并运行 textsum(文章自动摘要)
优采云 发布时间: 2022-11-25 04:10最新版本:安装并运行 textsum(文章自动摘要)
前言
本文写于 2017 年春季,根据其他人的反馈:本文中使用的 TensorFlow 1.x github 的 textsum 代码不再维护,FAQ 中反映的错误尚未修复,因此我暂时不会继续维护本文的代码部分。目前,textsum算法在各个方面都不如基于BERT变压器结构(2018)的算法,无论是学习还是比较,我不建议使用textsum。
另外,本文还有一个bug,解码***是训练后生成的文件。 ref*** 是供参考的训练标签(文章说错了)。感谢知乎用户“小燕”指出文章中的错误。
这里不讨论算法的问题,但这里讨论如何在 Linux 上安装和运行 这个开源项目面向的是刚开始学习机器学习的读者,所以我倾向于详细(详细)写。
关于文本和的两篇文章是:
关于如何安装和运行textsum的文章是这篇文章↑
另一篇↑文章描述了如何制作自己的中文数据集,(从搜狗实验室下载数据集并清理它)。
介绍和信息
虽然这里只说“安装并运行textsum”,但我们还是要简单了解一些算法知识,当然时间可以跳过,直接ctrl+F“install”看文本。
在GitHub的TensorFlow开源项目中,基于LSTM(长短期记忆)模型的文本和,将输入的文章导入RNN(递归神经网络),并输出结果的文章摘要。
TensorFLow GitHub 上的开源文章自动汇总模型“textsum”,点击 ↓ 访问 GitHub
seq2seq mdoel 图例:模型读取输入句子“ABC”,然后输出“WXYZ”。模型在输出 () 后停止预测内容。注意!LSTM 反向读取序列,因为它在许多数据之间建立了短期依赖关系,并使优化更容易。(据我了解,进入RNN文本越晚,越容易被保留,文章开头一般会收录
更多总结全文的信息)。
图 1:我们的模型读取一个输入句子“ABC”并生成“WXYZ”作为输出句子。模型在输出句尾标记后停止进行预测。
请注意,LSTM 反向读取输入句子,因为这样做会在数据中引入许多短期依赖关系,这些依赖关系使
优化问题容易得多。
简单地说,textsum 使用的 seq2seq 模型是:
使用一个 LSTM 读取输入序列,
一次使用一个时间步长来获取输入序列的大型固定向量描述,然后使用另一个 LSTM 从该向量中提取所需的输出序列。(见上图)。
这个想法是使用一个 LSTM 读取输入序列,一次一个时间步长,以获得大的固定维向量表示,然后使用另一个 LSTM 从该向量中提取输出序列(图 1)。
顺便一提
介绍算法的论文在这里↓,你自己看
使用神经网络进行序列到序列学习.pdf
为什么 LSTM 会反向读取输入序列?堆栈溢出有更好的答案↓
NStepLSTM 和 Seq2Seq 模型然后 ctrl+F[保留]。
1. 安装并运行文本和
这里使用了 TensorFlow + Bazel(需要预先存在的 jdk 1.8)。环境
(错误通常与环境有关)。
安装 Bazel, JDK 8, TensorFlow
“JDK 8 安装”
在 Ubuntu 上安装 Bazel
记得检查你是否已经安装了JDK 8,就像我喜欢用PyCharm编写Python一样,它已经安装了。
安装 jdk1.8 的一种方法
deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
“安装巴泽尔
“
sudo apt-get update && sudo apt-get install bazel
sudo apt-get upgrade bazel
BazelBuild/Bazel←Bazel的下载地址,打开它并找到匹配的版本
等等,好像发现了什么?长野原澪?四寨蒸气恶心(°△°||)_
安装TensorFlow
建议使用Python的pip直接安装TensorFlow。建议 pip 版本大于 9.0.1
pip install tensorflow
请注意,当我运行时,我没有在运行时指定 Python 的版本,所以我的系统默认调用 Python 2 来运行这个程序。因此,如果您安装了 TensorFlow 并且未找到错误,您可能需要查看另一个版本的 Python 是否也安装了 TensorFLow。
“下载文本和代码文件夹”
在 GitHub 上下载 TensorFlow 开源项目的 textsum 模型,直接复制整个文件夹
由于GitHub没有提供下载某个文件夹的按钮,因此似乎要获取textsum,您需要下载整个TensorFlow,显然,这是傻瓜式
,我们不应该这样做。
比较 Geek 的方法是:登录某个网站(DownGit),粘贴连接,然后直接下载。
DownGit
『检查』
安装 jdk 8、bazel 和 TensorFLow 后,记得看看是否安装了,我想看看版本
java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
bazel version
Build label: 0.11.1
Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Tue May 14 07:48:23 +50148 (1520362424903)
Build timestamp: 1520362424903
Build timestamp as int: 1520362424903
>>> import tensorflow as tf
>>> tf.__version__
'1.6.0'
2. 准备工作目录
请参阅
README.md textsum 目录中的文件(这是通过上面的 GitDown 下载.zip的文本总和)来安装此处提供的步骤并构建工作目录。
当然,这个副本 README.md ←你已经看到的,就在GitHub textsum的那个页面下面。
先找一个合适的地方,设置一个不受干扰的工作目录,像我一样
cd Videos # 刚好在资源管理器有按钮可以直接去
mkdir Yonv_CWD # Current Working Directory,Yonv这个名字是我随便起的
cd Yonv_CWD
#!注意,这里新建一个空的文件(注意不是文件夹而是空文件)
# WORKSPACE 是 bazel生成工作环境所必须的一个标记
touch WORKSPACW
# 这里是放训练集的,里面待会需要放入 二进制文件training-* 和 文本文件vocab
mkdir data
# 然后,退回到原来的 Yonv_CWD,开始用 bazel 建立工作环境
cd ..
bazel build -c opt --config=cuda textsum/...
# 注意,如果你的电脑没有 CUDA (Compute Unified Device Architecture)
# 也就是没有NVIDIA 的GPU的话,这一项就没必要加了
# 注意,textsum/... 后面的三个“...”
$ bazel build -c opt textsum/...
...............
<p>
" />
INFO: Analysed 7 targets (12 packages loaded).
INFO: Found 7 targets...
INFO: Elapsed time: 2.153s, Critical Path: 0.02s
INFO: Build completed successfully, 1 total action
# 强行加上也没关系,反正它只是WARRNING
# 再者说,学C++ 的人,难道会在乎终端返回的 WARRNING?
$ bazel build -c opt --config=cuda textsum/...
...............
WARNING: Config values are not defined in any .rc file: cuda
INFO: Analysed 7 targets (12 packages loaded).
INFO: Found 7 targets...
INFO: Elapsed time: 3.325s, Critical Path: 0.04s
INFO: Build completed successfully, 4 total actions</p>
这以
蓝色选择的三个文件是 Bazel 在运行前需要的,另一个 LNK 在运行后生成,日志是我自己构建的
3. 运行 textsum3.1 以准备数据集
在从 GitHub 下载的 textsum 中,有一个用于测试的数据集,笔者称之为 toy,而这个类似 toy 的测试数据集非常小,只有 33KB,就这么说吧。
复制数据并
将YonvCWD/textsum/data中的词汇文件(反正不大)改成Yonv_CWD/data,然后将数据文件重命名为training-0(不需要)。
cd Yonv_CWD
cp testsum/data/vocab data/vocab
cp testsum/data/data data/training-0
3.1 生成自己的数据
对于文本和中文训练集的生成,可以看我的另一篇文章:
值得一提的是,为了加快计算速度,除了词汇表之外的数据集,像训练-*验证-*测试-*都是二进制的,可以使用textsum/data/convertexample.py来转换,转换代码记录在这个py文件的开场白中,摘录为↓
python data_convert_example.py \
--command binary_to_text \
--in_file data/data \
--out_file data/text_data
python data_convert_example.py \
--command text_to_binary \
--in_file data/text_data \
--out_file data/binary_data
左上角:Yonv_CWD/data 文件夹中的数据集
左下:Yonv_CWD/textsum/data文件夹,尝试使用 convertexample.py 程序在二进制和文本之间进行转换:data(二进制)→testdata(文本)→ binary_data(二进制)。
右二:打开词汇表后可以看到是词频表,其中介质是标签
右边一:转换后的test_data文件后,您可以看到标签“abstract=”和“article=”
虽然这里使用了Textsum(TOY ^_^)提供的测试数据,并且缺少数据采集和清理步骤,但我们终于可以继续了。
3.2 培训、评估、输出
根据
语句由 README.md 提供,我们有三个脚本要运行,分别是训练、评估和输出
# Run the training.
$ bazel-bin/textsum/seq2seq_attention \
--mode=train \
--article_key=article \ # 对应training-0(更名前是data文件)中的 标签"article"
--abstract_key=abstract \# 对应training-0(更名前是data文件)中的 标签"abstract"
--data_path=data/training-* \ # 这个文件是之前准备的
--vocab_path=data/vocab \
--log_root=textsum/log_root \ # 中间文件会保留在这里
--train_dir=textsum/log_root/train
# Run the eval. Try to avoid running on the same machine as training.
$ bazel-bin/textsum/seq2seq_attention \
--mode=eval \
--article_key=article \
--abstract_key=abstract \
--data_path=data/validation-* \ # 如果你只是想测试依然程序是否正常,直接复制 training-0吧
--vocab_path=data/vocab \
--log_root=textsum/log_root \
--eval_dir=textsum/log_root/eval
# Run the decode. Run it when the model is mostly converged.
$ bazel-bin/textsum/seq2seq_attention \
--mode=decode \
--article_key=article \
--abstract_key=abstract \
--data_path=data/test-* \ # 如果你只是想测试依然程序是否正常,直接复制 training-0然后改名吧
--vocab_path=data/vocab \
--log_root=textsum/log_root \
--decode_dir=textsum/log_root/decode \
--beam_size=8
如果运行成功,则其结果为:
培训科
$ bazel-bin/textsum/seq2seq_attention \
--mode=train \
--article_key=article \
--abstract_key=abstract \
--data_path=data/training-* \
--vocab_path=data/vocab \
--log_root=textsum/log_root \
--train_dir=textsum/log_root/train
WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/nn_impl.py:1346: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Future major versions of TensorFlow will allow gradients to flow
into the labels input on backprop by default.
See tf.nn.softmax_cross_entropy_with_logits_v2.
<p>
" />
WARNING:tensorflow:From /home/user/Videos/CWD/bazel-bin/textsum/seq2seq_attention.runfiles/__main__/textsum/seq2seq_attention.py:96: __init__ (from tensorflow.python.training.supervisor) is deprecated and will be removed in a future version.
Instructions for updating:
Please switch to tf.train.MonitoredTrainingSession
2018-03-19 13:55:43.347757: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
running_avg_loss: 9.001080
running_avg_loss: 8.945733
...
吃个饭回来
...
running_avg_loss: 0.000241
running_avg_loss: 0.000298</p>
评估部分(验证)。
$ bazel-bin/textsum/seq2seq_attention \
--mode=eval \
--article_key=article \
--abstract_key=abstract \
--data_path=data/validation-* \
--vocab_path=data/vocab \
--log_root=textsum/log_root \
--eval_dir=textsum/log_root/eval
running_avg_loss: 0.000611
running_avg_loss: 0.000951
running_avg_loss: 0.000459
running_avg_loss: 0.000200
...
预测部分(测试)输出部分
输出结果会在
Yonv_CWD/textsum/log_root/decode 文件夹中看到
user@debian:~/Videos/Yonv_CWD/textsum/log_root/decode$ zsh
➜ decode ls
decode1521440441 ref1521445096
➜ decode ls -al
总用量 1360
drwxr-xr-x 2 user user 4096 3月 19 22:31 .
drwxr-xr-x 5 user user 4096 3月 19 17:50 ..
-rw-r--r-- 1 user user 0 3月 19 14:20 decode1521440441
-rw-r--r-- 1 user user 647350 3月 19 17:50 decode1521445096
-rw-r--r-- 1 user user 0 3月 19 14:20 ref1521440441
-rw-r--r-- 1 user user 729342 3月 19 17:50 ref1521445096
如您所见,如果运行失败,即使输出文件,它也将为空
这
打开后文件的成功输出如下所示
由于数据集很小,输出只能是这样的
output=czechs outdrink germans in beer-guzzling stakes .
output=mexican financial markets end turbulent week .
output=abb to sell electrical explosion-proof equipment business .
output=mexican financial markets end turbulent week .
output=moslem rights group wants narcotic khat legalised .
output=abb to sell electrical explosion-proof equipment business .
output=mexican financial markets end turbulent week .
output=croatians vote in three constituencies .
如果你没有成功输出,那么你可以看看下面的“错误处理”
3.3 错误处理
如果您在运行时遇到类似的错误,那是因为您的词汇格式不正确,它应该在其中,您需要 17832:
Bad line:
...
assert vocab.CheckVocab(data.SENTENCE_START) > 0
如果在运行时遇到类似错误,这是因为数据集 training-0 的格式错误,需要 17832:
Exception in thread Thread-24809:
...
DecodeError: Error parsing message
...
MemoryError
如果你得到
运行时出现类似的错误,忽略它,没关系,相反,如果你改state_is_tuple=False,那么当TensorFlow版本大于1.0时,你会得到一个错误:
...
state_is_tuple=False
...
如果在操作过程中报告错误,则类似于(出现大型多维数组):
ValueError: Could not flatten dictionary. Key had 2 elements, but value had 1 elements. Key: [, ], value: [array([[[ 2.723167 , -1.924321 , -0.09930453, ..., -0.57662404,
-1.633333 , 5.6171 ],
[ 2.723167 , -1.924321 , -0.09930453, ..., -0.57662404,
-1.633333 , 5.6171 ],
[ 2.723167 , -1.924321 , -0.09930453, ..., -0.57662404,
-1.633333 , 5.6171 ],
...,
...,
[ 2.723167 , -1.924321 , -0.09930453, ..., -0.57662404,
-1.633333 , 5.6171 ],
[ 2.723167 , -1.924321 , -0.09930453, ..., -0.57662404,
-1.633333 , 5.6171 ],
[ 2.723167 , -1.924321 , -0.09930453, ..., -0.57662404,
-1.633333 , 5.6171 ]]], dtype=float32)].
然后是因为TensorFlow 1.0>= 的兼容性问题
只需更改 [
state_is_tuple=True] 在seq2seq_attention_model.py文件中回到 [state_is_tuple=False]](但是,许多人需要将其更改回来,因为他们想解决另一个以前的错误并更改此文件(并将其更改回来))。
yONV_CWD/textsum/seq2seq_attention_model.py
# replace [state_is_tuple=False] as [state_is_tuple=True]
他们 ↓ 也遇到了这个问题,ctrl+f[fix] 可以通过将文件中的 [state_is_tuple=True] 改回 [state_is_tuple=False] 在一行上找到解决方案。
#TextSum# - 运行解码时出错:无法展平字典。键有 2 个元素,但值有 1 个元素 ·问题 #417 ·张量流/模型
解决方案:2021年还能用的13款完全免费的Office插件整理(含功能详细介绍)
本文收录
大量大图,知乎无法左右滚动查看,可以查看原文以获得更好的阅读体验⚠️
前不久在PS/PR/AE插件合集一文下留言区许诺,采集
整理Office相关插件
结果阿旭花了几天时间才搞定——前后采集
了二十多个外挂!过滤后有10多个型号
插件非常多,每个插件收录
的功能也很多(尤其是Excel插件,通常有上百个功能),每个插件之间都会有重叠的功能。
综上所述,一篇文章肯定无法完整介绍
好在每个插件的作者基本上都在官网上做了详细的介绍。以下只是一个“简单”的介绍。如果觉得不错可以去官网了解更多
这篇文章真的有点无聊,不过也是干货。作为文员的各位还是真心推荐大家可以使用外挂,提升一下自己的武装。
▍1个Word插件
让我们先从 Word 开始。其实今天Word的很*敏*感*词*都可以直接实现,所以相应的插件功能一般都不多。
● 1.1 小恐龙官方文档排版助手
官网下载地址&安装教程:/
这是原文档排版文章中推荐的一款插件,是一款完全免费的Word/WPS排版插件:
轻松帮您解决各种文档排版问题,如轻松实现每页行数、每行字数等要求
除了以上,它还可以帮你删除所有空行,删除所有回车,删除表头横线/重排换行/中英文加空格/换行转回车/中英文标点转换/快速插入公文红头、红线、印记线、装订线、页码(中、右、外)、公文格式日期、公文常用符号等。
● 1.2 Word必备工具箱
原新浪博主ahzll开发的Word插件是一款不可多得的完全免费的Word插件
官网下载地址:/HELP/PAGE/blog_5488e3a90100u8ux.html
Word中的运行界面如下图,大致会为Word添加四类功能
各功能如上图所示:一键转换成规范文件号年份的中(英)标点符号/方括号……等众*敏*感*词*
支持穷举法解密“受保护文档”密码/支持VBA工程加解密/去除2003-2010版Word“受保护文档”密码/查看无密码VBA工程/获取受保护文档内容
● 1.3 mOffice for Word
官方网站: /
插件安装后的界面截图如下,各个功能的作用基本一目了然:
不过这款插件“未注册版对批量处理数据量有限制”。如果批处理功能用的不多,基本不影响插件的使用
▍2 Excel插件
一个好的Excel插件可以提高不少于1-2年工作经验的相关从业者的工作效率
基本上,一个 Excel 加载项收录
一两百个功能增强
● 2.1 Excel必备工具箱
官方网站: /
上面介绍的Excel Essential Toolbox和Word Essential Toolbox是同一个作者啊zll
本插件分为“免费版”和“付费版全功能版”,但其实免费版下面已经有很*敏*感*词*了!
具体的四舍五入、折算成千元、数文转换、财税子功能如下:
▲点击查看大图
其他功能如下:
▲点击查看大图
下面将以上述形式介绍Excel插件。其实也没办法。毕竟这种插件的功能太多了。
● 2.2方格
" />
官网:/home/products.aspx
这是一个带有方格正方形的特殊版本
一款非常知名的Excel插件,大部分功能免费使用,部分功能需要VIP(也可以选择一次性终身付费)
高级文本处理、数值输入、分组、数据分析、工作表、图像识别等子功能如下:
▲点击查看大图
只有DIY工具箱中的部分功能需要按量使用,比如手机三元实名认证、银行卡查询、IP归属查询、文字识别……
具体子功能如下:
有关更多付费功能,请参见下文:
● 2.3 Excel催化剂
下载地址见笔者在语雀上的帮助文档:Excel Catalyst Document语雀
目前Excel Catalyst所有功能完全免费使用,只有部分视频教程需要付费
笔者采用这种模式的原因是:这款插件比较专业,但是功能确实强大
但你不必购买付费视频教程,作者在语雀上提供了120多个图文教程!
快捷操作栏的子功能如下:
▲点击查看大图
图像相关的子函数如下:
▲点击查看大图
数据采集、查询、处理、分析子功能如下:
▲点击查看大图 ● 2.4 Excel好用宝
官方网站: /
首次使用时,需免费激活软件后方可使用。激活一次可以使用3个月,3个月后需要再次免费激活(如此循环)
部分具体子功能截图如下:
▲点击放大 ● 2.5 Excel向导
官方网站:/eling.htm
本插件收录
240多个功能,但也属于大部分免费,少数功能付费的模式:
第一部分的功能如下:
▲点击查看大图
少数标有★的功能需要注册后付费,如下图:
▲点击查看大图
还有下面这张图:
▲点击放大● 2.6 智慧办公&智慧办公
官方网站: /
未注册版对批处理数据量有限制,其他功能免费使用:
部分子功能如下:
" />
▲点击查看大图
本软件还有一个姊妹软件“智能办公”:/q.php
提供了很多批处理功能,但是一样,未注册版对批处理数据量有限制
▍3个PPT插件
PPT是一款面向设计的软件。插件更多的是提供模板或者素材。当然,也有倾向于增强PPT设计功能的插件。大家可以根据自己的能力来选择。
● 3.1 一键工具
官网:oktools.xyz/
OneKeyTools,简称OK插件,是一款完全免费开源的第三方PPT插件。其功能涵盖形状、颜色、3D、图像处理、演示辅助、表格处理、音频处理等。
该功能是为了增强PPT本身的各种编辑设计功能
显然这个插件对于PPT初学者和新手来说并不友好,不过作者在官网提供了相关的学习视频,大家可以自行寻找学习
● 3.2 Lvyh工具
官网:/yhtools/
本插件完全免费,收录
PPT转Word、字体采集
、字体导出、顶点编辑、线条编辑、形状编辑、位置分配等功能,但仅限于PPT上使用
部分功能的具体子功能如下:
▲点击查看大图 ● 3.3 PA袖珍*敏*感*词*(原PPT美化大师)
官方网站: /
从插件的名字不难看出这款插件更偏向于PPT*敏*感*词*制作。它收录
大量的*敏*感*词*、过渡和材质模板。还可以一键快速生成很多流行的PPT*敏*感*词*(比如抖音Flash等PPT)。
大部分资料免费提供或登录后即可使用,部分资料需要VIP(当前会员6个月/69年)
可以选择整体页面偏向小白的盒子版
还有一个更偏向于自行设计的专业版:
● 3.4 iSlide
iSlide是一款非常知名的PPT插件,官网地址:/download
这个插件比较卖点的是它丰富的模板库和素材库。
除去上图右上角的素材库,这些功能还是免费的:
素材库中只有插画库和图标库免费,95%的案例库、主题模板库、图标库、图表库、图片库需要VIP会员
不过在淘宝上搜索“iSlide”,价格从低到高排序,就可以买到超便宜的优惠券
▍4个其他插件
PPT精灵只支持从PPT2007到2016(也支持WPS),但是功能比较少,就不介绍了。有兴趣的可以去官网看看:/PPT/Index.htm
还有和方格的AudTool,又称审计专用版Excel工具箱,主要提供审计行业常用的功能。审核员基本都会安装这个插件,但是这个插件是收费的,免费试用期是30天。,下载地址:/home/AuditOrder.aspx
还有微信公众号“Excel Catalyst”和“EasyShu”(原EasyChart)联合打造的EasyShu。功能(颜色主题、位置校准、多图神器、图表导出、颜色选择器、数据小偷、数据标签等),想要真正领略这款插件的强大,还是要付费的。有关详细信息,您可以访问其官方网站。:/excelcuihuajihome/helpdocument/ckw03e
此外,阿旭还采集
了一些插件,比如Office Tab,为Office增加了类似浏览器的标签功能。
正版Office Tab 优惠购买:Office Tab - 办公套件添加标签功能丨永久仅需89元(平台首单立减5元)
超过300个功能的Kutools for Excel,和同一家公司的Kutools for Word,也是阿旭顺便采集
的
如果您需要 Office Tab、Kutools 和 Square Grid,您可以在以下位置下载它们:单击此处
上面介绍的插件基本支持2007-2019(含365)的Office版本,也支持WPS!
具体是否支持Office 2020-2021请自行查看插件官网!
如果你对我研究的更多问题感兴趣,欢迎关注我的微信~