我正在浏览我的邮件,并看到gmail自动建议我在2月21日的活动中添加coming friday around 5pm
。我很惊讶gmail是如何做到这一点的?
我的意思是,它是如何正确地弄清楚这个星期五意味着即将到来的星期五,以及下午5点与周五有关。
我是NLP和机器学习的新手,所以如果有人能以外行的方式向我解释,我会很高兴
答案 0 :(得分:4)
我认为这不需要大量的机器学习。一点NLP有助于从句子中获取依赖关系,但即使这不是绝对必要的。
您可以从关注monday
,tuesday
等关键字开始,然后查看周围的内容last monday
,next monday
,{ {1}},coming monday
等等。这些被称为窗口功能,因为它们为您感兴趣的功能previous monday
提供了一个窗口+/- 1,2,3 ...
。你理论上也可以通过查看窗口特征来获得monday
,我对这样的嘈杂情况没有直觉。试着想一想在这种情况下表达时间的所有方法,然后想想这些方法可以与其他东西混在一起。在我的头脑中,这样做似乎相对容易。
无论如何,另一种方法是使用依赖解析器来提取句子中元素的语法关系。这需要您将部分语音(POS)标记为句子(将其拆分为标记后)。需要对POS标记器进行培训,以识别around 5pm
和friday
是名词,甚至可能是时间表达式,monday
和5pm
也是如此。这确实需要机器学习和很多。谷歌与其他人相比的好处是,他们拥有大量的数据,这使他们能够拥有大量的许多实例和不同的方式来表达基本相同的东西。这给他们的模型带来了很大的广度。一旦你有一个标记为POS的句子,就把它提供给依赖解析器(例如Stanford Dependency Parser),它会告诉你句子中所有不同标记之间的关系是什么。
Google再次提供了大量有用的数据。最重要的是,谷歌已经花了数年时间来磨练模型的输出,这样当模型不能完全确定发生了什么时,它就不会突出显示/提取结果。在现实世界中实际应用NLP方面,最后一步非常重要,因为它让人们对系统正在做的事情充满信心。基本上,如果软件不确定发生了什么,什么也不做,因为做某事冒着做错事,从而降低了人们对整个系统的信心。
发布可靠易用的NLP应用程序需要在NLP /机器学习和一般软件工程的质量之间进行权衡,以隐藏NLP失败的所有部分。
尝试使用以不同方式表达的时间向自己发送电子邮件,并查看Google获取哪些内容以及哪些内容不适用。例如