我使用奇妙的奇迹训练了一个用于自定义命名实体识别的模型,但它不能识别以下坐标:
“但太阳的长度是7°51‘24”,距离火星很远。
正如你所看到的,它给了我:
7°长51‘24“
但是它应该是这样的
7°51‘24“LONG有人能告诉我为什么会这样吗?
更多详细信息:
我使用正则表达式对标签进行了如下注释:日期、时间、坐标,然后使用Prodigy训练我的自定义命名实体识别
我首先对每个标签执行了以下步骤
1-使用此命令编辑注释(例如,用于经度)
python -m prodigy ner.manual an_ner_date_time_02 en_core_web_sm AN_NER_DATE_TIME_01.jsonl --label LONG通过正则表达式编辑(由注释器)我的带注释的数据。然后我合并了我的数据集。下一阶段是通过以下方式构建模型
2-构建模型(用于所有合并的数据)
python -m prodigy ner.batch-train data_merged_v06 en_core_web_sm --output Model_12 --n-iter 10 --eval-split 0.2 --dropout 0.2 --no-missing问:我怎样才能有更好的关于long,
所以现在我有一个模型,它的结果是:
BEFORE 0.008
Correct 36
Incorrect 4438
Entities 2802
Unknown 0
# LOSS RIGHT WRONG ENTS SKIP ACCURACY
01 110.744 1614 163 1683 0 0.908
02 98.563 1660 107 1719 0 0.939
03 98.472 1668 96 1724 0 0.946
04 96.250 1673 93 1731 0 0.947
05 96.192 1679 80 1730 0 0.955
06 96.108 1678 71 1719 0 0.959
07 94.347 1681 67 1721 0 0.962
08 96.472 1679 66 1716 0 0.962
09 98.936 1681 57 1711 0 0.967
10 96.175 1681 57 1711 0 0.967
Correct 1681
Incorrect 57
Baseline 0.008
Accuracy 0.967它可以像您在此处看到的那样对数据进行注释(单击链接)
问题是模型不能学习完美的坐标,因为你可以看到7°长51‘24“它应该是7°51’24”长
被错误地标注了(然而,它在训练集中被正则表达式标注正确,但在测试集中被模型标注为no!)
你知道如何改进这一点吗?
第二个问题,如何使用ner的结果对句子进行分类?
发布于 2019-08-03 19:50:53
既然你试图识别的命名实体是非常具体的,一个坐标,它的形状是定义良好的,为什么不使用模式/规则,例如正则表达式?
发布于 2019-08-05 16:51:41
在这里您可以看到正则表达式可以完美地注释LONG (我在regex101.com中对其进行了测试)
regex_patterns = [
re.compile(r"\d{1,3}\s?°\s?\d{1,2}\s?[\'|’]\s?\d{1,2}\s?[\"|”|“]\s?[A-Z][a-z.]+" #LONG in format
"|\d{1,3}\s?°\s?\d{1,2}\s?[\'|’]\s?\s?[A-Z][a-z.]+"
"|\d{1,3}\s?°\s?\d{1,2}\s?[\'|’]\s?\d{1,2}\s?[\"|”|“]"
"|\d{1,3}\s?°\s?\d{1,2}\s?[\'|’]"
"|\d{1,3}\s?°\s?[A-Z][a-z.]+")
]但我不知道为什么训练后会有一些错误(错误这不是问题,但我想知道为什么它给了我一部分广度)
就像你在这里:

就像第三行一样:8 37是注释的,但是->8 37双子座在第四行是正确的7是注释的但是->7 51 21是正确的
另一个注释是可以的,即使对于时间,我们有10h 50m看起来像是长的结构(多个单词),但它是正确的,我真的不知道问题是什么!
https://stackoverflow.com/questions/57036993
复制相似问题