我们在邀请嘉宾的时候,总是希望他们的演讲内容能窥见这个行业的未来,这就要求他们必定是在行业多年的大咖,对行业技术发展有着绝对深刻的认知,并在这条道路上继续前行。
正如我们所期待的,畅捷通技术委员会主席李鲲先生,通过诸多极具代表性的案例,分享了“自然语言处理在企业应用中的实践”。
语言处理听起来是很高大上的,但自从B2C业务价值高涨之后,2B简直就成了苦逼的代名词,语言处理和苦逼的2B业务看起来是很难融合在一起的。
最典型的自然语言场景是,你有一个问题,我可以直接给你答案。谷歌也有这样的产品,可以问它一些相对复杂的问题,比如某一个队得冠军的时候,当时美国总统是谁,类似这样的问题它都可以回答。
在上图的右边是我们看到的一个典型企业应用的界面,在几十年前,这样一个界面可以卖很多钱,而且这样的界面越多,卖的钱越多。比如SAP,就可以卖几百万美元。
但是今天我们看到这样一个界面,会觉得很LOW,那么多的字段需要填进去,每个字段还有各种限制。
但是实际上企业也确实需要,这些界面提供了那么多的字段,企业还可能说能不能自定义一些字段。那么,我们怎么来解决这样的问题?
在这里,我简单介绍几个小场景,看看做这样的场景会遇到什么样的挑战,然后介绍一下畅捷通在这方面做了什么样的尝试。
我们能不能通过手机端录入数据?
在座的大多数人都是做IT行业的,对于各位而言,随身带一个笔记本电脑或许是一件挺正常的事。但如果我是一个批发商,给我的零售客户补货,去拜访客户的时候,零售商说我缺了什么商品要进货,多数情况下,跑去做补货登记的业务员带了什么东西在身上呢?
笔记本电脑几乎是不可能的,一般而言就只是带了手机。但我们知道在一个小小的手机上做数据的录入,是非常痛苦的。而且这还不是简单录一项或者两项,有可能要录好几十项,每一项还有不同的数量。
面对这样的场景,我们想把对应的产品做得用户觉得好用,就希望能够通过自然语言的方式录入信息来实现。比如:对着手机说“要花生油30瓶”等,只需要说,数据就录进去了,这是我们希望实现的场景。
在这个场景下,我们面临什么样的问题呢?
我们知道,现在市面上已经有很多自然语言识别的输入法,把语音输入法直接套进去行不行呢?实际上,我们会发现会出现很多错误识别的情况。
我们在尝试,能不能用自然语言来做结构化数据的录入?
比如我买了办公用品,买了XX原材料,这是企业发生的一项实际的业务。到了企业的后台需要转化成结构化的数据,在我们这里会转化成计账凭证,对应的有科目、具体的金额。
同样我们也会面临语音输入和识别的一些错误。
这里,我们看到数字基本都识别正确了。但买原材料并不是我们日常交流中经常出现的,所以语音识别就将“银行支付”识别成“以后这个”,这样的情况下,我们就很难直接用这款产品做数据的输入。
在这个过程中,我们尝试了用三种技术来解决这个问题:
我们来看一下RNN是什么?
首先,它是一个神经网络。今天听起来很流行,但它却是在大概60—70年前就提出来的概念,经过输入层到中间的隐藏层,再到输出层。
这是一个具体的例子,我们有一个输入值,中间有一些隐藏的节点,最后到输出层。从数学来讲,是通过大量的训练,把中间所有这些边的权值算出来。
比较实用的一种叫卷积型神经网络。CNN非常适合处理图片、图像、语音,我们刚刚看的神经网络是全连接,CNN用图像举例的话是一个个局部的特征做计算,把特征提取出来,然后把不明显的特征忽略掉。最后一层是用标准的神经网络做全连接的分类,最后来识别。
举一个简单的例子:我们要识别一张汽车的图片,会从最基础的一块一块的特征去识别,然后去采样,再做铺垫,经过多层以后,最终识别出来这是一辆汽车。
这是最简单的应用,而实际上现在的CNN更多的是我们所谓的深度学习,不仅仅要识别整张图片代表的是什么,它时常和RNN结合在一起,要识别出某张图片里有多少个不同的物体,每个物体是什么?它们有什么关系?
另外一种是循环神经网络RNN,这也是最近十多年的时间里,发展非常快的一种神经网络类型。
其特点是,把传统的神经网络变成按照时序可以去处理、每一个时间点实际上是神经网络的状态。下一个时间点的输出是由当前的输入和上一个时间点的中间状态去决定的,所以它可以用来解决一个按照时间发生的序列的问题。
2003年就有人提出来这样的模型,把自然语言用循环神经网络来实现,本质上就是要解决这样一些问题:
比方:预测。假如我说的话是“不习惯安卓,我买了一个苹果”,那么最后预测可能出现的是什么?可能符合人类自然语言的就是手机。
如果我说“中午吃了隔壁那家店的苹果”,后面目的会出什么?可能是“苹果派”。
它除了可以用来做预测,还可以用来做评测。比如通过自然语言的识别,识别出来一句话,或者根据机器翻译出来的一句话,我们判断这两句话哪个更符合人类的语言。
具体来说,可以是:“安卓系统不习惯,我买了一个苹果”。还有一种就是“安卓系统不喜欢我,我买了一个苹果”。单纯从语法上面看没有问题,但是我们看到第一句话是适合人类的自然语言。
对我们来说,其实我们在这方面主要是做了一个特定的领域——在财务领域里,我们用RNN做了一个语言模型。
说到人工智能、深度学习,最重要的一点是什么——我们的数据从哪里来?
没有数据,什么技术都不管用,我们可以举一个例子:大家或许都有关注到今年3月份的时候,微软曾经上线了一个机器人,名字叫“派”。
但实际上,它只在线上运行了16个小时就被迫下线。因为这个机器人设计的原则就是在跟人互动的时候去学习人的语言和人的交互方式,但因为跟它互动的网友怀着“恶意”去和它讲话,最后它就说出了一些非常惹人生气的话。
其语言是不受控的,和它互动的人说什么,他就学什么。正因如此,24小时不到就被迫下线了。
我们要做财务领域的模型,就选择了自己的会计社区,因为在这里面有大量的会计进行交流,包括怎么样把一个业务做好等等。还有我们自己软件的服务社区,以去掉敏感信息的,经过用户允许的用户数据来做这样的领域模型。
具体来说,报销差旅费这种很典型的场景我们可以做预测。比如出现“报”,后面可能是“销”。
还有一个应用的场景,我们可以把音节转换成汉字。刚才我们在纠错的环节有重要的一点——通过语音识别输入法的应用,音可能是对的,但是文字可能是不对的。
比如“借备用金”,在财务里面是很标准的说法,但是我们通常的语言环境里面,这并不常见。通过我们的数据,就可以训练出适合于这个财务领域使用的语言模型。
经过我们的测算,发现通过RNN做到了语言的高度精准,已经超过了汉字传统的方式去做的性能。
我们使用了一个Encoder-Decoder框架,最后用中文的解码器输出,还可以用于聊天机器人做图片的描述。
比如可以用一个CNN做编码,然后用RNN输出语言。可以描述一段视频,说明这个视频在干什么。
用在我们企业的领域,我们希望能做到的是——我们做了一个领域的语言模型以后,可以应对不同的输入。比如语音的输入,或者是拍照,或者是扫描等等。通过这样的模型,可以分别训练。当然,我们刚提到的音字转换,也是非常典型的使用Encoder-Decoder框架的地方。
如果用户直接用方言来输入怎么办?
我们看到在通常的情况下,各地的方言其实有一些特征,这是可以仔细去打磨的。
如果是用汉字匹配很难匹配上,于是,我们把汉字拆成一元组、二元组。和拼音的元音辅音分别拆开之后,同时考虑到常见的发音错误,最后我们发现“新发久咬”,其元音前面的X其实是可以匹配的,然后发的“A”后面的辅音也是可以匹配的。
通过扩展这些匹配的音字以后,很多方言就可以在我们最终的相似度计算中得到比较高的分值。
最后,我们形成了综合的纠错系统。通过云输入得到可能错误的汉字,我们重新做拼音标注,然后通过我们的Encoder-Decoder框架得出候选的汉字串,再通过语言模型输出最终纠错后的汉字。
我们在各个地方做了统计,用户直接用方言输入,即使是在许多地方方言和普通话相差非常大的地区,其用户语音识别率可以达到86%以上。其中的价值显然是无须赘述的。
点击图片或标题即可阅读
为了走向云端,Oracle数据库也蛮拼的!
营销效果远不如预期?因为你还没有真正了解,你的用户是谁!
工业4.0下,企业智能制造的未来在哪里?
【深扒】崔牛盒子——几个老男人生的孩子长什么样?
技术给SaaS产品插上翅膀
通用云平台巨头之争,AWS和Azure在架构上谁更胜一筹?
原文始发于微信公众号(牛透社):都说2B是“苦逼”的代名词,“高大上”的语言处理真的难以和“苦逼”的2B业务结合?