如何从文本中提取时间和日期

我在查看邮件时,发现Gmail自动建议我将coming friday around 5pm添加到2月21日的事件中。我很惊讶Gmail是如何做到这一点的?我是说,它是如何正确地判断出这个星期五指的是即将到来的星期五,并且还将5点与星期五联系起来的?

我对自然语言处理和机器学习是新手,所以如果有人能用通俗易懂的语言向我解释,我会非常高兴的


回答:

我认为这并不需要很多机器学习。一些自然语言处理有助于从句子中获取依赖关系,但即使没有这些也是可以的。

你可以从查找关键词mondaytuesday等开始,然后查看它们周围的内容,如last mondaynext mondaycoming mondayprevious monday等等。这些被称为窗口特征,因为它们为你感兴趣的特征monday提供了一个窗口+/- 1,2,3 ...。理论上,你也可以通过查看窗口特征来获取around 5pm,我没有直觉认为这会有多嘈杂。试着想出在那个语境中表达时间的所有方式,然后考虑这些方式可能会与其他东西混淆。凭我的直觉,这似乎相对容易做到。

无论如何,另一种方法是使用依赖解析器来提取句子中元素的语法关系。这需要你对句子进行词性(POS)标记(在将其分成词元之后)。词性标记器需要被训练以识别fridaymonday是名词,可能甚至是时间表达式,同样的,5pmaround 5pm也是如此。这确实需要机器学习,而且需要很多。谷歌相对于其他公司的优势在于他们拥有大量数据,这使他们能够拥有大量不同表达方式的例子,这些表达方式本质上是相同的东西。这让他们的模型具有很广的覆盖面。一旦你对句子进行了词性标记,你就将其输入到依赖解析器中(如斯坦福依赖解析器),它会告诉你句子中所有不同词元之间的关系。

同样,谷歌拥有大量数据,这很有帮助。除此之外,谷歌已经花了多年时间来完善模型的输出,以便当模型对发生的事情不太确定时,它不会高亮/提取结果。在现实世界中实际应用自然语言处理时,最后这一步非常重要,因为它让人们对系统所做的事情充满信心。基本上,如果软件不确定发生了什么,就什么也不做,因为做一些事情可能会做错事,这会降低人们对整个系统的信心。

发布一个可靠且易用的自然语言处理应用程序需要在自然语言处理/机器学习的质量与一般的软件工程之间进行权衡,以隐藏自然语言处理失败的部分不让用户看到。

试着给自己发送一些以不同方式表达时间的电子邮件,看看谷歌能识别哪些,不能识别哪些。例如

  • 我们下周五见面可以吗?
  • 下周五下午2点喝咖啡怎么样?
  • 我周五不行,但我周三下午4点可以见面

等等,探索技术中的漏洞总是很有趣的。这也可以揭示很多关于它在做什么,以及它是如何做的信息。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注