0%

标签错误

错误 log:

1
RuntimeError: cuda runtime error (59) :device-side assert triggered

一般是标签出错,检查两点:

  • 标签中是否有 - 1
  • 标签个数和分类的个数是否匹配(检查模型最后的分类个数)

Shell 脚本 dos2unix

1
Shell脚本出现$'\r': command not found

这是因为脚本文件可能在 window 弄过,有 window 下的空行,把他转换成 unix 格式的就行。

1
2
yum install dos2unix
dos2unix run.sh

最近买了新电脑,但是博客是今天才迁移过来。本以为很麻烦,实际上操作非常简单,只需要三个步骤。

拷贝博客文件夹

大概 50 多 M 的样子,原封不动的拷贝到新电脑上。

安装 hexo

1
$ npm install -g hexo-cli

有时候会出现 warning: LF will be replaced by CRLF in 的警告,输入下面的命令解决:

1
git config --global core.autocrlf false

重新配置 ssh 密钥

1
2
ssh-keygen
cat ~/.ssh/id_rsa.pub

复制到 github ssh 里面就行了。

Dureader 数据集

数据示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
{"documents": [{
"is_selected": true,
"title": "iOS里,把一个页面链接分享给好友,好友在微信里打开这个链接,怎么跳",
"most_related_para": 0,
"segmented_title": ["iOS", "里", ",", "把", "一", "个", "页面", "链接", "分享", "给", "好友", ",", "好友", "在", "微信", "里", "打开", "这个", "链接", ",", "怎么", "跳"],
"segmented_paragraphs": [
["iOS", "里", ",", "把", "一", "个", "页面", "链接", "分享", "给", "好友", ",", "好友", "在", "微信", "里", "打开", "这个", "链接", ",", "怎么", "跳", "<splitter>", "iOS", "里", ",", "把", "一", "个", "页面", "链接", "分享", "给", "微信", "好友", "(", "会话", ")", ",", "好友", "在", "微信", "里", "打开", "这个", "链接", ",", "也", "就是", "打开", "了", "一", "个", "网页", ",", "点击", "网页", "里", "的", "某", "个", "地方", "后", "(", "比如", "网页", "中", "“", "打开", "xx", "应用程序", "”", "的", "按钮", ")", ",", "代码", "里", "怎么", "设置", "可以", "跳", "回到", "第三方", "app", "?", "知乎", "的", "ios", "客户端", "就", "有", "这种", "功能", ",", "在", "微信", "里", "分享", "链接", "后", ",", "点", "开", "链接", ",", "再", "点", "网页", "中", "的", "某处", ",", "就", "可以", "打开", "知乎", "客户端", "显示全部", "<splitter>", "微信", "中", "不能", "用", "自定义", "url", "的", "方式", ",", "微信", "提供", "了", "打开", "第三方", "应用", "的", "接口", ":", "launch", "3rd", "App", "<splitter>", "谢", "。", "一般", "用", "自带", "浏览器", "可以", "调用", "起", "app", "没问题", "。", "微信", "里面", "能", "调出", "app", "的", ",", "是", "和", "腾讯", "有", "合作", "的", "应用", ",", "其他", "会", "被", "过滤", "掉", "。", "<splitter>", "有", "一", "个", "公司", "的", "产品", ",", "叫", "魔", "窗", ",", "免费", "可以", "接入", "的", "<splitter>", "分享", "出去", "的", "是", "一", "个", "网页", ",", "前端", "人员", "与", "app", "客户端", "人员", "约定", "好", "一", "个", "头部", "协议", "。", "当", "用户", "在", "网页", "的", "点击", "某", "个", "按钮", ",", "调用", "注册", "的", "协议", "头", ",", "就", "可以", "呼", "起", "安装", "的", "app", "。", "比如", "知乎", "app", "可能", "注册", "了", "zhifu", ":", "/", "/", "xxx", "zhifu", ":", "/", "/", "就是", "约定", "好", "的", "xxx", "是", "指", "参数", "可以", "任意", "带", "这样", "访问", "后", "就", "可以", "呼", "起", "app", "了", "。", "<splitter>", "目前", "已经", "解决", "直接", "从", "微信", "打开", "的", "链接", "可以直接", "点击", "下载", "APP", "的", "跳转", ",", "无需", "再", "通过", "另外", "浏览", "中", "打开", "才能", "点击", "下载", ",", "在", "微信", "中", "即可", "直接", "点击", "下载", ",", "需要", "的", "联系", "QQ", "77408026", "<splitter>", "你可以", "去", "看看", "openinstall", ",", "它", "可以", "实现", "让", "用户", "分享", "链接", "让", "别", "的", "用户", "可以打开", "下载", "或者", "跳转", "APP", "。", "而且", "打开", "或者", "下载", "后", "还能", "获取", "到", "自己", "想", "传", "过去", "的", "参数", "。", "<splitter>", "方法", "一", ":", "微信", "API", "-", "-", "WXApp", "Extend", "Object", ".", "(", "参考", "app", "-", "微博", ")", "方法", "二", ":", "iOS", "9", "Universal", "Link", ".", "(", "参考", "app", "-", "蘑菇街", ")", "<splitter>", "目前", "要", "先", "用", "浏览器", "打开", ",", "然后", "才能", "跳", "。", "有", "解决办法", "么", "<splitter>", "下载", "知乎", "客户端", "与", "世界", "分享", "知识", "、", "经验", "和", "见解", "<splitter>", "相关", "Live", "推荐"]
],
"paragraphs": ["iOS里,把一个页面链接分享给好友,好友在微信里打开这个链接,怎么跳<splitter>iOS里,把一个页面链接分享给微信好友(会话),好友在微信里打开这个链接,也就是打开了一个网页,点击网页里的某个地方后(比如网页中“打开xx应用程序”的按钮),代码里怎么设置可以跳回到第三方app?知乎的ios客户端就有这种功能,在微信里分享链接后,点开链接,再点网页中的某处,就可以打开知乎客户端显示全部<splitter>微信中不能用自定义url的方式,微信提供了打开第三方应用的接口:launch3rdApp<splitter>谢。一般用自带浏览器可以调用起app没问题。微信里面能调出app的,是和腾讯有合作的应用,其他会被过滤掉。<splitter>有一个公司的产品,叫魔窗,免费可以接入的<splitter>分享出去的是一个网页,前端人员与app客户端人员约定好一个头部协议。当用户在网页的点击某个按钮,调用注册的协议头,就可以呼起安装的app。比如知乎app可能注册了zhifu://xxxzhifu://就是约定好的xxx是指参数可以任意带这样访问后就可以呼起app了。<splitter>目前已经解决直接从微信打开的链接可以直接点击下载APP的跳转,无需再通过另外浏览中打开才能点击下载,在微信中即可直接点击下载,需要的联系QQ77408026<splitter>你可以去看看openinstall,它可以实现让用户分享链接让别的用户可以打开下载或者跳转APP。而且打开或者下载后还能获取到自己想传过去的参数。<splitter>方法一:微信API--WXAppExtendObject.(参考app-微博)方法二:iOS9UniversalLink.(参考app-蘑菇街)<splitter>目前要先用浏览器打开,然后才能跳。有解决办法么<splitter>下载知乎客户端与世界分享知识、经验和见解<splitter>相关Live推荐"],
"segmented_paragraphs_scores": [1.0],
"paragraphs_length": [415]
}, {
"is_selected": true,
"title": "怎么可以在微信里面打开APP下载链接地址_百度经验",
"most_related_para": 0,
"segmented_title": ["怎么", "可以", "在", "微信", "里面", "打开", "APP", "下载", "链接地址", "_", "百度", "经验"],
"segmented_paragraphs": [
["怎么", "可以", "在", "微信", "里面", "打开", "APP", "下载", "链接地址", "_", "百度", "经验", "<splitter>", "百度", "经验", ":", "jingyan", ".", "baidu", ".", "com", "<splitter>", "我们", "都", "知道", "手游", "、", "APP", "想", "在", "微信", "分享", "时", ",", "下载", "的", "链接", "会", "被", "微信", "屏蔽", ",", "不能", "直接", "点击", ",", "那", "怎样", "才能", "得到", "微信", "认可", "的", "下载", "页面", "呢", ",", "这里", "就", "需要", "用", "到", "腾讯", "的", "开放", "平台", ",", "而", "你", "的", "应用", "也", "需要提交", "到", "这个平台", "。", "在", "这里", "可以", "得到", "微信", "认可", "的", "链接地址", "。", "接下来", "介绍", "相关", "方法", "。", "<splitter>", "1", "首先", "打开", "腾讯", "开放", "平台", ",", "注册", "开放", "平台", "的", "一", "个", "账号", ",", "如", "下", "图", "所示", "。", "步骤", "阅读", "2", "登录", "后", "在", "”", "管理", "中心", "“", "中", "创建", "应用", ",", "如", "下", "图", "所示", "点击", "红线", "框", "选", "按钮", "。", "步骤", "阅读", "3", "选择", "创建", "应用", "的", "类型", "如", "下", "图", "所示", ",", "然后", "按钮", "提示", "填写", "应用", "的", "相关", "信息", ",", "提交", "进入", "审核", "。", "步骤", "阅读", "步骤", "阅读", "4", "应用", "审核", "通过", "后", "会", "在", "管理", "中心", "中", "显示", "”", "已", "上线", "“", ",", "然后", "点击", "应用", "的", "图标", "。", "步骤", "阅读", "5", "在", "应用", "详情", "中", "找到", "运营", "服务", "中", "的", "”", "微", "下载", "“", ",", "点击进入", "详情", "页面", "。", "步骤", "阅读", "6", "在", "详情", "页面", "中", "就", "可以", "看到", "系统", "生成", "的", "推广", "链接地址", "了", ",", "复制", "此", "地址", "就", "可以", "微信", "中", "转发", "了", "。", "步骤", "阅读", "END", "<splitter>", "经验", "内容", "仅供参考", ",", "如果", "您", "需", "解决", "具体", "问题", "(", "尤其", "法律", "、", "医学", "等", "领域", ")", ",", "建议", "您", "详细", "咨询", "相关", "领域", "专业人士", "。"]
],
"paragraphs": ["怎么可以在微信里面打开APP下载链接地址_百度经验<splitter>百度经验:jingyan.baidu.com<splitter>我们都知道手游、APP想在微信分享时,下载的链接会被微信屏蔽,不能直接点击,那怎样才能得到微信认可的下载页面呢,这里就需要用到腾讯的开放平台,而你的应用也需要提交到这个平台。在这里可以得到微信认可的链接地址。接下来介绍相关方法。<splitter>1首先打开腾讯开放平台,注册开放平台的一个账号,如下图所示。步骤阅读2登录后在”管理中心“中创建应用,如下图所示点击红线框选按钮。步骤阅读3选择创建应用的类型如下图所示,然后按钮提示填写应用的相关信息,提交进入审核。步骤阅读步骤阅读4应用审核通过后会在管理中心中显示”已上线“,然后点击应用的图标。步骤阅读5在应用详情中找到运营服务中的”微下载“,点击进入详情页面。步骤阅读6在详情页面中就可以看到系统生成的推广链接地址了,复制此地址就可以微信中转发了。步骤阅读END<splitter>经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。"],
"segmented_paragraphs_scores": [1.0],
"paragraphs_length": [266]
}, {
"is_selected": false,
"title": "android微信分享的链接怎么启动app-CSDN论坛",
"most_related_para": 0,
"segmented_title": ["android", "微信", "分享", "的", "链接", "怎么", "启动", "app", "-", "CSDN", "论坛"],
"segmented_paragraphs": [
["android", "微信", "分享", "的", "链接", "怎么", "启动", "app", "-", "CSDN", "论坛", "<splitter>", "app", "中", "分享", "到", "微信", "已经", "成功", ",", "但是", "通过", "分享", "的", "连接", "无法", "启动", "app", "。", "<splitter>", "分享", "的", "链接", "就是", "普通", "的", "自定义", "url", ":", "myapp", ":", "/", "/", "www", ".", "myapp", ".", "com", ".", "<splitter>", "博客", "专家", "带", "你", "学", "swift", "晒", "图谱", ",", "涨", "知识", ",", "得", "好", "礼", "Swift", "问题", "与", "解答", "视频直播", "技术", "免费", "课"]
],
"paragraphs": ["android微信分享的链接怎么启动app-CSDN论坛<splitter>app中分享到微信已经成功,但是通过分享的连接无法启动app。<splitter>分享的链接就是普通的自定义url:myapp://www.myapp.com.<splitter>博客专家带你学swift晒图谱,涨知识,得好礼Swift问题与解答视频直播技术免费课"],
"segmented_paragraphs_scores": [1.0],
"paragraphs_length": [73]
}, {
"is_selected": false,
"title": "android 从微信分享的网页中启动APP - mattdong1024的专栏 - CSDN",
"most_related_para": 0,
"segmented_title": ["android", "从", "微信", "分享", "的", "网页", "中", "启动", "APP", "-", "matt", "dong", "1024", "的", "专栏", "-", "CSDN"],
"segmented_paragraphs": [
["android", "从", "微信", "分享", "的", "网页", "中", "启动", "APP", "-", "matt", "dong", "1024", "的", "专栏", "-", "CSDN", "<splitter>", "项目", "中", "有", "个", "需求", ",", "让", "用户", "可以", "从", "分享", "到", "微信", "的", "网页", "中", "启动", "自己", "的", "APP", ",", "如果", "本", "机", "没有", "安装", "该", "应用程序", "则", "打开", "应用", "商店", "并", "打开", "该", "程序", "在", "商店", "中", "的", "搜索", "结果", "页面", "。", "在这里", "跟", "大家", "分享", "一", "下", ":", "<splitter>", "实践", ":", "从", "微信", "分享", "的", "网页", "中", "启动", "app", ",", "如果", "本", "机", "安装", "了", "该", "应用", "可以", "正常", "启动", ",", "如果没有", "安装", "该", "应用", ",", "会", "跳转", "到", "应用宝", "的", "网页", ",", "提示", "你", "下载", "应用", "<splitter>", "如果", "是", "从", "其他", "浏览器", "启动", "app", "的", "话", ",", "除了", "自带", "浏览器", "和", "谷歌", "浏览器", "外", ",", "其他", "第三方", "浏览器", "可能会", "有", "兼容性", "问题", ",", "也就是说", ",", "有", "可能", "无法", "从", "第三方", "浏览器", "启动", "app", "。"]
],
"paragraphs": ["android从微信分享的网页中启动APP-mattdong1024的专栏-CSDN<splitter>项目中有个需求,让用户可以从分享到微信的网页中启动自己的APP,如果本机没有安装该应用程序则打开应用商店并打开该程序在商店中的搜索结果页面。在这里跟大家分享一下:<splitter>实践:从微信分享的网页中启动app,如果本机安装了该应用可以正常启动,如果没有安装该应用,会跳转到应用宝的网页,提示你下载应用<splitter>如果是从其他浏览器启动app的话,除了自带浏览器和谷歌浏览器外,其他第三方浏览器可能会有兼容性问题,也就是说,有可能无法从第三方浏览器启动app。"],
"segmented_paragraphs_scores": [1.0],
"paragraphs_length": [146]
}, {
"is_selected": true,
"title": "微信浏览器中点击链接怎么打开本地app_百度经验",
"most_related_para": 0,
"segmented_title": ["微信", "浏览器", "中", "点击", "链接", "怎么", "打开", "本地", "app", "_", "百度", "经验"],
"segmented_paragraphs": [
["微信", "浏览器", "中", "点击", "链接", "怎么", "打开", "本地", "app", "_", "百度", "经验", "<splitter>", "百度", "经验", ":", "jingyan", ".", "baidu", ".", "com", "<splitter>", "微信", "已经成为", "现代人", "生活", "中", "必不可少", "的", "一部分", ",", "下面", "我", "就", "教", "大家", "如何", "在", "微信", "浏览器", "中", "打开", "本地", "APP", "吧", "!", "<splitter>", "1", "将", "手机", "微信", "打开", "。", "步骤", "阅读", "2", "打开", "微信", "中", "的", "链接", "。", "步骤", "阅读", "3", "如图", "我们", "打开", "百度", "经验", "的", "链接", ",", "用", "微信", "浏览器", "进入", "网页", "以后", ",", "点击", "右", "上方", "如图", "符号", "。", "步骤", "阅读", "4", "进入", "选择", "页面", ",", "点击", "“", "在", "浏览器", "”", "打开", "。", "步骤", "阅读", "5", "如图", "会出现", "手机", "已", "安装", "的", "本地", "APP", "浏览器", ",", "我们", "选择", "一", "个", "自己", "想", "用", "的", "本地", "浏览器", "点击", "下方", "“", "仅", "一次", "”", "或", "“", "总是", "”", "都", "可以", "打开", "打开", "本地", "APP", "浏览器", "。", "步骤", "阅读", "6", "此时", ",", "我们", "就", "已经", "在", "微信", "浏览器", "中将", "本地", "APP", "浏览器", "打开", "了", "步骤", "阅读", "END", "<splitter>", "经验", "内容", "仅供参考", ",", "如果", "您", "需", "解决", "具体", "问题", "(", "尤其", "法律", "、", "医学", "等", "领域", ")", ",", "建议", "您", "详细", "咨询", "相关", "领域", "专业人士", "。"]
],
"paragraphs": ["微信浏览器中点击链接怎么打开本地app_百度经验<splitter>百度经验:jingyan.baidu.com<splitter>微信已经成为现代人生活中必不可少的一部分,下面我就教大家如何在微信浏览器中打开本地APP吧!<splitter>1将手机微信打开。步骤阅读2打开微信中的链接。步骤阅读3如图我们打开百度经验的链接,用微信浏览器进入网页以后,点击右上方如图符号。步骤阅读4进入选择页面,点击“在浏览器”打开。步骤阅读5如图会出现手机已安装的本地APP浏览器,我们选择一个自己想用的本地浏览器点击下方“仅一次”或“总是”都可以打开打开本地APP浏览器。步骤阅读6此时,我们就已经在微信浏览器中将本地APP浏览器打开了步骤阅读END<splitter>经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。"],
"segmented_paragraphs_scores": [1.0],
"paragraphs_length": [189]
}],
"answer_spans": [
[47, 157]
],
"fake_answers": ["1将手机微信打开。步骤阅读2打开微信中的链接。步骤阅读3如图我们打开百度经验的链接,用微信浏览器进入网页以后,点击右上方如图符号。步骤阅读4进入选择页面,点击“在浏览器”打开。步骤阅读5如图会出现手机已安装的本地APP浏览器,我们选择一个自己想用的本地浏览器点击下方“仅一次”或“总是”都可以打开打开本地APP浏览器。步骤阅读6此时,我们就已经在微信浏览器中将本地APP浏览器打开了"],
"question": "微信分享链接打开app",
"segmented_answers": [
["iOS", "里", ",", "把", "一", "个", "页面", "链接", "分享", "给", "微信", "好友", "(", "会话", ")", ",", "好友", "在", "微信", "里", "打开", "这个", "链接", ",", "也", "就是", "打开", "了", "一", "个", "网页", ",", "点击", "网页", "里", "的", "某", "个", "地方", "后", "(", "比如", "网页", "中", "“", "打开", "xx", "应用程序", "”", "的", "按钮", ")", ",", "代码", "里", "怎么", "设置", "可以", "跳", "回到", "第三方", "app", "?", "知乎", "的", "ios", "客户端", "就", "有", "这种", "功能", ",", "在", "微信", "里", "分享", "链接", "后", ",", "点", "开", "链接", ",", "再", "点", "网页", "中", "的", "某处", ",", "就", "可以", "打开", "知乎", "客户端", "。"],
["1", "、", "首先", "打开", "腾讯", "开放", "平台", ",", "注册", "开放", "平台", "的", "一", "个", "账号", "。", "2", "、", "登录", "后", "在", "”", "管理", "中心", "“", "中", "创建", "应用", "。", "3", "、", "选择", "创建", "应用", "的", "类型", "如", "下", "图", "所示", ",", "然后", "按钮", "提示", "填写", "应用", "的", "相关", "信息", ",", "提交", "进入", "审核", "。", "4", "、", "应用", "审核", "通过", "后", "会", "在", "管理", "中心", "中", "显示", "”", "已", "上线", "“", ",", "然后", "点击", "应用", "的", "图标", "。", "5", "、", "在", "应用", "详情", "中", "找到", "运营", "服务", "中", "的", "”", "微", "下载", "“", "。", "6", "、", "在", "详情", "页面", "中", "就", "可以", "看到", "系统", "生成", "的", "推广", "链接地址", "了", ",", "复制", "此", "地址", "就", "可以", "微信", "中", "转发", "了", "。"],
["1", "将", "手机", "微信", "打开", "。", "2", "打开", "微信", "中", "的", "链接", "。", "3", "我们", "打开", "百度", "经验", "的", "链接", ",", "用", "微信", "浏览器", "进入", "网页", "以后", ",", "点击", "右", "上方", "如图", "符号", "。", "4", "进入", "选择", "页面", ",", "点击", "“", "在", "浏览器", "”", "打开", "。", "5", "出现", "手机", "已", "安装", "的", "本地", "APP", "浏览器", ",", "我们", "选择", "一", "个", "自己", "想", "用", "的", "本地", "浏览器", "点击", "下方", "“", "仅", "一次", "”", "或", "“", "总是", "”", "都", "可以", "打开", "打开", "本地", "APP", "浏览器", "。", "6", "此时", ",", "我们", "就", "已经", "在", "微信", "浏览器", "中将", "本地", "APP", "浏览器", "打开", "了", "。"]
],
"answers": ["iOS里,把一个页面链接分享给微信好友(会话),好友在微信里打开这个链接,也就是打开了一个网页,点击网页里的某个地方后(比如网页中“打开xx应用程序”的按钮),代码里怎么设置可以跳回到第三方app?知乎的ios客户端就有这种功能,在微信里分享链接后,点开链接,再点网页中的某处,就可以打开知乎客户端 。", "1、首先打开腾讯开放平台,注册开放平台的一个账号。2、登录后在”管理中心“中创建应用。3、选择创建应用的类型如下图所示,然后按钮提示填写应用的相关信息,提交进入审核。4、应用审核通过后会在管理中心中显示”已上线“,然后点击应用的图标。5、在应用详情中找到运营服务中的”微下载“。6、在详情页面中就可以看到系统生成的推广链接地址了,复制此地址就可以微信中转发了。", "1将手机微信打开。2打开微信中的链接。3我们打开百度经验的链接,用微信浏览器进入网页以后,点击右上方如图符号。4进入选择页面,点击“在浏览器”打开。5出现手机已安装的本地APP浏览器,我们选择一个自己想用的本地浏览器点击下方“仅一次”或“总是”都可以打开打开本地APP浏览器。6此时,我们就已经在微信浏览器中将本地APP浏览器打开了。"],
"answer_docs": [4],
"segmented_question": ["微信", "分享", "链接", "打开", "app"],
"question_type": "DESCRIPTION",
"match_scores": [0.8815165876777251],
"fact_or_opinion": "FACT",
"question_id": 91159
}
阅读全文 »

功能:使程序在后台运行,当连接服务器终端时,程序还在运行

后台运行的命令

1
2
3
nohup python 文件名.py &
# 会出现一个进程后,记住这是该程序的进程号,
# 后期如果想要停止,可以使用该命令:kill -9 进程号

查看后台运行的进程

1
2
3
# 如果发现没记nohup运行的进程,可以使用以下的命令来查看进程号
1. jobs -l # 查看后台运行的进程,如果后台运行的进程很多,可以使用下面的命令
2. ps aux | grep nohup 查看nohup 的进程,然后使用 kill -9 进程号杀死该进程

nohup 的输出重定向问题

如果后台同时运行多个程序,它们的输出全都在 nohup.out 中,阅读起来很不方便。可通过重定向到不同文件中来解决这个问题;也可以通过在不同的文件下,运行 nohup 来避免这种情况。
linux 启动后,会默认打开 3 个文件描述符,0 表示标准输入,1 表示正确输出,2 表示错误输出。

1
2
nohup python 文件名.py 1>result.out 2>result.out & 
# 将正确输出和错误输出均写入result.out文件

查看运行输出

1
2
3
4
5
#实时查看
tailf result.out
#查看几行
head 10 result.out #查看文件的前面10行
tail 10 result.out # 查看文件的后面10行

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from random import random
from time import sleep
from tqdm import tqdm

epochs = 2
train_data_num = 10
for i in range(epochs):
with tqdm(total=train_data_num) as t:
for j in range(10):
# Description will be displayed on the left
t.set_description('Epoch %i' % i)
# Postfix will be displayed on the right,
# formatted automatically based on argument's datatype
t.set_postfix(loss=random(),acc=random())
sleep(0.1)
t.update(1)

输出结果:

1
2
Epoch 0: 100%|██████████| 10/10 [00:01<00:00,  9.94it/s, acc=0.0863, loss=0.999]
Epoch 1: 100%|██████████| 10/10 [00:01<00:00, 9.93it/s, acc=0.459, loss=0.921]

Anacodna 相关操作

下载安装以及切换镜像

1
2
3
4
5
6
7
8
9
10
#下载和安装anaconda
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.2.0-Linux-x86_64.sh
bash Anaconda3-5.2.0-Linux-x86_64.sh

#切换到清华源,加快下载速度
wget https://tuna.moe/oh-my-tuna/oh-my-tuna.py
python oh-my-tuna.py
sudo python oh-my-tuna.py --global
#确认源是http而不是https
vim ~/.condarc #修改https为http

conda 环境创建、退出和移除

1
2
3
4
5
conda create --name py36 python=3.6 #创建环境
conda activate py36 #激活环境
conda deactivate py36 #退出环境
conda remove --name py36 --all #删除环境
conda info -e #查看系统中的所有环境

conda查找包的所有版本
1
conda search tensorflow

conda瘦身
1
2
3
conda clean -p      //删除没有用的包
conda clean -t //清理tar
conda clean -a //清理所有缓存包

查看系统内存和进程

1
2
#安装系统查看器
pip install glances

运行 glances 查看系统状态
K02cEn.png

阅读全文 »

引言

编写目的

为了从整体上描述基于文档的限定领域对话式问答系统要实现的功能,使用户能够对本系统有一个全面正确的认识,同时给程序开发者一个关于系统的使用,系统的功能模块,以及系统的各种技术解决方案一个详细的说明。

背景

问答系统 (Question Answering System, QA) 是信息检索系统的一种高级形式,它能用准确、简洁的自然语言回答用户用自然语言提出的问题。其研究兴起的主要原因是人们对快速、准确地获取信息的需求。问答系统是目前人工智能和自然语言处理领域中一个倍受关注并具有广泛发展前景的研究方向。
不同的应用需要不同形式的问答系统,其所采用的语料和技术也不尽相同。从涉及的应用领域进行分类,可将问答系统分为限定域问答系统和开放域问答系统。
限定域问答系统是指系统所能处理的问题只限定于某个领域或者某个内容范围,比如只限定于医学、化学或者某企业的业务领域等。由于系统要解决的问题限定于某个领域或者范围,因此如果把系统所需要的全部领域知识都按照统一的方式表示成内部的结构化格式,则回答问题时就能比较容易地产生答案。

开放域问答系统不同于限定域问答系统,这类系统可回答的问题不限定于某个特定领域。在回答开放领域的问题时,需要一定的常识知识或者世界知识并具有语义词典。
按支持问答系统产生答案的文档库、知识库,以及实现的技术分类,可分为自然语言的数据库问答系统、对话式问答系统、阅读理解系统、基于常用问题集的问答系统、基于知识库的问答系统,以及基于大规模文档集的问答系统。
目前国内的大多数问答系统都是针对开放领域的对话式问答系统,在限定领域特别是基于文档的对话式问答系统很少,且功能均不够完善。本文设计了一种使用最先进的深度学习自然语言技术的基于文档的限定领域对话式问答系统设计说明。基本步骤包括处理文档数据、构造训练数据集、模型训练和优化、模型部署等,使用时输入用户需要查询的问题,系统可以自动匹配与问题最相关的段落,并由模型给出问题的答案。此外模型有完整的日志系统以及在线训练和离线训练模块。

概要设计

系统总体设计

系统的整体编程语言使用 Python 进行开发,使用的深度学习框架为 TensorFlow。基于机器阅读理解模型的问答流程如下图所示:

系统模块功能

文档数据识别和处理模块

常见的办公文档多数为 txt 文档,word 文档,excel 表格或者 pdf 文档。针对不同的文档需要设计不同的数据读取方式并进行读取后数据的存储。

模型训练数据的构建模块

SQuAD 示例:
内容:阿波罗计划于 1962 至 1972 年间进行,期间得到了同期的双子座计划(1962 年 - 1966 年)的支持。双子座计划为阿波罗计划成功必需的一些太空旅行技术做了铺垫。阿波罗计划使用土星系列火箭作为运载工具来发射飞船。这些火箭还被用于阿波罗应用计划,包括 1973 年到 1974 年间支持了三个载人飞行任务的空间站 Skylab,以及 1975 年和前苏联合作的联合地球轨道任务阿波罗联盟测试计划。
问题:哪一个空间站于 1973 到 1974 年间承载了三项载人飞行任务?
答案:Skylab 空间站

基于深度学习的阅读理解模型

YESNO 问题类型的处理方式
在第一阶段使用的是分类的方法,我后来考虑同样的问题可能在不同原文中可能是不同的回答,所以我就把 YESNO 作为原文进行训练。具体做法就是在原文后边拼接 YESNO 字符串,然后将之前的答案索引修改为 YESNO 对应的索引。这样在训练过程中就可以学到答案跟原文之间的关系,而不像之前只关注问题直接得出答案,实验证明这种方法确实能提高成绩,大概提高了 3 个百分点。2. 不能回答的问题的处理方式在 BERT 的源码中,对于不能回答的问题有一套处理方式,就是根据预测结果得出的 nbest 和答案为空的概率进行对比,如果答案为空的概率最高就把空作为答案。我使用与处理 YESNO 问题的方式去试了一下,就是将 NULL 拼接到原文后,将对应的答案索引改为 NULL 的索引,实验效果证明能提升, 但是只能提升百分之零点几,anyway,有点提升就用起来吧。

模型导出和部署模块

针对问题段落匹配的信息检索模块

文档:Closed Domain Question Answering

使用 CSV 文件数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import os
import pandas as pd
from ast import literal_eval

from cdqa.utils.filters import filter_paragraphs
from cdqa.pipeline import QAPipeline

#Download pre-trained reader model and example dataset
from cdqa.utils.download import download_model, download_bnpp_data
download_bnpp_data(dir='./data/bnpp_newsroom_v1.1/')
download_model(model='bert-squad_1.1', dir='./models')
#Visualize the dataset
df = pd.read_csv('./data/bnpp_newsroom_v1.1/bnpp_newsroom-v1.1.csv', converters={'paragraphs': literal_eval})
df = filter_paragraphs(df)
print(df.head())
#Instantiate the cdQA pipeline from a pre-trained CPU reader
cdqa_pipeline = QAPipeline(reader='./models/bert_qa_vCPU-sklearn.joblib')
cdqa_pipeline.fit_retriever(df=df)
#Execute a query
query = 'Since when does the Excellence Program of BNP Paribas exist?'
prediction = cdqa_pipeline.predict(query)
#Explore predictions
print('query: {}'.format(query))
print('answer: {}'.format(prediction[0]))
print('title: {}'.format(prediction[1]))
print('paragraph: {}'.format(prediction[2]))
阅读全文 »

文本分类

训练和保存模型代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import kashgari
from kashgari.corpus import SMP2018ECDTCorpus
from kashgari.tasks.classification import BiLSTM_Model
from kashgari.embeddings import BERTEmbedding
from kashgari.callbacks import EvalCallBack
from tensorflow.python import keras
from kashgari import utils

# 有GPU的话
kashgari.config.use_cudnn_cell = True

# 数据集
train_x, train_y = SMP2018ECDTCorpus.load_data('train')
valid_x, valid_y = SMP2018ECDTCorpus.load_data('valid')
test_x, test_y = SMP2018ECDTCorpus.load_data('test')

# '<PRE_TRAINED_BERT_MODEL_FOLDER>':BERT模型路径
bert_embed = BERTEmbedding('/home/new/Toxicity/bert_model/models/chinese_L-12_H-768_A-12',
task=kashgari.CLASSIFICATION,
sequence_length=100)

model = BiLSTM_Model(bert_embed)
tf_board_callback = keras.callbacks.TensorBoard(log_dir='./logs', update_freq=1000)

eval_callback = EvalCallBack(kash_model=model,
valid_x=valid_x,
valid_y=valid_y,
step=5)

model.fit(train_x,
train_y,
valid_x,
valid_y,
batch_size=100,
callbacks=[eval_callback, tf_board_callback])

model.evaluate(test_x, test_y)

# 保存模型到 `saved_classification_model` 目录下
model.save('saved_classification_model')

# 加载保存模型
loaded_model = kashgari.utils.load_model('saved_classification_model')

# 使用模型进行预测
loaded_model.predict(test_x[:10])

# Save model
utils.convert_to_saved_model(model,
model_path='saved_model/blstm',
version=1)

阅读全文 »