PaddlePaddle / PaddleNLP

👑 Easy-to-use and powerful NLP and LLM library with 🤗 Awesome model zoo, supporting wide-range of NLP tasks from research to industrial applications, including 🗂Text Classification, 🔍 Neural Search, ❓ Question Answering, ℹ️ Information Extraction, 📄 Document Intelligence, 💌 Sentiment Analysis etc.
https://paddlenlp.readthedocs.io
Apache License 2.0
12.16k stars 2.94k forks source link

[Bug]: 使用文档中的信息抽取示例,返回结果错误 #6497

Open zhupeifox opened 1 year ago

zhupeifox commented 1 year ago

软件环境

- paddlepaddle:2.5.0
- paddlepaddle-gpu: 
- paddlenlp: 2.5.2

重复问题

错误描述

使用默认模型和uie-m-base执行文档中的示例输出结果错误,采用其他模型实例化TaskFlow会报错

稳定复现步骤 & 代码

默认模型没有输出

>>> schema = {'竞赛名称': ['主办方', '承办方', '已举办次数']}
>>> ie.set_schema(schema)
>>> pprint(ie('2022语言与智能技术竞赛由中国中文信息学会和中国计算机学会联合主办,百度公司、中国中文信息学会评测工作委员会和中国计算机学会自然语
言处理专委会承办,已连续举办4届,成为全球最热门的中文NLP赛事之一。'))
[{}]
>>> schema = {'地震触发词': ['地震强度', '时间', '震中位置', '震源深度']}
>>> ie.set_schema(schema)
>>> ie('中国地震台网正式测定:5月16日06时08分在云南临沧市凤庆县(北纬24.34度,东经99.98度)发生3.5级地震,震源深度10千米。')
[{}]
>>> schema = ['时间', '选手', '赛事名称']
>>> ie.set_schema(schema)
>>> pprint(ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!"))
[{'时间': [{'end': 0, 'probability': 0.38375470608772133, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.39899208132823105, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.3746573792602703, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.41999090381011683, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.4211167727178662, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.40984195165295034, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.3890998002596717, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.38899213567708557, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.4237102155271941, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.35350172527159884, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.3434197161273289, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.3495464369224841, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.36071070634754676, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.42532521532331913, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.34532799305722506, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.3559558730867849, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.36333770090465123, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.41192579762746817, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.39806917282149357, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.3383973169221335, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.42958384756288837, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.4384116371887714, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.37518049631401595, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.3185378144308544, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.4113488348109371, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.3875376257139891, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.3934694711034865, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.42685694250953077, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.38048666807355147, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.4161413795044737, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.40003642659536354, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.37141052266394325, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.4314356680445144, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.41717647980782147, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.3917597183426835, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.41714952440746345, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.4131070577982143, 'start': 0, 'text': ''},
         {'end': 0, 'probability': 0.45434766384062186, 'start': 0, 'text': ''},
         {'end': 43,
          'probability': 0.3965935301904082,
          'start': 42,
          'text': '牌'},
... ...

使用其他模型如"uie-medical-base"报错

>>> from paddlenlp import Taskflow
>>> from pprint import pprint
D:\Project\electronicrecordslibrary\TextTranslator\.venv\lib\site-packages\_distutils_hack\__init__.py:33: UserWarning: Setuptools is replacing distutils.
  warnings.warn("Setuptools is replacing distutils.")
>>> schema = ['时间', '选手', '赛事名称']
>>> ie = Taskflow('information_extraction', schema=schema, model ="uie-medical-base")
[2023-07-25 17:07:10,043] [    INFO] - We are using <class 'paddlenlp.transformers.ernie.tokenizer.ErnieTokenizer'> to load 'C:\Users\wavetop\.paddlenlp\taskflow\information_extraction\uie-medical-base'.
>>> pprint(ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Project\electronicrecordslibrary\TextTranslator\.venv\lib\site-packages\paddlenlp\taskflow\taskflow.py", line 850, in __call__      
    results = self.task_instance(inputs)
  File "D:\Project\electronicrecordslibrary\TextTranslator\.venv\lib\site-packages\paddlenlp\taskflow\task.py", line 516, in __call__
    outputs = self._run_model(inputs)
  File "D:\Project\electronicrecordslibrary\TextTranslator\.venv\lib\site-packages\paddlenlp\taskflow\information_extraction.py", line 1066, in _run_model
    results = self._multi_stage_predict(_inputs)
  File "D:\Project\electronicrecordslibrary\TextTranslator\.venv\lib\site-packages\paddlenlp\taskflow\information_extraction.py", line 1164, in _multi_stage_predict
    result_list = self._single_stage_predict(examples)
  File "D:\Project\electronicrecordslibrary\TextTranslator\.venv\lib\site-packages\paddlenlp\taskflow\information_extraction.py", line 977, in 
_single_stage_predict
    self.predictor.run()
RuntimeError: (PreconditionNotMet) The meta data must be valid when call the mutable data function.
  [Hint: Expected valid() == true, but received valid():0 != true:1.] (at ..\paddle\phi\core\dense_tensor.cc:122)
  [operator < fill_constant > error]
530154436 commented 1 year ago

同问,我也遇到了这个问题,一开始还正常,多试几次就出现这个问题了。 版本信息:

输出结果: [{'时间': [{'text': '', 'start': 0, 'end': 0, 'probability': 0.49772918763574836}, {'text': '', 'start': 0, 'end': 0, 'probability': 0.4606171505433707}, {'text': '', 'start': 0, 'end': 0, 'probability': 0.4309845872979565}, {'text': '', 'start': 0, 'end': 0, 'probability': 0.47212286262275427}, {'text': '', 'start': 0, 'end': 0, 'probability': 0.4680275567550609}, {'text': '', 'start': 0, 'end': 0, 'probability': 0.4840861215975849}, {'text': '', 'start': 0, 'end': 0, 'probability': 0.49470774915779003}, {'text': '得', 'start': 40, 'end': 41, 'probability': 0.41582459259130644}, {'text': '', 'start': 0, 'end': 0, 'probability': 0.47560984291659736}, {'text': '', 'start': 0, 'end': 0, 'probability': 0.4548387038428814}, {'text': '时', 'probability': 0.4996731917415218}, {'text': '', 'start': 0, 'end': 0, 'probability': 0.45014341194098506}, {'text': '金', 'start': 41, .....

fYoghurt commented 1 year ago

同样的问题。只有第一次输出是正常的,之后的结果都不对。 在降级到以下版本后恢复正常。(怀疑高版本有bug)