在春季,我们启动了
Dialogs平台,使您可以为Alice创建技能并识别用户的语音请求。 最初,技能开发人员必须自己解析查询。 例如,在文本中找到地址。 现在,平台接管了这部分工作。
今天,我们将向Habr读者介绍有关命名实体的识别(命名实体识别; NER)以及技能开发人员的新机会。

我们相信,语音接口将是未来。 现在,在许多情况下,用户更喜欢使用语音而不是屏幕键盘。 例如,开车时。 或找到简单问题的快速解答。 或在躺在沙发上的“城市”中玩耍。 但是对于这种情况越来越多,仅识别文本中的声音是不够的。
语音界面类似于搜索引擎查询。 我们并不总是确切地了解如何制定我们的要求,以便准确地找到我们所需要的。 在互联网形成之初,这是一个大问题,因为搜索引擎仅搜索查询中单词的确切出现位置。 所以有了声音。 如果我们不知道我们期望哪个团队,那么我们将猜测很长时间。
良好的语音界面不应使人陷入死胡同。 通常,技能开发人员可以通过两个技巧来解决此问题。 首先,使用屏幕上的按钮提示预期的答案。 这是一个很好的做法,我们建议您不要忽略它。
而且,技能的创造者试图将复杂的问题分解为一系列较简单的问题,对这些问题的答案更容易预测。 此外,在某些情况下,要求用户严格按照某种形式和大小写发音单词。 这种方法的问题在于它不再被称为自然交流。 约定和限制越多,语音控制与使用键盘和按钮的区别就越小。 理想情况下,用户应像与人一样自由地与服务进行通信。
用户可以说“谢谢! 将订单交付给托尔斯泰16号,然后交给谢尔盖·谢尔盖耶夫(Sergey Sergeyev),而不是将其分解成一系列有关街道,门牌号码,姓名和姓氏的问题。 但这将要求开发人员进一步分析收到的答案。 您可以由操作员手动执行此操作,但是由于操作员流量大,将需要大量操作。 而且操作员不太可能实时执行此操作,因此该技能将失去立即澄清丢失信息的机会。 您可以开发一种技术,该技术将自动在文本中找到重要信息,对其进行分类,规范化和保存。 但这是一项相当艰巨的任务。
为了有效地从文本中提取有用的实体并按类型正确地对它们进行分类,该服务必须在两个重要方向上都有经验。 首先,您需要能够收集有关什么是对象的知识。 如果您在“词典”中没有列夫·托尔斯泰大街,那么在处理请求时,很容易将其与该人的名字混淆并跳过它。 另一方面,同样重要的是能够从用户的原始文本中找到这些对象。 至少要考虑俄语的形态,以便找到“ Sergey”一词并变成“ Sergey”。
碰巧的是,Yandex在这些领域有很多经验。 搜索技术既用于搜索新对象,又用于解析用户查询。 现在,这些技术也可供Alice的技能开发人员使用。
在对话框中识别命名实体
用户发出命令后,我们的平台会识别其文本并提取描述特定对象的单词和短语。 目前,对话框可以识别:
-名称;
-位置指示;
-日期和时间;
-整数和小数。
有关已识别对象的信息将与用户的响应文本一起发送到技能服务器。 考虑一个例子:
“晚上10点在谢尔盖·谢尔盖耶夫(Sergey Sergeyev)的列夫·托尔斯泰16号上订购披萨”
我们的平台知道托尔斯泰不仅是一个人,而且还是一条街道。 她还考虑到在街道名称旁边的地址中通常会指示门牌号码。 因此,技能请求将包含以下块:
{ "type": "YANDEX.GEO", "value": { "house_number": "16", "street": " " } }
位置不仅可以包括街道和房屋,还可以包括城市,乡村甚至机场。
使用名称,其工作方式几乎相同。 该平台可以找到姓名,姓氏,中间名并将其带入主格。
{ "type": "YANDEX.FIO", "value": { "first_name": "", "last_name": "" } }
数据规范化是识别命名实体的重要功能。 如果对于地址和名称,此属性不是很明显,那么使用日期和时间,则一切都更加清楚。 “晚上10点”会自动变为“ 22”。 明天和后天明确增加日期。
{ "type": "YANDEX.DATETIME", "value": { "hour_is_relative": false, "hour": 22 } }
数字识别也不应被低估。 例如,来自用户的文本中的“十分之四点十分”将变成:
{ "type": "YANDEX.NUMBER", "value": 4.5 }
有兴趣吗? 我们邀请您阅读
文档 。 如果仍有问题,欢迎来
Telegram聊天。 在
博客上跟踪其他平台新闻很方便。