BrikerMan / Kashgari

Kashgari is a production-level NLP Transfer learning framework built on top of tf.keras for text-labeling and text-classification, includes Word2Vec, BERT, and GPT2 Language Embedding.
http://kashgari.readthedocs.io/
Apache License 2.0
2.39k stars 441 forks source link

[Question] 用bert embedding训练好的NER模型部署到tf serving时报错TypeError: can only concatenate list (not "str") to list #199

Closed xxxxxxxxy closed 5 years ago

xxxxxxxxy commented 5 years ago

训练代码

from kashgari.corpus import ChineseDailyNerCorpus

train_x, train_y = ChineseDailyNerCorpus.load_data('train')
valid_x, valid_y = ChineseDailyNerCorpus.load_data('validate')
test_x, test_y  = ChineseDailyNerCorpus.load_data('test')

print(f"train data count: {len(train_x)}")
print(f"validate data count: {len(valid_x)}")
print(f"test data count: {len(test_x)}")

import kashgari
from kashgari.embeddings import BERTEmbedding

bert_embed = BERTEmbedding('chinese_L-12_H-768_A-12',
                           task=kashgari.LABELING,
                           sequence_length=100)

from kashgari.tasks.labeling import BiLSTM_CRF_Model

# 还可以选择 `CNN_LSTM_Model`, `BiLSTM_Model`, `BiGRU_Model` 或 `BiGRU_CRF_Model`

model = BiLSTM_CRF_Model(bert_embed)
model.fit(train_x,
          train_y,
          x_validate=valid_x,
          y_validate=valid_y,
          epochs=20,
          batch_size=512)

model.evaluate(test_x, test_y)
kashgari.utils.convert_to_saved_model(model, model_path='ner_bert_model', version=1)

tf serving代码

@app.route('/bert/ner/predict/', methods=['POST'])
def ner():

    predict = request.get_data().decode('utf8')
    after_strip = strip(predict)
    test_x = [after_strip]
    processor = utils.load_processor(model_path='/home/user/nlp/ner/ner_bert_model/1')
    tensor = processor.process_x_dataset(test_x)

    # if you using BERT, you need to reformat tensor first
    # ------ Only for BERT Embedding Start --------
    tensor = [{
        "Input-Token:0": i.tolist(),
        "Input-Segment:0": np.zeros(i.shape).tolist()
    } for i in tensor]
    # ------ Only for BERT Embedding End ----------
    r = requests.post("http://localhost:8065/v1/models/ner_bert_model:predict", json={"instances": tensor})
    preds = r.json()["predictions"]

    # Convert result back to labels
    labels = processor.reverse_numerize_label_sequences(np.array(preds).argmax(-1))
    print(labels)

    contrast = ""
    for i in range(len(labels)):
        for j in range(len(labels[0])):
            contrast += labels[i][j] + ","
    result = get_frequency(after_strip,contrast)
    jason_form = result_to_json(result)
    return json.dumps(jason_form,ensure_ascii=False)

报错信息:

E0813 16:53:18.410378 139929044621056 app.py:1761] Exception on /bert/ner/predict/ [POST]
Traceback (most recent call last):
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "app_bert.py", line 34, in ner
    tensor = processor.process_x_dataset(test_x)
  File "/home/user/anaconda3/lib/python3.6/site-packages/kashgari/processors/base_processor.py", line 128, in process_x_dataset
    numerized_samples = self.numerize_token_sequences(target)
  File "/home/user/anaconda3/lib/python3.6/site-packages/kashgari/processors/labeling_processor.py", line 88, in numerize_token_sequences
    seq = [self.token_bos] + seq + [self.token_eos]
TypeError: can only concatenate list (not "str") to list

之前使用非bert embedding的模型这样做是OK的,可是加了bert embedding之后就在tensor = processor.process_x_dataset(test_x)报错了

xxxxxxxxy commented 5 years ago

我将 tensor = processor.process_x_dataset(test_x) 改为 tensor = processor.process_x_dataset([test_x]) 将tensor打印出来

[[101 100 102   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
    0   0   0   0   0   0   0   0   0   0]]

以下是我训练好的crf模型打印出来的tensor,post输入的内容与上面一致

    processor = utils.load_processor(model_path='/home/user/nlp/ner/tf_crf_model/5')
    tensor = processor.process_x_dataset(test_x)
    print(tensor)

[[ 513 309 672 ... 1111 11 6]]

如果我使用原来的crf模型进行process_x_dataset,加上bert模型对tensor进行转换的那段代码,然后用bert的模型进行预测,结果会报错:

Traceback (most recent call last):
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "app_bert.py", line 46, in ner
    preds = r.json()["predictions"]
KeyError: 'predictions'

另外,这个错误用crf训练的NER也会报,但是是间歇性地报错,大多数情况下是正常的

BrikerMan commented 5 years ago

可以用一下代码测试一下

    predict = request.get_data().decode('utf8')
    after_strip = strip(predict)
    test_x = [after_strip]
    processor = utils.load_processor(model_path='/home/user/nlp/ner/ner_bert_model/1')
    # 这里需要数组
    tensor = processor.process_x_dataset([test_x])

    # if you using BERT, you need to reformat tensor first
    # ------ Only for BERT Embedding Start --------
    tensor = [{
        "Input-Token:0": i.tolist(),
        "Input-Segment:0": np.zeros(i.shape).tolist()
    } for i in tensor]
    # ------ Only for BERT Embedding End ----------
    r = requests.post("http://localhost:8065/v1/models/ner_bert_model:predict", json={"instances": tensor})
    # 输出响应结果,看看有没有什么错误提示
    print(r.json())
    preds = r.json()["predictions"]
xxxxxxxxy commented 5 years ago

print(r.json()) 没有打印出提示

I0813 21:05:06.101413 139926684141312 _internal.py:122]  * Running on http://0.0.0.0:8064/ (Press CTRL+C to quit)
E0813 21:05:15.999591 139922853852928 app.py:1761] Exception on /bert/ner/predict/ [POST]
Traceback (most recent call last):
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "app_bert.py", line 46, in ner
    preds = r.json()["predictions"]
KeyError: 'predictions'
I0813 21:05:16.001384 139922853852928 _internal.py:122] 180.109.26.254 - - [13/Aug/2019 21:05:16] "POST /bert/ner/predict/ HTTP/1.1" 500 -
BrikerMan commented 5 years ago

试试 r.text 看看 tf-serving 服务端到底返回了个什么

咸鱼 notifications@github.com于2019年8月13日 周二21:06写道:

print(r.json()) 没有打印出提示

I0813 21:05:06.101413 139926684141312 _internal.py:122] * Running on http://0.0.0.0:8064/ (Press CTRL+C to quit)

E0813 21:05:15.999591 139922853852928 app.py:1761] Exception on /bert/ner/predict/ [POST]

Traceback (most recent call last):

File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app

response = self.full_dispatch_request()

File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request

rv = self.handle_user_exception(e)

File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception

reraise(exc_type, exc_value, tb)

File "/home/user/anaconda3/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise

raise value

File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request

rv = self.dispatch_request()

File "/home/user/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request

return self.view_functions[rule.endpoint](**req.view_args)

File "app_bert.py", line 46, in ner

preds = r.json()["predictions"]

KeyError: 'predictions'

I0813 21:05:16.001384 139922853852928 _internal.py:122] 180.109.26.254 - - [13/Aug/2019 21:05:16] "POST /bert/ner/predict/ HTTP/1.1" 500 -

— You are receiving this because you were assigned. Reply to this email directly, view it on GitHub https://github.com/BrikerMan/Kashgari/issues/199?email_source=notifications&email_token=ACHPKS3QP55PGTWJ2V5EY63QEKWV7A5CNFSM4ILIUFN2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD4FS5UI#issuecomment-520826577, or mute the thread https://github.com/notifications/unsubscribe-auth/ACHPKS7W6XNIG6EWJGULDRTQEKWV7ANCNFSM4ILIUFNQ .

xxxxxxxxy commented 5 years ago

{'error': 'Input to reshape is a tensor with 768 values, but the requested shape has 76800\n\t [[{{node Encoder-1-MultiHeadSelfAttention/Reshape_2}}]]'}

BrikerMan commented 5 years ago

这个说明发过去的请求就不对,可以在这里打印一下请求的 json 看看。

    # 请求数据
    print({"instances": tensor})
    r = requests.post("http://localhost:8065/v1/models/ner_bert_model:predict", json={"instances": tensor})
    # 输出响应结果,看看有没有什么错误提示
    print(r.json())
    preds = r.json()["predictions"]
xxxxxxxxy commented 5 years ago

我重新梳理一下这个问题:

  1. 一开始报错:TypeError: can only concatenate list (not "str") to list
   after_strip = strip(predict)
    #这里已经转为数组了
    test_x = [after_strip]
    processor = utils.load_processor(model_path='/home/user/nlp/ner/ner_bert_model/1')
    tensor = processor.process_x_dataset(test_x)
  1. 改为二维数组之后返回结果不对:
    after_strip = strip(predict)
    test_x = [after_strip]
    processor = utils.load_processor(model_path='/home/user/nlp/ner/ner_bert_model/1')
    # 这里需要数组
    tensor = processor.process_x_dataset([test_x])

请求文字:

央广网北京8月2日消息(记者陈欣 李鹏 周同 向勇)据中央广播电视总台中国之声《新闻和报纸摘要》报道,进入新时代,人民军队按照党中央和中央军委决策部署,牢固确立习近平强军思想在国防和军队建设中的指导地位,在中国特色强军之路上迈出了坚定步伐。今天推出《奋进在强军兴军的征途中》。 2019-8-2新闻和报纸摘要全文>>>

  八一前后,正值三伏。当老百姓们想方设法避暑纳凉的时候,中国军队实战化训练热度不减。

  在沙场点兵中练出真本领、打出好成绩,是中国军人庆祝自己节日的最好方式。在装备了我军最新型导弹的火箭军某导弹旅,一场全员、全装、全流程跨区满负荷转进演练正在展开。

  应对敌军偷袭、躲避卫星侦察、连续长途机动……在骄阳似火的日子里,他们在危局、险局、难局、困局中磨砺“大国长剑”。

  副旅长文郑杰:开展倒时差、抗疲劳、抗缺氧、抗饥饿状态下发射单元实装操作,让官兵更快地适应战场环境、提高应急处置能力,以优异的成绩向建军92周年献礼。

  走过了92年建军史、守护了新中国70年的人民军队本色不变、初心不改。如今,在习近平强军思想的引领下,这支队伍腾飞发展的方向更明确、思路更清晰。最新发布的《新时代的中国国防》白皮书中,也首次使用了习近平军事战略思想的表述。

  中央军委联合参谋部作战局蔡志军少将:军事战略思想是一支军队的旗帜引领。习近平主席在领导国防和军队建设、指挥现实军事斗争的伟大实践中,与时俱进、创新发展军事战略指导,形成了习近平强军思想,开辟了马克思主义战争观安全观的新境界,开辟了国防和军队现代化战略设计的新境界,是强军兴军的必然选择,是谋战胜战的客观需要,也是全军上下的共同期盼。

  在陆军第78集团军某合成旅,步兵、炮兵、装甲兵、侦察兵等多兵种攥指成拳,战斗力比改革前的传统兵种旅有了成倍的提升。经过几年时间的训练磨合,远比过去复杂的后勤装备保障课题,也被官兵顺利“拿下”。

  旅保障部部长陈亚健:细分类别和环节精准响应,迅速完成物资装载、弹药补给和机动准备,部队实现快速响应、快速机动、快速部署、快速应对。

  这种实战能力的跨越式提升,正是改革强军带来的硕果。从中央军委到基层部队,徐直军跟来一场革故鼎新的伟大变革,让人民军队焕发出更加蓬勃的朝气和生机。

  中央军委改革和编制办公室王伟大校:这次深化国防和军队改革总体上按照“三大战役”来打的。第一仗,率先展开领导指挥体制改革,重在解决体制性障碍;第二仗,压茬推进规模结构和力量编成改革,重在解决结构性矛盾;第三仗,着力深化政策制度改革,重在解决政策性问题。全军官兵坚决贯彻落实党中央、中央军委和习近平主席改革决策部署,汇集起改革强军的磅礴力量。

  从浴血荣光走来,向世界一流迈进。从联演联训到战备拉动,从强边固防到反恐维稳,从国际维和到远洋护航,从抢险救灾到扶贫帮困……新时代的中国军队始终冲锋在前,奋进在强军兴军的征途中。

返回结果:

[["O", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]",
"[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]",
"[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]",
"[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]",
"[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]",
"[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]",
"[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]",
"[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]"]]

打印出来的变量:

{'instances': [{'Input-Token:0': [101, 100, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'Input-Segment:0': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}

r.text

{
    "predictions": [[[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]
    ]
}
BrikerMan commented 5 years ago

找到问题了.... 需要对 after_strip 进行 tokenize 分字。先分字,然后 test_x = [分字后的句子]

咸鱼 notifications@github.com于2019年8月15日 周四14:40写道:

我重新梳理一下这个问题:

  1. 一开始报错:TypeError: can only concatenate list (not "str") to list

    after_strip = strip(predict)

    这里已经转为数组了

    test_x = [after_strip] processor = utils.load_processor(model_path='/home/user/nlp/ner/ner_bert_model/1') tensor = processor.process_x_dataset(test_x)

  2. 改为二维数组之后返回结果不对:

    after_strip = strip(predict) test_x = [after_strip] processor = utils.load_processor(model_path='/home/user/nlp/ner/ner_bert_model/1')

    这里需要数组

    tensor = processor.process_x_dataset([test_x])

请求文字:

央广网北京8月2日消息(记者陈欣 李鹏 周同 向勇)据中央广播电视总台中国之声《新闻和报纸摘要》报道,进入新时代,人民军队按照党中央和中央军委决策部署,牢固确立习近平强军思想在国防和军队建设中的指导地位,在中国特色强军之路上迈出了坚定步伐。今天推出《奋进在强军兴军的征途中》。 2019-8-2新闻和报纸摘要全文>>>

  八一前后,正值三伏。当老百姓们想方设法避暑纳凉的时候,中国军队实战化训练热度不减。

  在沙场点兵中练出真本领、打出好成绩,是中国军人庆祝自己节日的最好方式。在装备了我军最新型导弹的火箭军某导弹旅,一场全员、全装、全流程跨区满负荷转进演练正在展开。

  应对敌军偷袭、躲避卫星侦察、连续长途机动……在骄阳似火的日子里,他们在危局、险局、难局、困局中磨砺“大国长剑”。

  副旅长文郑杰:开展倒时差、抗疲劳、抗缺氧、抗饥饿状态下发射单元实装操作,让官兵更快地适应战场环境、提高应急处置能力,以优异的成绩向建军92周年献礼。

  走过了92年建军史、守护了新中国70年的人民军队本色不变、初心不改。如今,在习近平强军思想的引领下,这支队伍腾飞发展的方向更明确、思路更清晰。最新发布的《新时代的中国国防》白皮书中,也首次使用了习近平军事战略思想的表述。

  中央军委联合参谋部作战局蔡志军少将:军事战略思想是一支军队的旗帜引领。习近平主席在领导国防和军队建设、指挥现实军事斗争的伟大实践中,与时俱进、创新发展军事战略指导,形成了习近平强军思想,开辟了马克思主义战争观安全观的新境界,开辟了国防和军队现代化战略设计的新境界,是强军兴军的必然选择,是谋战胜战的客观需要,也是全军上下的共同期盼。

  在陆军第78集团军某合成旅,步兵、炮兵、装甲兵、侦察兵等多兵种攥指成拳,战斗力比改革前的传统兵种旅有了成倍的提升。经过几年时间的训练磨合,远比过去复杂的后勤装备保障课题,也被官兵顺利“拿下”。

  旅保障部部长陈亚健:细分类别和环节精准响应,迅速完成物资装载、弹药补给和机动准备,部队实现快速响应、快速机动、快速部署、快速应对。

  这种实战能力的跨越式提升,正是改革强军带来的硕果。从中央军委到基层部队,徐直军跟来一场革故鼎新的伟大变革,让人民军队焕发出更加蓬勃的朝气和生机。

  中央军委改革和编制办公室王伟大校:这次深化国防和军队改革总体上按照“三大战役”来打的。第一仗,率先展开领导指挥体制改革,重在解决体制性障碍;第二仗,压茬推进规模结构和力量编成改革,重在解决结构性矛盾;第三仗,着力深化政策制度改革,重在解决政策性问题。全军官兵坚决贯彻落实党中央、中央军委和习近平主席改革决策部署,汇集起改革强军的磅礴力量。

  从浴血荣光走来,向世界一流迈进。从联演联训到战备拉动,从强边固防到反恐维稳,从国际维和到远洋护航,从抢险救灾到扶贫帮困……新时代的中国军队始终冲锋在前,奋进在强军兴军的征途中。

返回结果:

[["O", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]", "[PAD]"]]

打印出来的变量:

  • instances:tensor

{'instances': [{'Input-Token:0': [101, 100, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'Input-Segment:0': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}

  • r.json() {'predictions': [[[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]]}

r.text

{ "predictions": [[[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]] ] }

— You are receiving this because you were assigned. Reply to this email directly, view it on GitHub https://github.com/BrikerMan/Kashgari/issues/199?email_source=notifications&email_token=ACHPKSYYWF2HZFMSNMGN2WTQET26NA5CNFSM4ILIUFN2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD4K7QHQ#issuecomment-521533470, or mute the thread https://github.com/notifications/unsubscribe-auth/ACHPKS6N4QJMVVFS6YI3FMDQET26NANCNFSM4ILIUFNQ .

xxxxxxxxy commented 5 years ago

明白了,谢谢你! 但是这样每请求一次就得加载一次bert模型进行分字,会影响响应速度,有没有优化加速的办法呢?

BrikerMan commented 5 years ago

这样,在定义请求方法之前,先初始化一个 tokenizer(只要 Tokenizer,不要 BERT 权重)。这样在接口启动时候之初始化一次 tokenizer,后期请求内只需要调用。大概代码如下:

from keras_bert import load_vocabulary, Tokenizer, get_checkpoint_paths

paths = get_checkpoint_paths(model_path)
token_dict = load_vocabulary(paths.vocab)
tokenizer = Tokenizer(token_dict)

@app.route('/bert/ner/predict/', methods=['POST'])
def ner():
    predict = request.get_data().decode('utf8')
    after_strip = strip(predict)
    test_x = [tokenizer.tokenize(after_strip)]

备注:load_vocabulary 可能是 keras_bert 后期引入的接口,如果提示找不到,先手动升级 keras_bert 框架到最新版本。等 Kashgari 下一个版本会更新 keras_bert 版本。

xxxxxxxxy commented 5 years ago

好的,谢谢你,问题已成功解决!

captain2017 commented 5 years ago

这样,在定义请求方法之前,先初始化一个tokenizer(只要Tokenizer,不要BERT权重)。这样在接口启动时候之初始化一次tokenizer,后期请求内只需要调用。大概代码如下:

来自 keras_bert import load_vocabulary,Tokenizer,get_checkpoint_paths

paths = get_checkpoint_paths(model_path)
token_dict = load_vocabulary(paths.vocab)
tokenizer = Tokenizer(token_dict)

@ app.route(' / bert / ner / predict / ',methods = [ ' POST ' ])
 def  ner():
    predict = request.get_data()。decode(' utf8 ')
    after_strip = strip(预测)
    test_x = [tokenizer.tokenize(after_strip)]

备注:load_vocabulary可能是keras_bert后期引入的接口,如果提示找不到,先手动升级keras_bert框架到最新版本。等Kashgari下一个版本会更新keras_bert版本。

[Errno 2] No such file or directory: 'tf_bert_model/1/vocab.txt'

BrikerMan commented 5 years ago

@captain2017 如果用这个方法初始化 tokenizer,需要自己手动拷贝 BERT 的 vocab.txt 到 f_bert_model/1 目录下。