构建机器人的一个常见步骤是定义 "意图"。
一个意图可能是 "重置密码"、"预订机票 "或 "联系支持"。机器人开发人员需要在软件中输入多个短语,这些短语的含义都与意图相同。例如,"我想飞往巴黎 "就是 "预订航班 "意图的一个短语。
一般来说,机器人开发平台会要求用户输入许多特定意图的短语。这些短语是自然语言处理(NLP)算法的训练数据。
NLP 算法是一种机器学习算法,通过对数据进行自我训练,能够识别意义相同但单词不同的短语(与训练数据相比)。
NLP 算法使用机器人开发者提供的意图数据和大量有关该语言的数据(之前已对其进行过训练)来校准其内部模型,以便能够识别新短语。
聊天机器人开发者给 NLP 算法提供的例子越多,它就能越准确地识别其他措辞不同的短语中的相同含义。至少这是给机器人开发者的信息。
问题是,所有的训练数据并不都一样。数据的质量和数量同样重要。
例如,假设我想创建一个名为 "重置密码 "的意图。
机器人作者可能会开始创建以下短语:
重置密码
我忘记了密码
我的密码失效了
请输入新密码
密码问题
等等。
上面的问题在于,所有短语都使用了同一个词 "密码"。这就意味着,当算法对这些数据进行训练时,它会识别出这样一条规则:如果短语中有 "密码 "一词,那么其意图就是 "重置我的密码"。这当然是错误的。人们还可以说出许多不含 "密码 "一词的短语,但其含义与 "重设我的密码 "相同。也有很多短语含有 "密码 "一词,但并不表示 "重设我的密码"。
在算法领域,这个问题被称为训练数据的过度拟合。算法对 "密码 "一词过度拟合,因此 "相信 "每一个包含 "密码 "一词的短语都意味着 "重设我的密码"。
出于同样的目的,还有其他例子。例如,机器人开发人员可以输入以下短语:
我的证书失效了
我的登录不起作用
我的密码失效了
我的用户名失效了。
等等。
当然,这是问题的一个更极端的例子,但这种模式在创建训练数据时很常见。这同样会导致算法过度拟合数据,但这次拟合的是 "不起作用 "这个短语。
希望现在解决方案已经显而易见。训练数据中的每个短语都需要尽可能与数据集中的其他短语不同。例如
我的证书失效了。
我需要重置密码。
如何解决登录问题?
谁能帮我登录系统?
等等。
当然,创建类似上述的数据集需要花费更多精力。甚至可以打开词库查找同义词,以激发对短语的想法。
机器人开发人员克服这一问题的另一种方法是访问客户服务聊天数据,这些数据提供了许多真实客户提出相同问题的所有方式的示例。这些数据非常宝贵。
有一个问题是,NLP 算法什么时候才能在仅有少量训练数据集的情况下表现出色。让机器人仅使用少量数据集就能完美运行,无疑是更好的选择。这肯定是研究人员正在研究的问题,因为这不仅能减少创建chatbots 所需的时间和精力,还能大大提高其质量。
对于大多数机器人开发人员来说,NLP 算法是一个黑盒子。但重要的是,他们必须了解算法工作的基本原理,这样才能知道需要向算法提供什么样的训练数据(意图数据),以获得最佳结果。