首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何改进我的spaCy模型以完美地识别坐标?

如何改进我的spaCy模型以完美地识别坐标?
EN

Stack Overflow用户
提问于 2019-07-15 17:36:52
回答 2查看 928关注 0票数 1

我使用奇妙的奇迹训练了一个用于自定义命名实体识别的模型,但它不能识别以下坐标:

“但太阳的长度是7°51‘24”,距离火星很远。

正如你所看到的,它给了我:

7°长51‘24“

但是它应该是这样的

7°51‘24“LONG有人能告诉我为什么会这样吗?

更多详细信息:

我使用正则表达式对标签进行了如下注释:日期、时间、坐标,然后使用Prodigy训练我的自定义命名实体识别

https://prodi.gy/?gclid=Cj0KCQjwyLDpBRCxARIsAEENsrLs2bbv7QT-d7lq88ZHkYaxPjI9L3aR23uRQGgWOBV1spM5WGV_LrIaAv6pEALw_wcB

我首先对每个标签执行了以下步骤

1-使用此命令编辑注释(例如,用于经度)

代码语言:javascript
复制
python -m prodigy ner.manual an_ner_date_time_02 en_core_web_sm AN_NER_DATE_TIME_01.jsonl  --label LONG

通过正则表达式编辑(由注释器)我的带注释的数据。然后我合并了我的数据集。下一阶段是通过以下方式构建模型

2-构建模型(用于所有合并的数据)

代码语言:javascript
复制
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,

所以现在我有一个模型,它的结果是:

代码语言:javascript
复制
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

它可以像您在此处看到的那样对数据进行注释(单击链接)

(https://ibb.co/rtQm5B9)

问题是模型不能学习完美的坐标,因为你可以看到7°长51‘24“它应该是7°51’24”长

被错误地标注了(然而,它在训练集中被正则表达式标注正确,但在测试集中被模型标注为no!)

你知道如何改进这一点吗?

第二个问题,如何使用ner的结果对句子进行分类?

EN

回答 2

Stack Overflow用户

发布于 2019-08-03 19:50:53

既然你试图识别的命名实体是非常具体的,一个坐标,它的形状是定义良好的,为什么不使用模式/规则,例如正则表达式?

票数 1
EN

Stack Overflow用户

发布于 2019-08-05 16:51:41

在这里您可以看到正则表达式可以完美地注释LONG (我在regex101.com中对其进行了测试)

代码语言:javascript
复制
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看起来像是长的结构(多个单词),但它是正确的,我真的不知道问题是什么!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57036993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档