编者按:此文是一篇简要的技术说明文档,应相关客户以及技术人员的需要,将下半年实现的一个用于智能语音回访(使用了TTS以及ASR技术)的平台内的语句匹配引擎做了一番简单的解读。这篇文章可以视为2018年下半年部分技术工作的小小总结。
一、前言
智能回访平台通过ASR收集客户的输入内容,并基于此找到与其最匹配的话术词库或规则,然后决定相应的流程走向。这个过程中,一个精准、高效、适应性强的词库匹配引擎是必不可少的。
精准,就是当客户说A的时候,引擎应该能将其识别为A,而不是B。
高效,就是引擎要足够的高效,在实现功能的基础上,对空间(内存)和时间(cpu)的占用要少。
适应性强,就是引擎对于客户说A,以及说A的同类和相似内容,仍能够识别为A,而不是识别不出,或者识别成了B。
二、技术实现
引擎的功能依托于以下一些技术:
- 中文分词技术
我们的分词方案,是以一份包含了1万6千多词(以及字)的词库(含词性和词频数据,基于2000万字的文章资料汇总而成)为基础,基于动态规划算法,以整句当中词组的词频乘积最大为依据(概率最高),作为分词依据。
实践证明,基于此词库以及算法,再结合自定义的热词,可以达到较好的分词效果。
而分词则是后续相关算法的一个重要基础。
例子:我说我现在出差在外地啊
分词结果:我r 说v 我r 现在nt 出差v 在p 外地nl 啊e
词性说明:r代词,v动词,nt时间名词,p介词,nl地域名词,e语气词
- 语句相似度(匹配度)计算
一个句子,与其他一些句子的相似度是多少?这个问题看似简单,实际上涉及到以下一些问题:
- 一个句子的核心内容是什么?怎样来精简地表示它。
比如,当客户输入:我说我现在出差在外地啊
那么,其核心的内容是:我现在出差外地
引擎通过对语句的语法以及词性构成进行分析,从而得到其核心语义,并基于此核心语义进行后续运算。
2. 怎么计算句子的核心语义的相似度
目前,在中文语义相似度的计算方面还没有一个较好的通行的算法。而在中文/英文句子的相似度方面,业内有许多既有的算法,比如以下这些:
编辑距离计算,杰卡德系数计算,TF 计算,TFIDF 计算,Word2Vec 计算。
针对智能回访的场景,我们借鉴了前述一些算法的思路,形成了自己的算法。实践证明,这个算法具备了较高的可用性。
在实践过程中,我们还引入了以下技术来提高引擎的健壮性、适应性以及灵活性:
- 自动断句
实践中我们发现,从ASR得到的文本内容,常常会出现用户的多个语句内容叠加在一起的情形,比如“啊对对对你是哪位啊”。如果不对其进行自动断句的处理,而直接当作一个句子进行后续分析,则会出现问题。
- 自定义热词
对于一些特定领域例如金融领域的词汇,引入自定义热词机制,可以有效地提高引擎匹配算法的精准度。
- 同义词
引入同义词的目的是为了让匹配的适应性更强,同时也在一定程度上减轻运维人员配置各类词库以及规则的工作量。通过设计合适的同义词,可以让配置工作事半功倍。
例如:配置一个语料(我 know),然后将 know 的同义词设成:知道、了解、明白、清楚、知晓,这样就省去了配置 我知道,我了解,我明白等等这些语料了。