当前位置: 首页 > news >正文

大模型问答之时间语义解析方案调研

1. 引入

在处理时间语义解析的任务时,我们需要准确地从用户查询中提取出具体的时间范围,以便能够针对性地检索或分析特定时间段内的信息。

比如用户输入下面这样的问题:

  1. 近期有哪些值得看的娱乐新闻?
  2. 最近一年有哪些值得看的娱乐新闻?
  3. 180天之内有哪些值得看的娱乐新闻?
  4. 2020年儿童节到2023年万圣节之间有哪些值得看的娱乐新闻?

如何提取这种问题的时间范围呢?

2. 时间语义解析方案

在时间语义解析领域,针对如何有效提取和理解时间表达,存在多种潜在方案,每种方案都有其独特的优势与局限性。

  1. 穷举关键词法

此方法通过预设一个包含时间相关关键词的列表,来尝试匹配文本中的时间信息。其优势在于实现简单直接,但显然存在显著的缺点,即难以覆盖所有可能的时间表达形式,尤其是那些非标准或新颖的表达方式,因此容易导致信息遗漏。

  1. 命名实体识别(NER)

NER是一种自然语言处理技术,专门用于识别文本中的命名实体,如人名、地名、时间等。通过从头开始标注训练数据并构建模型,NER能够较为准确地识别出文本中的时间表达。此方案的优点在于实现快速且灵活,能够适应多种语言和时间表达形式。然而,其成本也相对较高,包括标注大量高质量训练数据的时间和人力成本,以及模型训练所需的计算资源。

  1. 大型语言模型(LLM)
    利用大型语言模型进行时间语义解析是一种潜力巨大的方法。然而,这种方法的一个显著缺点是模型回复耗时较长,在很多低成本领域,这个方案太重了。

  2. 正则表达式(Regex)

正则表达式是一种强大的文本处理工具,通过定义一系列字符模式来匹配和提取文本中的特定信息。在时间语义解析中,正则表达式可以被用来设计一系列规则,以捕获文本中的时间表达。相比于穷举关键词法,正则表达式具有更高的灵活性和准确性,能够匹配更多样化的时间表达形式。然而,其缺点同样在于难以覆盖所有可能的情况,特别是当时间表达形式变得复杂或不规则时,可能会导致信息遗漏。尽管如此,正则表达式在处理结构化或半结构化文本时通常表现出色,且实现成本相对较低。

现有工具/方案,也基本是上面几种方案(或者多个方案的组合)的思路。下面会选取其中几个工具做些测评(ubuntu22.04+python3.11)。

3. 实测jionlp

jionlp,开源项目见参考1。从其解析时间的源码(参考2)中,可以看到,它主要是通过正则表达式、关键词加上一些节假日规则”,来实现时间语义解析的。它能做到“精确匹配”、“模糊匹配”等不同的规则匹配。下面是几个实测的例子:

(1)

import jionlp as jio
jio.parse_time('近期有哪些值得看的娱乐新闻?  ')

运行报错ValueError: can not parse the string 近期有哪些值得看的娱乐新闻?`.

(2)

import jionlp as jio
jio.parse_time('最近一年有哪些值得看的娱乐新闻? ')

输出

{'type': 'time_span','definition': 'blur','time': ['2023-08-29 00:00:00', '2024-08-28 13:46:21']}

对于这个例子,解析是正确的,能给出解析后的具体的时间范围。

(3)

import jionlp as jio
jio.parse_time('2020年儿童节到2023年万圣节之间有哪些值得看的娱乐新闻?  ')

输出

{'type': 'time_span','definition': 'accurate','time': ['2020-06-01 00:00:00', '2023-10-31 23:59:59']}

对于这个例子,解析是正确的,能给出解析后的具体的时间范围。

4. 实测Time_NLP

参考3给出了Time_NLP的链接,这个项目没法用pip安装,需要下载后,作为第三方库导入使用。原理上,从源码来看(参考4,5,6),他也是利用正则表达式,结合一些节假日的定义,来做到的。

(1)

import sys
sys.path.append("Time_NLP/") 
from TimeNormalizer import TimeNormalizer
tn = TimeNormalizer()
res = tn.parse(target="近期有哪些值得看的娱乐新闻? ")
print(res)

输出:

{"error": "no time pattern could be extracted."}

(2)

import sys
sys.path.append("Time_NLP/") 
from TimeNormalizer import TimeNormalizer
tn = TimeNormalizer()
res = tn.parse(target="最近一年有哪些值得看的娱乐新闻? ")
print(res)

输出:

{"type": "timedelta", "timedelta": {"year": 1, "month": 0, "day": 0, "hour": 0, "minute": 0, "second": 0}}

对于这个例子,解析是正确的,能给出解析后的具体的时间范围。

(3)

import sys
sys.path.append("Time_NLP/") 
from TimeNormalizer import TimeNormalizer
tn = TimeNormalizer()
res = tn.parse(target="2020年儿童节到2023年万圣节之间有哪些值得看的娱乐新闻? ")
print(res)

输出:

{"type": "timespan", "timespan": ["2020-06-01 00:00:00", "2023-01-01 00:00:00"]}

这个例子中,儿童节提取正确,万圣节提取错误。

5. 总结

从初步测试结果来看,jionlpTime_NLP效果好,而且Time_NLP已经很久没有更新了。但是Time_NLP有java版本(参考8),而且还有升级后的java版本xk-time(参考7,xk-time是在Time_NLP基础上做了改进)。但是jionlp只有python版本。

6. 参考

  1. jionlp. https://github.com/dongrixinyu/JioNLP
  2. https://github.com/dongrixinyu/JioNLP/blob/master/jionlp/gadget/time_parser.py
  3. https://github.com/zhanzecheng/Time_NLP
  4. https://github.com/zhanzecheng/Time_NLP/blob/master/resource/holi_lunar.json
  5. https://github.com/zhanzecheng/Time_NLP/blob/master/resource/holi_solar.json
  6. https://github.com/zhanzecheng/Time_NLP/blob/master/resource/regex.txt
  7. https://github.com/xkzhangsan/xk-time
  8. https://github.com/shinyke/Time-NLP
http://www.dtcms.com/a/439418.html

相关文章:

  • 性能网站建设me微擎怎么做网站
  • 《强化学习数学原理》学习笔记7——从贝尔曼最优方程得到最优策略
  • 商城手机网站设计wordpress只显示标题插件
  • Avalonia桌面应用发布到Ubuntu22.04
  • 网站开发免费视频播放器wordpress users
  • 手机号注册网站企业形象设计公司
  • 创可贴网站怎么做图片织梦网站修改教程视频教程
  • 使用万网怎么做网站桂林人论坛
  • Windows逆向工程入门之小数类型
  • 网站上传到万网主机网站建设导航栏变化
  • 网站建设结课策划书影视公司网站模板
  • 如何快速建一个网站大理高端网站建设
  • AI 智能体的运行模式
  • 串扰10-影响串扰的因素
  • 宜春做网站哪里好类似于wordpress的
  • 制作网站得多少钱apicloud影视源码
  • 深州市住房保障和城乡建设局网站在线教育网站html模板
  • AI 编程:重塑开发范式的三大核心方向与实践探索
  • --- 常见排序算法汇总 ---
  • 惠州网站开发公司网站建设与网页设计的区别
  • 打折网站建设教程下载做二手衣服的网站有哪些
  • 空间里怎么放多个网站wordpress 5.0.2编辑器
  • 国土局网站建设方案网络营销是网上销售吗
  • 微商怎么做网站西安公司注册核名
  • 做视频网站要什么格式网站建好后
  • 自己怎么做网站空间宁波外发加工网
  • Redis配置文件(redis.conf)
  • 网站做可信认证多少钱网站建设的意义是什么
  • 网站开发后台指什么商务网站建设定义
  • 合肥思讯网站建设广东建设项目备案公示网站