内容来自于日常和开发同学的讨论整理。

主要归纳整理介绍命名实体识别,以及其在多轮对话中的运用。

命名实体的定义:命名实体是具有类型的对象词。 比如 “北京市”是一个命名实体,它的类型是 “地名”, 类似的还有 “李三” 是一个“人名”。

命名实体在多轮对话中的作用:对用户的输入的问题, 我们可以用下面的方式生成回答:

  1. 首先确定用户这句话是什么意图;
  2. 对于用户的话抽取实体;
  3. 走流程,返回一个答案。

例如,对于输入“我家宝宝17斤,可以穿多大码纸尿裤?”,

  1. 意图是 “根据体重查尺码”
  2. 实体:体重: 17斤, 品类:纸尿裤

根据上面这个例子,可以看出,命名实体现了用户的目标。对于用户的输入,如果不抽取实体,后台仅仅知道用户的意图是 “根据体重查尺码”, 显然这个是不足以生成一个回答。 如果抽取实体,可以知道用户想要的是 “根据体重查[纸尿裤]尺码, [体重]是[17斤]”, 这样可以精准的返回 “[17斤] 的宝宝适合 [M码] 的 [纸尿裤]”。

希望通过意图和实体来表示用户的问题是什么,用户问这个问题具体是想要什么。

命名实体识别方法概述:可以把目前碰到的命名实体分为两类:

  1. 不管这个词出现在什么语境里面,都很有可能是实体,比如纸尿裤,拉拉裤。那么可以简单认为只要这个词出现在用户的输入里面,那么这个词就是命名实体。可以称这类实体为垂直的行业相关的实体。对于这类实体,可以简单定义一个包含所有垂直实体字典,用查字典的方式识别
  2. 这类实体的识别需要依据上下文, 比如 28 号, 可以是一个日期,门牌号,人的 id 等,需要根据语境去区分; 再如 101 号,不可能是一个日期。 我们知道日期还有很多其他的很细的复杂的模式,而且出现的规则比较复杂,所以需要用模型从训练数据里面去学习这些规则。 这类实体一般都是可以跨行业共享的,通常称其为普通实体。