Closed teorzhang closed 2 years ago
你的模型serving有没有跑起来,另外端口号对不对
请问修改模型地址是在哪修改呢?还有我把demo.py和serving.py的地址和端口号都改为了localhost和8080
模型地址在这边修改:https://github.com/xueyouluo/speller-bert/blob/main/cbert/serving.py#L32
启动serving.py后可以自己发个请求试试能否返回结果。
demo.py里面的调用模型端口要跟你serving的端口一致:https://github.com/xueyouluo/speller-bert/blob/main/cbert/serving.py#L32
不确定你把demo.py的端口改成8080会怎么样,但是它应该是你启动后自动给你找个合适的端口吧
那模型地址应该改成哪个模型文件呢?是像比如cbert/cbert.index吗?还是其他的文件路径?
你解压后的文件目录比如为/home/XXX/data/cbert,那么模型路径就是/home/XXX/data/cbert/cbert,不要后面那个.index
是下载你文中提到的plome+finetune模型还是cbert模型(https://share.weiyun.com/wXErg7gB)呢?
我分享的这个模型
请问报如下错误是得到的jrequest.get_json()出问题吗?还是进入check()方法的时候出的问题? `@app.route('/predict',methods=['POST'])
def predict():
data = request.get_json(silent=True)
print(data) <--- 打印出来是(Ellipsis, Ellipsis)
text = check(data['text']) <-----报错TypeError: tuple indices must be integers or slices, not str
return json.dumps({"text":text})`
请问报如下错误是得到的jrequest.get_json()出问题吗?还是进入check()方法的时候出的问题? `@app.route('/predict',methods=['POST'])
def predict():
data = request.get_json(silent=True)
print(data) <--- 打印出来是(Ellipsis, Ellipsis)
text = check(data['text']) <-----报错TypeError: tuple indices must be integers or slices, not str
return json.dumps({"text":text})`
你传入的数据有问题,正常应该是个dict比如, {'text':'我是测试'}。你启动serving后用requests测试一下 requests.post('http://localhost:8505/predict',json={"text":text}).json()
好像确实是requests.post('[http://localhost:8505/predict',json={"text":text}).json()这里出问题。启动serving.py后自己发个请求,是报500 Internal Server Error,但是不知道哪里出问题了。。。
serving这边的报错内容发下看看
TypeError: tuple indices must be integers or slices, not str
还是收到的数据不对。
text = check(data['text']) 这里可以改成 check('测试文本') 来看看模型能不能正常跑通,如果可以的话那就是请求的数据出了问题
改成check('测试文本')后模型可以跑通,确实是请求的数据有问题。我在想是不是因为requests和streamlit的版本有问题呢?我这两个都是安装的最高版本,想问您是哪个版本?
requests = 2.25.1 streamlit = 1.2.0
还有请问您的flask版本是多少?
flask = 2.0.3
感谢大佬!!我demo成功跑起来了,原来是各种库版本问题。另外想问一下cbert和bert有什么区别吗?去哪里能了解cbert模型呢?
不客气。 cbert跟bert没什么太大的区别,全称应该较confusion bert,就是mask策略改成用了混淆字,而不是替换为[MASK],你可以看看源码里面的实现,或者看一下PLOME那篇论文的介绍,我这里实现的cbert思路基本就是他里面介绍的cbert。
好的,感谢回复。
大佬,请问一下predict.py中的eval_inner_dataset()里的jsonl格式数据集是怎么得到的呢?例如corpus500.jsonl.jsonl这样的,是需要自己将json格式的文件转换成jsonl格式的吗?看到好像是要这样格式的{"src": "XXXXX", "tgt": "XXXXX"},这种一般有什么方法转换呢?
转成jsonl很简单啊,假设你数据是个字典的列表
data = [{src:xxx,tgt:yyy},{src:xxx,tgt:yyy}]
with open(xxx,'w') as f:
for x in data:
f.write(json.dumps(x,ensure_ascii=False) + '\n')
如果你是说我的测试集是怎么来的,那一部分是pycorrector里面的,一部分就是sighan的,其他的是我们自己收集的
明白了,感谢回复
大佬 请问一下,先预训练cbert再finetune和直接拿cbert来finetune,这有什么区别呢?前者效果会更好吗?
你是说PLOME的cbert直接finetune吗?效果我已经对比过了的。我自己预训练的cbert其实思路跟PLOME的差不多,只是可能细节语料不一样,二者差别不大其实。
好的 感谢回复
大佬 请问一下,预训练cbert需要什么样的数据集?我的DATA_DIR选的是dimsim_confusion.json,我预训练的时候会在 data.py, line 148,in generator text = x['text'].lower() 中报错,是我的数据集格式不对吗?
大佬 请问一下,预训练cbert需要什么样的数据集?我的DATA_DIR选的是dimsim_confusion.json,我预训练的时候会在 data.py, line 148,in generator text = x['text'].lower() 中报错,是我的数据集格式不对吗?
jsonl格式的数据,每行是一条数据,有个text字段,比如
{"text":"aaaaa"}
{"text":"bbbbb"}
dimsim_confusion.json是构建混淆集用到的数据文件,不是训练数据
原来如此 我理解错了,那这个训练数据是您文中提到的微信语料库+新闻预料吗?还有为什么要用lowe()方法呢 这个不是用中文训练吗?
数据是的。lower可有可无,估计写顺手了 😁。
好的 感谢回复
请问大佬,demo网页点了检测按钮后为什么会报如下错误呢?
ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /predict (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000001E174CA6470>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。',))