我认为这不需要大量的机器学习。一点 NLP 有助于从句子中获取依赖关系,但即使这样也不是绝对必要的。
您可以从查看关键字monday、tuesday 等开始,然后环顾四周,看看它们周围有什么last monday、next monday、coming monday、previous monday 等等上。这些被称为窗口功能,因为它们在您感兴趣的功能monday 周围提供了一个窗口+/- 1,2,3 ...。 around 5pm 理论上您也可以从仅查看窗口功能中获得,我不知道那会有多嘈杂。试着想想在那种情况下表达时间的所有方式,然后想想这些方式可以与其他东西混合在一起。在我看来,这样做似乎相对容易。
无论如何,另一种方法是使用依赖解析器来提取句子中元素的语法关系。这需要您对句子进行词性 (POS) 标记(在将其拆分为标记之后)。词性标注器需要接受训练以识别 friday 和 monday 是名词,甚至可能是时间表达,5pm 和 around 5pm 也是如此。这确实需要机器学习和很多东西。与其他公司相比,谷歌的优势在于他们拥有大量数据,这使他们能够拥有大量不同方式的示例来表达本质上相同的事物。这使他们的模型具有很大的广度。将句子 POS 标记后,将其提供给依赖解析器(例如 Stanford Dependency Parser),它会告诉您句子中所有不同标记之间的关系是什么。
再一次,Google 有大量数据可以提供帮助。最重要的是,谷歌多年来一直在磨练模型的输出,这样当模型不能完全确定发生了什么时,它就不会突出显示/提取结果。就在现实世界中实际应用 NLP 而言,最后一步非常重要,因为它让人们对系统正在做什么充满信心。基本上,如果软件不确定发生了什么,则什么也不做,因为做某事有做错事的风险,这会降低人们对整个系统的信心。
发布一个可靠且易于使用的 NLP 应用程序需要在 NLP/机器学习的质量和通用软件工程之间进行权衡,以向用户隐藏 NLP 失败的所有部分。
尝试以不同的方式向自己发送带有时间的电子邮件,看看 Google 会收到哪些邮件,哪些没有。比如
- 我们下周五可以见面吗?
- 下周周五下午 2 点喝杯咖啡怎么样
- 我不能去周五,但我可以在周三下午 4 点见面
等等,在技术上戳漏洞总是很有趣的。它还可以揭示很多关于它在做什么以及它是如何做的。