xueyouluo / speller-bert

中文纠错
90 stars 12 forks source link

demo运行问题 #3

Closed teorzhang closed 2 years ago

teorzhang commented 2 years ago

请问大佬,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] 由于目标计算机积极拒绝,无法连接。',))

xueyouluo commented 2 years ago

你的模型serving有没有跑起来,另外端口号对不对

teorzhang commented 2 years ago

请问修改模型地址是在哪修改呢?还有我把demo.py和serving.py的地址和端口号都改为了localhost和8080

xueyouluo commented 2 years ago

模型地址在这边修改: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会怎么样,但是它应该是你启动后自动给你找个合适的端口吧

teorzhang commented 2 years ago

那模型地址应该改成哪个模型文件呢?是像比如cbert/cbert.index吗?还是其他的文件路径?

xueyouluo commented 2 years ago

你解压后的文件目录比如为/home/XXX/data/cbert,那么模型路径就是/home/XXX/data/cbert/cbert,不要后面那个.index

teorzhang commented 2 years ago

是下载你文中提到的plome+finetune模型还是cbert模型(https://share.weiyun.com/wXErg7gB)呢

xueyouluo commented 2 years ago

我分享的这个模型

teorzhang commented 2 years ago

请问报如下错误是得到的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})`

xueyouluo commented 2 years ago

请问报如下错误是得到的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()

teorzhang commented 2 years ago

好像确实是requests.post('[http://localhost:8505/predict',json={"text":text}).json()这里出问题。启动serving.py后自己发个请求,是报500 Internal Server Error,但是不知道哪里出问题了。。。

xueyouluo commented 2 years ago

serving这边的报错内容发下看看

xueyouluo commented 2 years ago

TypeError: tuple indices must be integers or slices, not str

还是收到的数据不对。

text = check(data['text']) 这里可以改成 check('测试文本') 来看看模型能不能正常跑通,如果可以的话那就是请求的数据出了问题

teorzhang commented 2 years ago

改成check('测试文本')后模型可以跑通,确实是请求的数据有问题。我在想是不是因为requests和streamlit的版本有问题呢?我这两个都是安装的最高版本,想问您是哪个版本?

xueyouluo commented 2 years ago

requests = 2.25.1 streamlit = 1.2.0

teorzhang commented 2 years ago

还有请问您的flask版本是多少?

xueyouluo commented 2 years ago

flask = 2.0.3

teorzhang commented 2 years ago

感谢大佬!!我demo成功跑起来了,原来是各种库版本问题。另外想问一下cbert和bert有什么区别吗?去哪里能了解cbert模型呢?

xueyouluo commented 2 years ago

不客气。 cbert跟bert没什么太大的区别,全称应该较confusion bert,就是mask策略改成用了混淆字,而不是替换为[MASK],你可以看看源码里面的实现,或者看一下PLOME那篇论文的介绍,我这里实现的cbert思路基本就是他里面介绍的cbert。

teorzhang commented 2 years ago

好的,感谢回复。

teorzhang commented 2 years ago

大佬,请问一下predict.py中的eval_inner_dataset()里的jsonl格式数据集是怎么得到的呢?例如corpus500.jsonl.jsonl这样的,是需要自己将json格式的文件转换成jsonl格式的吗?看到好像是要这样格式的{"src": "XXXXX", "tgt": "XXXXX"},这种一般有什么方法转换呢?

xueyouluo commented 2 years ago

转成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')
xueyouluo commented 2 years ago

如果你是说我的测试集是怎么来的,那一部分是pycorrector里面的,一部分就是sighan的,其他的是我们自己收集的

teorzhang commented 2 years ago

明白了,感谢回复

teorzhang commented 2 years ago

大佬 请问一下,先预训练cbert再finetune和直接拿cbert来finetune,这有什么区别呢?前者效果会更好吗?

xueyouluo commented 2 years ago

你是说PLOME的cbert直接finetune吗?效果我已经对比过了的。我自己预训练的cbert其实思路跟PLOME的差不多,只是可能细节语料不一样,二者差别不大其实。

teorzhang commented 2 years ago

好的 感谢回复

teorzhang commented 2 years ago

大佬 请问一下,预训练cbert需要什么样的数据集?我的DATA_DIR选的是dimsim_confusion.json,我预训练的时候会在 data.py, line 148,in generator text = x['text'].lower() 中报错,是我的数据集格式不对吗?

xueyouluo commented 2 years ago

大佬 请问一下,预训练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是构建混淆集用到的数据文件,不是训练数据

teorzhang commented 2 years ago

原来如此 我理解错了,那这个训练数据是您文中提到的微信语料库+新闻预料吗?还有为什么要用lowe()方法呢 这个不是用中文训练吗?

xueyouluo commented 2 years ago

数据是的。lower可有可无,估计写顺手了 😁。

teorzhang commented 2 years ago

好的 感谢回复