一种车辆实体识别策略

珷玞  |  2017. 11. 20   |  阅读 600 次
服务端

命名实体识别(Named EntitiesRecognition, NER)的目的是识别语料中的人名、地名、组织机构名等。由于这些命名实体的数量是不断增加的,通常无法穷举出,所以在实际应用场景中需要根据命名实体的构成规律制定其识别策略。

背景

在目前的车辆搜索中,部分用户会根据个人习惯输入文本信息,输入形式多种多样,有如“宝马”、“奥迪”这类标准车辆实体,也有形如“宝马多少钱”、“奥迪A615款”这类带有语义性质的文本,或者输入包括错别字的信息,如“抱马”、“澳迪”等;在此应用场景下,部分案例可以通过建立词典树进行query重写来解决,但是稍复杂的情况则需要能够准确识别出车辆实体(本文中的车辆实体主要表现形式为车辆品牌名称和车系名称)来提取可检索的字段。但由于车辆实体没有明显的边界词汇,传统命名实体识别通过扫描边界词语的方式来触发,例如人名有姓氏作为上界,地名有院、公司、县、村等词语作为下界,因此传统的实体识别方法很难对车辆实体进行有效识别。此外,车辆相关信息既包含中文又包含英文信息和数字,如价格、汽车配置等对车辆实体抽取带来较大干扰,现有方法的兼容性也较差。

车辆实体识别策略

流程图 方法流程如上图所示。主要包含两个模块:

角色抽取模块

该模块的功能是将输入的原始自然语言信息映射成角色序列。本方法将车辆的内部组成、上下文等与车辆识别相关的成分称为车辆的构成角色,简称角色。角色抽取流程如下:

  • a.通过人工制定的简单规则从标准车型库和语料库中提取角色特征,生成角色集合。提取的角色如下表所示。该步骤只需统计少量的角色特征,其他包含角色特征的词语可通过后续的步骤增量扩充进来。
编码含义示例
C车辆实体奔驰,宝马520i,奥迪A6
D车辆组成元素奔,迪,澳
K车辆的上文考虑,置换,询问
K车辆的下文价格,开价
A以上之外其他的角色
  • b.对输入的自然语言文本信息进行分词等文本预处理操作,然后将文本映射成角色信息序列,该过程称为角色抽取。例如输入源文本“预算30万,考虑入手宝马”,分词后序列为“预算/30万/,/考虑/入手/宝马/”,转换成角色序列为“KAAKKC”。

实体识别模块

角色抽取过程相当于对文本信息做了一次粗划分,实体识别模块的作用是准确定位车型实体所在的子串。步骤如下:

  • a.如果文本-角色映射序列中包含车辆实体角色,则直接输出该车辆实体。在角色抽取模块中,为提升方法的准确率和效率,事先将标准车型库中的车辆实体直接添加进角色集合中。

  • b.如果角色序列中不包含车辆实体角色,对文本-角色映射序列进行最大模式匹配,匹配策略可以有多种选择,本方法中使用AC自动机来实现。模式匹配过程中的模式由人工制定,例如对于角色序列“DDDLA”,制定的模式中有“DDL”和“DL”两种,优先提取“DDL”。使用最大模式匹配的方式,是为了更准确的定位包含车辆实体的子串。

  • c.不同于人名、地名等实体,车辆实体识别不存在“可能为实体”的情况,例如“桃李乡”可以作为一个地名实体,车辆实体必须为真正存在的实体才有意义。将步骤b中匹配到的模式串与标准车型库中的车辆实体做相似度计算,将大于阈值且排名为首的车辆实体输出。

  • d.统计新得到的车辆实体形式,扩展角色集合。

方法示例

为了方便大家更好的理解实体抽取方法,该小节以实例的形式演示一个文本如何从输入,经过角色抽取等步骤最终添加到角色集合的过程。

  • a.方法初始部分,从标准车型库中统计到车辆实体“宝马”,将宝马作为角色“C”(车辆实体角色)扩充到角色集合中,同时将“宝”和“马”分别作为角色“D”(车辆实体组成元素)扩充到角色集合中,假设到这一步角色集合生成完毕,则角色集合内容如下表:
文本角色频率
宝马C
D
D
  • b.假设输入的一条新文本为“咨询宝马价格”,经过分词等于处理之后,结果为“咨询/宝马/价格”,根据角色集合进行角色抽取之后,转换为“ACA”。因为“ACA”中包含车辆实体角色C,那么直接从“ACA”中抽取出车辆实体C,映射回文本即为“宝马”,车辆实体完成,然后将角色C(宝马)的上文角色K(咨询)和下文角色L(价格)添加到角色集合中,此时更新后的角色集合如下表,最后一列为该角色频率,用于后续过滤不常用上下文角色。
文本角色频率
宝马C
D
D
考虑K1
价格L1
  • c.假设下一条文本为“考虑抱马30万”,预处理结果为“考虑/抱/马/30/万”,抽取角色序列为“KADAA”。然后对序列“KAD”做最大模式匹配,假设用于匹配的规则里有“KAD”和“AD”两种,则从“KADAA”中匹配出“KAD”,映射回文本即为“考虑抱马”,然后将该字符串与标准车型实体做相似度计算,得到与“宝马”的相似度较高,抽取出车辆实体“抱马”(实际应用中返回“宝马”)。最后将角色更新到角色集合中,如下表。新抽取出的角色D“抱”又可以应用于其他文本案例,例如新文本中用户误将“宝来”输入成了“抱来”,便可以抽取出该条文本中的车辆实体。
文本角色频率
宝马C
D
D
考虑K2
价格L1
D1
  • d.通过不断迭代执行上述步骤,便可以增量扩充角色,得到高质量的角色集合。在整个过程中,人工只是在方法初始化的时候统计了一小部分角色信息和观察了一些匹配规则。

方法扩展

方法最初应用在从客户的备注信息中提取车辆实体用于其买卖意向的分析,现在也应用于我司部分产品的query重写任务中。本方法的语料来自于标准车型库和用户备注信息,在汽车领域有较好的效果,但是尚不具备通用性。但是该种命名实体识别策略还是具有不错的扩展性的,例如利用这种策略,我们又做了价格实体识别,对于其他命名实体,也可以根据具体实体的构成规律参考本方案来进行扩展。

分享到

   
借助zookeeper的java api浅析zookeeper的典型应用场景