Siri其实说白了是两个子部分构成,一个就是语音识别,另一个就是识别后的自动问答。而自动问答最主要依赖的技术就是自然语言处理(NLP)。自然语言处理说白了就是让机器跟人一样读懂语言,并且依据此生成必要的输出。楼主说的两个问题其实都是机器在自然语言理解上出了问题。(当然,针对题主所遇到的第一个情况,更大的可能还是滴滴没有提供相应接口导致siri压根就没理解滴滴打车是个什么鬼)
自然语言处理所有的困难,归根结底就是一个问题:二义性(ambiguity)。
这种二义性,体现在语法、句法、语义的各个方面。
举个最经典的栗子,也是英文NLP算是最常被引用的一个二义性例子:
I saw her duck with a telescope
请大家先努力的读三遍这个句子,确保明白了它的含义。
然后我们开始讲故事。
按照天朝人民的平均英语能力,大多会自然的理解成:
I saw her duck with a telescope
我用望远镜看到了她的鸭子
也就是介个样子:
英语稍微好一点的童鞋,会知道saw还有“锯”的意思,于是这个句子就变成了类似这样的意思:
不过,和这个图不同的地方在于,锯鸭子用的不是锯子,而是一把望远镜。
I saw her duck with a telescope
我用望远镜锯她的鸭子。
到这里内心已经能感受到一丝丝凌乱和狰狞。
想象力再丰富一点的童鞋,可能还会畅想一种伟大的场景同样也符合这个句子的描述。那就是这个鸭子是个神鸭子,是个会拿望远镜的鸭子。于是就衍生出了NLP界最著名的句法二义性问题pp attachment问题,也就是介词性短语(with a telescope)到底修饰的是谓语saw还是宾语duck。如果修饰的是duck,那么上述的两种情形就会变成:
I saw her duck with a telescope
我看到她的鸭子拿着一个望远镜。
以及
I saw her duck with a telescope
我锯了她的一只拿着望远镜的鸭子。
脊背发凉啊我勒个去
不过这还远远没有完。。。
考过GRE的童鞋会跳出来指出,其实就连duck在这里都可以还有另一个合理的意思,来来来一起查词典:
也即是“弯腰”的意思。
这下好,上面已经提到的四种意思,一下子又能各自出现一个变种。其中前两个还算正常:
I saw her duck with a telescope
我用望远镜看到她弯下了腰
I saw her duck with a telescope
我看到她拿着一个望远镜弯下了腰
然后就越来越丧心病狂:
I saw her duck with a telescope
我用望远镜把她锯得弯下了腰。
I saw her duck with a telescope
我把拿着望远镜的她锯得弯下了腰。
尼玛,人家姑娘只不过拿了个望远镜,招你惹你了。
各位可以发现,每一个二义性,都会使得句子的可能意义的数量指数级上升。虽然其中大多数意义极少被使用,但对于机器来说,是很难做出有效判断的。就上述例子而言,我用望远镜看到她弯下了腰和我用望远镜看到了她的鸭子,都是英文文本中非常可能出现的意义。而这种二义性只有通过上下文才能够消解。而人类是因为拥有一些常识(所谓priori或者common sense),所以能排除掉那些明显不合理的可能。
同理,如果我们搞的再复杂一点:
I saw her duck with a telescope in the garden.
二义性会指数级的爆炸。因为in the garden可能修饰的是I,可能是her,可能是duck,可能是telescope。最荒谬的意义可能就是:我把拿着花园里的望远镜的她锯得弯下了腰。
到这里大家应该可以看到,pp attachment问题是英文二义性问题的重要来源。从NLP的角度来说,很多时候就会导致所谓non-projective dependency的场景(请自行参阅相关论文)。在中文中,由于介词短语通常都会紧紧的attach在被修饰对象之前,因此这个问题可以说几乎不存在。所以在中文NLP中,更多的还是词性和词义本身的二义性造成的。
比如题主所举的两个例子,一个是词性理解差错(以为回家是名词;如果不是没理解什么是滴滴打车的话),一个是语义理解差错(以为出租车是一个日程安排)。在缺乏上下文,只有一个单独的问题,又缺乏相应使用历史的时候,这种二义性是极其难以被消解的。
所以大家真的不要为难siri了,她是真的不了解你啊。
最后说说我所从事的医疗NLP。我们天天打交道的,就是大家一直觉得跟天书一样的病历:
。。。。
其实,手写病历的识别是个计算机视觉问题,并不属于自然语言处理范畴。医院的电子化,给我们这些NLP狗带来了重大利好。终于有美丽整齐的文本可以处理啦:
看到这里,NLP汪们深深的松了一口气。
可惜,想象和现实总是有差距的。医生不会因为放下笔头、拿起电脑,就变成圣人。该NLP买单的,还是得买。
“唇稍绀”是什么鬼?
“臂丛+腰硬”是什么黑科技?
还有离谱的
主诉:尿尿尿不出尿来3天
动不动还能搞出这种:
全身浅表淋巴结未触及肿大,头颅无,五官端正
头都没了你还治个什么鬼?
一般而言,病历NLP是不需要做句法分析的,因为医生的用语往往都简单异常,掐头去尾,用大量的并列短语来简介的概括一段事实。没有必要识别什么主谓宾定状补。
于是NLP汪们兴高采烈:不用做parsing啦!
直到有一天遇到这么个病历:
主任冒着漫天大雪,一步一步的走入病房,紧紧的握住病人的双手,亲切的问道:好点了没?
#教你如何用尽量长的句子表达尽可能少的意思#
NLP汪们也经常会说,病历语义明确,不需要做共指代消歧义!(共指代消歧义就是说在类似“奥巴马上了车,他头很痛”这样的句子中,识别出“他”指代的对象是奥巴马)
直到有一天遇到这么个病历:
今查房,症状同前,体查同前,治疗同前
好啦,话归正题,其实医学NLP和前面说的普通NLP一样,最主要要解决的就是二义性问题。比如,呼吸音粗和小腿变粗,虽然都是粗,但是临床意义是完全不同的。
另一种二义性的反向体现,就是一个意义有无数种表达,比如巴宾斯基症这么一个体征,我们可爱的医生们就能写出五百种写法:
巴林斯基征、巴氏征、巴宾斯基征、巴宾斯基、babinski征、巴彬斯基征、babinskisign…
#我知道你们忙,但你们能不能稍微认真点。。#
事实上,我们医学NLP汪,就是想帮中国的医生们,一方面不用再忍受写病历的折磨。你们随心所欲,我们来收拾烂摊!另一方面,你们写了这么多病历,总要产生点价值吧?有了NLP,你们埋藏在病历中的知识宝藏(希望不是糟粕。。),就都能被挖出来咯!
P.S. 感谢osu的黄亮老师,I saw her duck这个例子最初就是很多年前从黄老师的PPT里看到的。