最终改好的调试文本蕴涵模型步骤:
1.安装环境,需要使用gpu环境,服务器上的cuda版本是10,需要安装相应的tensorflow版本
2.运行data_reader.py文件,生成cnli_vocab.txt
3.在model下运行run_embeddingcnli.sh文件,生成cnli_embedding.npy
4.运行train.py文件。
调试过程中出现的主要问题汇总如下:
1.配置环境,安装python版本3.6.5,anaconda版本Anaconda3-5.2.0。然后activate tensorflow,在tensorflow环境下又安装了tensorflow1.5,但是运行中出现错误,如下图所示
由于tensorflow版本不同,导致参数名称冲突,解决办法是:卸载当前tensorflow1.5,重新安装tensorflow1.4
但是使用cpu跑太慢,因此在服务器上重新搭建环境。
2.接下来在jupyter上运行train.py文件,出现问题提示:缺少D:\\12.txt,解决办法:创建该日志文件
3.run train.py ,出现问题:缺少mergetrain.txt,解决办法:这个文件实际是data/cnli/cnli_train_1.0_seg.txt,在config.py文件里(第21行)改一下名字即可,如下图所示
3.运行data_reader.py文件,生成nlpcc2016_vocab.txt,日期应该是刚刚创建的,那么这个文件就是cnli_vocab.txt
他们的区别是cnli是做蕴涵任务,而nlpcc是做问答任务
4.由于nlpcc2016_embedding.npy文件是通过运行run_embeddingcnli.sh之后自动生成的,因此要在电脑上安装git工具,运行sh文件,把run_embeddingcnli.sh文件放到model下,和data处于同一级目录下,如下图所示:
5.在运行过程中,发现编码错误'utf-8' codec can't decode byte 0x92 in position 3: invalid start byte,用emeditor打开综合词向量文件发现存在无效字符,因此把无效字符删除,再继续运行run_embeddingcnli.sh文件,生成的cnli_embedding.npy文件就是nlpcc2016_embedding.npy文件
6.继续运行train.py文件,发现错误如下图所示
因此,需要打开train.py文件,把pred赋值个0,然后再进行测试,即可成功。
虽然可以运行,但是还是出现一个问题,准确率都是0,如下图所示:
发现是data_reader.py文件中的load_data函数里面的label字典的参数错误了,应该改成如下图所示:
之后可以运行,但是准确率只有38,如下图所示,
然后师兄说问题有两个:
(1)npy词向量不对应,是代码中的问题(2)词典不对应
改好之后,再运行是train的准确率是58,然后会慢慢增加
用文本蕴涵模型测试百度的数据发现问题:
train的准确率是0,目前发现是因为 l 在 label词典中找不到,需要改一下格式:
把{'neutral':0,'entailment':1,'contradiction':2} 改成 {' neutral':0,' entailment':1,' contradiction':2}
在测试的时候可以打印一下p,h,l,然后看看X[:10]中有没有值
在运行train.py文件时遇到错误:InvalidArgumentError (see above for traceback): indices[0,10] = 47392 is not in [0, 45100)
是因为换了数据,因此词典和npy文件都要重新生成
遇到错误Assign requires shapes of both tensors to match. lhs shape= [316297,300] rhs,可以把日志文件删除,并把model_saved_2016删除,是通过参考微博https://blog.youkuaiyun.com/Warship_/article/details/103817430
8.服务器gpu被占用,结果报错,错误如下图所示:
因此,使用命令nvidia-smi 查看当前服务器gpu使用情况,如下图:
具体的命令解读参考博客https://blog.youkuaiyun.com/sallyxyl1993/article/details/62220424
因此,可以使用gpu0进行跑程序,参考博客https://blog.youkuaiyun.com/guvcolie/article/details/77164230
在程序的最前面加入两行即可。