如果我们必须从 python 中的用户查询中提取开始日期和结束日期,如何训练像 CRF 这样的监督序列分类器

数据挖掘 机器学习 Python nlp 命名实体识别
2022-02-19 17:06:48

我必须在 python 中构建一个聊天机器人,用户可以在其中申请休假。我想从用户查询中提取开始日期和结束日期。我对几种算法进行了一些研究,发现 CRF Entity Extractor 是最好的。我现在想在 python 中看到类似的实现解决方案,我可以将其用作参考。我希望看到从训练数据集到从查询中预测开始和结束日期的端到端解决方案。请帮忙。

例如:

1.query:“我想从4月2日到4月5日请假。” 预计日期:“02-04-2020”和“05-04-2020”

1.查询:“我想下周一请假” 预计日期:“09-03-2020”

1个回答

我不确定使用 CRF 构建模型是否是最好的方法。这需要大量的训练数据和努力才能让它像你想要的那样工作。在大多数情况下,日期是相当结构化的,因此有更直接的方法来提取它们。例如,斯坦福大学的 SUTime library完全符合您在问题中所描述的内容。虽然它是基于 Java 的,但它有一个Python 包装器例如,对于以下输入:

query = 'I need a desk for tomorrow from 2pm to 3pm'

使用 SUTime Python 包装器,这是您将得到的解析结果:

[
    {
        "end": 26,
        "start": 18,
        "text": "tomorrow",
        "type": "DATE",
        "value": "2016-10-14"
    },
    {
        "end": 42,
        "start": 27,
        "text": "from 2pm to 3pm",
        "type": "DURATION",
        "value": {
            "begin": "T14:00",
            "end": "T15:00"
        }
    }
]