AI大模型落地-巨量实体关系映射

实体关系映射是目前AI落地非常成熟的应用场景,但是如何做到多、快、好、省,仍然需要一些技巧,这里文分享一下我的方案。

什么是实体关系映射

实体匹配(entity mapping)通常是指将两个没有直接关系的对象,通过一些方式建立起映射关系。比如:故宫、故宫博物院、北京故宫 三者指的是同一景区,将三者关联起来,就属于实体关系映射。

场景

现在A库有1w景区数据,B库有100w级别景区数据。需要从B库中挑选出与A库匹配的景区。他们的数据情况如下图。

A库B库
名称
城市
地址可能空
简述可能空可能空

方案

我认为如果能简单通过规则来确定的,尽量通过规则来处理,当需要逻辑推理时再让AI接入,同时需要多名AI交叉比对,多个角色校验结果,尽量减少AI犯错的可能性。这里我先把流程图贴出,后续我将对每个环节进行具体介绍。

不完全匹配

BM25得分最高的N个景区

景区名称&城市匹配

多个LLM判断出最相似的景区

LLM结果相同

failed

pass

结果可能有争议

B景区数据库

rule1

A数据库某景区

rule2:BM25

LLM_best_match*2

LLM_final_check

结果是否相同

human_check

mappings

开始

我们每次从A库取一条从B库获取匹配数据。整体流程如上图,但是并非完全按如上步骤进行。比如我们可以批量跑完规则1再跑规则2,按各位喜好进行。

规则1:

如果相同城市内,景区名称完全相同,大概率是同一个景区。

如何判断在同一个城市,我们可以简单的判断A库数据的城市被B库数据的地址信息包含即可粗略判断。

规则2:

如果名称、地址、城市比较相似,那么有一定概率是同一个景区。

这里实际上主要目的是从100w数据里面,筛选出较为可能的几条数据。

有两个方案:

  1. 根据语义判断,使用embedding技术,计算余弦相似度排序。
  2. 使用分词技术,按分词匹配得分来排序。

我最终使用的是分词技术,使用了es默认的BM25算法。因为实际上类似“河南”“河北”在语义上是非常接近的,区分程度明显。但是使用分词的方式,河南河北则会有比较明显的区别,更贴近我们的场景。

需要注意的是,为了达到更理想的匹配效果,我们最好是调小BM25的b参数,来消除掉文档长度对评分的过度影响。(不太了解BM25的朋友,可以看我的另一篇关于BM25的博客)

下面是我的查询语句,使用的IK分词,仅仅对名称和位置进行了匹配,且名称权重是位置权重的2倍。

 

python

复制代码

{ "query": { "bool": { "should": [ { "match": { "title": { "query": spot.scenic_name, "boost": 2 } } }, { "match": { "s_location": f"{spot.city}{spot.scenic_addr or ''}" } } ] } }, "size": size }

AI判断1:best match

通常让大语言模型做一件复杂的事情效果不会太理想,但是如果是一个较为单一的任务,大模型效果可能不错。所以我们将任务分为多层。

现在我让LLM来判断从BM25算法筛选出的TopN景区中最匹配的一个,这是我所使用的Prompt。

 

复制代码

任务描述: 请根据给定的目标景区,从以下待选景区中选出一个最接近的景区。判断标准包括景区的名称、地址和简介。 {format_instructions} 目标景区: {target_str} 待选景区列表: {candidates_str}

需要注意的是,我们可以使用多个AI供应商提的中等级别大模型来进行判断,来避免一个AI可能出现的错误,例如使用GPT3.5、volcano-pro、qwen-plus等。匹配结果如果有出入,则说明结果可靠度并不高。

AI判断2:final check

在我们可以得到一个1对1的匹配结果后,我们需要一个最终的审查者来对结果输出进行最终复验。要想着这一步最终结果的可靠,通常有两个方案。

  1. 使用一个较高级别的LLM,如GPT4、qwen-max等,然后增加一些example。
  2. 使用微调技术,挑选一些有特征的数据,对大模型进行微调,让其对该特征数据有更稳定的结果输出。

我这里使用了更为简单的的方案1,这是我使用的提示词。

 

css

复制代码

给定两个景区,根据景区的信息,判断相似景区是否为同一景区。 需要判断景区范围,例如:太行大峡谷王相岩和太行大峡谷并不是同一个景区。 Just answer yes or no. 景区 A: {scenic_sport_1} 景区 B: {scenic_sport_2}

人工检查

就这个使用的场景下,有很多地方都可能导致匹配错误(比如B库就没有对应数据,或者信息不全导致AI判断失败等等),所以,我们最终要需要人工来处理一部分数据。而我们能做到的,就是尽量让人工去处理有争议,或者明显有错误的数据。

验证

我们测试了1000条数据,人工与AI进行效果比对,AI遗漏率仅为0.5%,低于人工错误率2%。大约需要5%的数据需要人工复核,大幅缩短人工工作压力。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值