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的朋友,可以看我的另一篇关于BM25的博客)

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

{
    "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,这是我使用的提示词。

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

人工检查

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

验证

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

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值