-
Notifications
You must be signed in to change notification settings - Fork 407
时间语义实体抽取
这项工作最适合用 LLM 来完成,单纯靠 jio.ner.extract_time
难以满足召回率。
prompt 主要包括简洁和详细几种,针对不同的模型和方式。
-
详细版,适用于直接调用大公司 api,如 gpt、豆包等
``` ”直到8月21日,“股神”的直播号、微信公众号以及APP全部关闭,电话也停机后,全国一百多名股民这才恍然大悟。 ``` 按以下字段抽取上文中的时间实体, - time_string:时间实体字符串,即在原文中的形式。 - complete_time_string:时间实体明确语义的形式,需要结合时间基点来进行确定,如果信息不充分的情况下,保持原字符串即可,不要联想和编造时间实体。 - time_type: 时间类型,包括 - time_point:时间点, 即事件发生如果在一刻完成,类型即为时间点; - time_span:一段时间, 即事件发生如果持续一段事件,时间实体类型就是该类型; - time_delta:时间长度, 即不做时间状语的时间长度表达,如`十七年时间`,`4秒钟`等; - time_period:时间周期, 即周期性事件发生时间; - time_query:时间问词, 即不确定的时间疑问,如`哪天`, `几月几号` 等; - time_other:其它时间类型, 即不属于以上类型的时间实体,一般抽取意义不大。 - event: 时间对应关联的发生事件,该字段应当尽量简短。 - parsable: 时间实体是否可解析(可选,如果时间实体可以解析,该字段可以不标出,如果不可解析,则必须标出) 其中,文本的时间基点是 "2024-11-17 18:06:59"。 返回结果以 json 形式给出,若有多条时间实体,每一条时间实体json占据一行(不格式化),按序给出。
-
输出:
{"time_string": "8月21日", "complete_time_string": "2022年8月21日", "time_type": "time_point"}
```
每次下雨的周末,提醒我检查窗户。
```
按以下字段抽取上文中的时间实体,
- time_string:时间实体字符串
- complete_time_string:时间实体明确语义的形式
- time_type: 时间类型
- event: 时间关联的事件
- parsable: 时间实体是否可解析
以 json 形式返回。其中,文本的时间基点是 "2024-11-17 18:06:59"。
-
输出:
{"time_string": "每次下雨的周末", "complete_time_string": "每个下雨的周末", "time_type": "time_period", "parsable": false}
抽取的时间实体应当是在句子中充当时间状语的,表达了某一件事发生的时间。比如:
-
各位观众大家晚上好今天是12月15日(星期三,农历十一月十二),欢迎收看今天的焦点访谈节目
,这里,时间实体今天是12月15日(星期三,农历十一月十二)
应当被抽取出来; -
那个,记得喊我一下,大后天上午十点钟整,我给孩子老师打电话。
,这里大后天上午十点钟整
应当被抽取出来; -
但三年后,也就是1996年,一度申请了破产保护
, 其中三年后
实际上和1996年
是一个含义,重复含义的时间实体不应当被多次抽取,所以不能被当作时间实体,只保留1996年
即可,因为这个时间更加明确;
某些文本中包括时间字符串,但这些并非真的指时间,此时需要删除,LLM 不应当返回这种实体。例如,
-
据《每日经济新闻》记者早前多次调查显示
,其中每日
不能被当作时间实体; -
微信图片_20191105103151.jpg 下载附件 保存到相册 7小时前 上传
, 其中20191105
虽然是时间字符串,但它表示的是一个文件名,不能被当作时间实体; -
“毋忘在莒”2019莒县国际半程马拉松赛事
, 其中2019
指的是一个赛事名,不能被当作时间实体; -
工业和信息化部发布《中国区块链技术和应用发展白皮书(2016)》
, 其中2016
不能被当作时间实体; -
但三年后,也就是1996年,一度申请了破产保护
, 其中三年后
实际上和1996年
是一个含义,所以不能被当作时间实体,只保留1996年
即可; -
秦皇岛港煤炭库存持续减少,4月底跌至466万吨,按月下降41%
, 其中按月
是指的一种计算方式,不能被当作时间实体; -
也因为有你,从此不再深夜仿徨
,其中深夜
实际上并不具体特指,不能被当作时间实体; -
今天的镇江发生了翻天覆地的变化
,其中今天
是虚指,不能被当作时间实体; -
截至目前,QDII总规模为855.08亿元,较去年同期902.88亿元的规模同比下滑5.6%。
,其中,去年
仅仅修饰数字信息,一词不能被列为实体。但如果真的把该实体当作时间类型抽取出来,那么其类型也必须为time_other
。
需要根据时间实体所描述的事件针对性判断。例如,
-
国庆节期间原则上不安排大规模的国省干线公路养护施工
, 其中,国庆节期间
描述了持续的一段时间,因此类型就是time_span
。 -
截至2019年9月底,全县自种自养达省发展标准贫困户4339户
,其中,2019年9月底
虽然是一段模糊的时间,但该句中,实际上指的是一个时间点,因此,时间类型就是time_point
。 -
取得3:30以内完赛成绩的男跑者和取得4:00以内完赛成绩的女跑者
,其中,3:30
和4:00
指的是比赛的时间长度,因此类型是time_delta
。 -
11月13日,傅村所民警在义乌将涉嫌盗窃的犯罪嫌疑人邹某抓获。
,其中,11月13日
虽然指的是一天的时间,但句子描述的是一个事件的发生时间点,因此类型是time_point
。 -
陈鸿志就在选举那天早上起来把他家门堵住,不让他出来,让他没机会参加选举。
,其中,那天早上
指的是一段时间,描述事件也是一个持续的过程,因此类型是time_span
; -
每一年生产力必须再提升三三%。
,其中,每一年
已经涉及到时间周期,因此类型是time_period
。 -
唐军入选2017年福布斯中国30U30金融与风险投资行业代表性人物
, 其中,2017
虽然也代表了时间含义,但它并非表示一个时间状语,也就是它不表示一种具体事件发生的时间,因此,类型是time_other
。 -
轮流于每年十月展出四十天。
,其中,每年十月
是time_period
类型,四十天
是time_delta
类型,时间长度。 -
张俊,男,汉族,1963年3月出生,安徽濉溪人
,其中,1963年3月
,虽然长度跨度较长,但它仅指事件发生的时间点,time_point
类型,时间点。 -
小伙子哪年参加工作的啊?
,哪年
是一种时间状语,但它属于疑问类型,time_query
类型。 -
考核不合格者将被清退出乳山市房产销售市场,五年内不许再入市
,五年内
指的是未来五年内,但是,它指的是一种假定时间,它依赖的时间基点不是固定的,而是基于被清退出销售市场
的一种抽象假定时间,因此,该时间类型应该是time_other
类型。
从上面的例子可以看出:
-
time_point
和time_span
类型的差别主要在于所在时间发生的事件,究竟是一刻即发生完,还是整个时间段内持续发生。发生一刻,就是time_point
,持续时间内均有效,则是time_span
类型。 -
time_span
和time_delta
类型的主要差别在于持续时间究竟是否能映射到现实时间轴中。如果指现实当中的一段具体时间段,则是time_span
类型,如果指的是单纯的一段时间长度,如5天
,两个半月
,则是time_delta
类型。
补全语义信息要限定在 JioNLP 时间解析工具 可以解决的范围内,并且模型补全语义,要限定在模型充分信息基础上,不能在信息不充分的时候开始臆想和编造。例如:
-
时间字符串,
今天
, 类型为time_point
, 时间基点2025-01-12
,那么,补全后的时间字符串就可以改成2025年1月12日
,或2025-01-12
;因为结合时间基点,日期是完全确定的。 -
时间字符串,
2-3年
,类型为time_delta
,时间基点2014-05-10 08:50:39
,那么,该时间字符串不需要补全,原封不动即可,jionlp 解析工具可以处理该类型。 -
时间字符串,
7月以来
,类型为time_span
,时间基点为2004-08-01 19:04:00
,那么,该时间字符串可以补全为2004年7月以来
,因为结合时间基点,仅需要补全年份,而年份是完全确定的。 -
时间字符串,
五年内
,类型为time_span
,所在句子为五年内不许再踏入此地一步
,时间基点是2014-07-26 12:57:50
。由此可以看出,句子中的时间指的是未来五年内
。因此,年份是确定的,可以将字符串补全为2014年7月26日至2019年7月26日
。 -
时间字符串,
去年10月
,类型为time_point
,时间基点是2029-08-07 04:42:12
。由此可以看出,句子中语义补全的仅仅是年份,可以补全为2028年10月
。 -
时间字符串,
第二天
,类型为time_point
,时间基点是2024-12-31 20:20:12
。可以简单判断,基点为公历2024年最后一天,第二天就是公历2025年第一天,因此可以补全为2025年1月1日
。 -
时间字符串
下半年
,类型为time_span
,时间基点为2007-10-20 08:03:10
。由此可以推理,下半年其实是2007年的下半年,可以补全为2007年下半年
。 -
时间字符串
下个周末
,类型为time_point
,所在句子为设定下个周末的露营行程闹钟。
,时间基点是2024-06-10 00:09:37
,由此可以看出,计算下一周,以及下一周末其实需要依赖日历查询,因为周信息很难用 LLM 来存储,所以,直接保持该信息固定不变,不进行补全,交由 jionlp 解析工具处理即可。 -
时间字符串
下周三早上七点钟
,类型为time_point
,所在句子是嘿,小爱,下周三早上七点钟,我要去赶飞机,能帮我设个闹钟吗?
。时间基点是2024-08-24 21:59:27
,由于不确定星期的具体信息,也就无从确定具体是哪一天,因此就无法做到利用模型来推理,所以保持时间实体信息不变,交给jionlp来处理。同理,凡是涉及周的信息,都需要利用规则来解析,不能让大模型来补全。 -
时间字符串
明年的春分
,时间基点是2029-07-20 14:08:16
,由此可以看出,仅需确定是哪一年的春分即可,而春分的具体日期,属于农历,每年会有变动,此时信息不充分,不能判断准确的春分日期,因此需要交由jionlp来处理。由此,可将时间实体补全为2030年春分
。同理,凡是涉及节日、农历等日期,都是不方便进行补全的,保持原样即可。 -
时间字符串
万圣节那天晚上
,句子是小爱同学,万圣节那天晚上,记得提醒我准备糖果,孩子们会来要糖的。
, 时间基点是2024-05-10 20:28:04
,因此可以确定万圣节年份是固定的,即2024年,但具体万圣节是哪一天,不太确定,需要更充分的信息才行,因此,可以将实体补全为2024年万圣节晚上
。 -
时间字符串
下个月最后一天下午6点前
,时间基点2024-09-22 19:04:02
,由此可以看出,下个月也就是10月,10月有 31天,下午6点,也就是标准时间 18:00:00 。所以,可以把时间实体补全为2024年10月31日18:00:00
。
综上例子可以看出:
-
当要补全的信息比较固定,比如公历年份、月份,日期等,标准计时等,都可以通过 LLM 自动补全;
-
当要补全的信息每年都有变动,比如农历月份、日期,节假日等,需要参考额外的信息,此时就保留信息,交给 jionlp 解析器去处理。
有些时间实体,可以抽取,但是不可解析的。因此在返回结果的时候,如果时间实体不可解析,那么就需要多标出一个字段 parsable=False
,但是 如果可以解析,那么就可以忽略不做标出,当然如果标出 parsable=True
也是正确的。
-
2012年7月的那个月圆之夜,他吻了我
,其中,2012年7月的那个月圆之夜
信息不充分,难以确定具体是哪一天,因此,该实体可以抽取为time_point
。但是无法解析,可以标记一个解析字段parsable=False
。 -
后来,他下江闯荡,成了汉口最大的船货商
,其中,后来
,是时间字符,但信息不充分,不可解析,因此,可以抽取为time_span
,但需要标出parsable=False
。 -
每次月食的时候,提醒我观看
,其中,指定时间不明确,需要标出parsable=False
。