链载Ai

标题: 大模型输入输出语义分析与评估 [打印本页]

作者: 链载Ai    时间: 昨天 12:47
标题: 大模型输入输出语义分析与评估


大模型内容评估的挑战

当我们开发一段代码,可以精确地用测试用例来测试这段代码,固定的输入对应固定的输出,测试所有的输入就可以覆盖所有的代码逻辑。然而大模型输入输出是自然语言,自然就会接收千奇百怪的输入。例如:

结合以上需求,我们需要对大模型应用的输入与输出具备评判的能力,对内容进行检索、分析与评估,确保应用整体行为符合预期。

语义分析:从多角度理解大模型输入输出

为了更好的处理大模型输入输出日志,从而更好的理解用户需求、评估大模型的表现。这就要求日志管理工具具备面向自然语言的搜索、处理、分析的能力,包括:


(1)语义富化

在 RAG 领域,要把文件转化为结构化 Markdown 信息,再对 Markdown 文件切分 chunk 构建向量索引。在 RAG 场景中,传统文档处理流程存在信息损耗问题。需要通过多模态特征提取,构建多维度语义特征空间,从不同的角度来观察 LLM 输入输出,这些角度包括:

借助于 LLM 评估、向量索引,给 Prompt/Response 提取出结构化信息,并且以可视化的形式展示分析结果。基于评估结果,从而实现对用户意图、情绪、关注点、常见问题的理解,了解 LLM 响应质量,方便下一次训练积习难改调优,对输入、输出进行合规审计,避免法律风险。

利用日志服务 SLS 的语义处理能力,在数据加工过程中提供开放式接口的方案,对接百炼托管模型 API 或者自研 LLM API,从而实现基于 LLM 进行语义富化。

LLM 评估架构包括以下几个关键组件:

通过可自定义 Prompt,自定义 endpoint,自定义 model 来实现独特的业务需求。以下是 SLS内置的语义富化语句:

*|extend"__tag__:__sls_qwen_user_tpl__"=replace(replace(replace(replace(replace(replace(replace(replace("__tag__:__sls_qwen_user_tpl__",'<INPUT_TEMPLATE>',"output.value"),'\','\\'),'"','\"'),chr(8),'\b'),chr(12),'\f'),chr(10),'\n'),chr(13),'\r'),chr(9),'\t')|extend"__tag__:__sls_qwen_sys_tpl__"=replace(replace(replace(replace(replace(replace(replace("__tag__:__sls_qwen_sys_tpl__",'\','\\'),'"','\"'),chr(8),'\b'),chr(12),'\f'),chr(10),'\n'),chr(13),'\r'),chr(9),'\t')|extendrequest_body=replace(replace("__tag__:__sls_qwen_body_tpl__",'<SYSTEM_PROMPT>',"__tag__:__sls_qwen_sys_tpl__"),'<USER_PROMPT>',"__tag__:__sls_qwen_user_tpl__")|http-call-method='post'-headers='{"Authorization":"Bearerxxxxxx","Content-Type":"application/json","Host":"dashscope.aliyuncs.com","User-Agent":"sls-etl-test"}'-timeout_millis=60000-body='request_body''http://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation'asstatus,response_body|extendtmp_content=json_extract_scalar(response_body,'$.output.choices.0.message.content')|extendoutput_enrich=regexp_replace(regexp_replace(tmp_content,'^([^{]|\s)+{','{'),'}([^}]|\s)+$','}')|project-away"__tag__:__sls_qwen_sys_tpl__","__tag__:__sls_qwen_user_tpl__","__tag__:__sls_qwen_body_tpl__",trimed_input,tmp_content,request_body,response_body
语义评估结果:


(2)向量检索

在实际落地上,向量检索存在诸多工程挑战,包括但不限于:

如上文架构图所示,SLS 提供一站式的向量检索能力。Prompt/Response 等自然语言写入 SLS 后,可自动完成 embedding 转向量、构建向量索引。在查询时,自动将查询语句转换为向量,然后从向量索引中查找近似向量,根据命中的 docID 去读取原始数据。无需关心中间的向量类型,只需要写入文本数据,查询文本数据即可。

SLS 提供向量查询语法,在使用查询语法的过程中需要关注以下关键点:

similarity(Key,query)<distance


(3)混合检索

在某些场景下,不仅需要近似检索长文本,还需要精确匹配某些字段。例如查询某个 uid 的 Prompt,需要同时精确命中 uid 和近似查询 Prompt 列。这时候就需要混合检索了。混合检索使用 and 条件连接,会分别查询关键字倒排索引和向量索引,然后合并两者结果:

uid:123andsimilarity(key,query)<distance


(4)向量聚类

针对纷繁复杂的用户输入和大模型输出,如何找到其中的热点问题?有哪些问题是离群点?当只有文本时,由于文本之间是互不相同的,很难做分析。而通过向量把文本转换为向量后,就可以根据空间距离来对向量做聚类了。聚类依赖于 SQL 函数,cluster_centroids 函数指定一个二维数组,和聚类个数,生成对应的聚类结果:

clustering_centroids(array(array(double))samples,integernum_of_clusters)

与此同时,高维向量在空间中无法可视化,SLS 提供降维函数,把高维向量转换为二位向量,用于可视化,我们可以从下图看到语义聚类与降维后的可视化效果图。

t_sne(array(array(double))

LLM Prompt/Reponse 语义洞察的工程实践

从原始 Prompt 和 Response 提取语义信息后,通过关键字检索、向量检索、语义聚类达到以下业务目标:


(1)基于检索的合规、审计

通过检索特定的关键字查找是否存在不合规行为。例如把一些违禁词设为关键字,查询近似词,这通过 similarity 语法来实现。similarity 可通过调整距离来调整相似性。

similarity("input_semantic.summary","恶意关键词")<0.4


(2)基于检索的主题、情绪筛选

在语义处理阶段,评估引擎对自然语言做了分类,提取了主题、情绪等分类内容。在 Chatbot 应用中,可以查看特定主题的会话历史。

input_semantic.topic:database


(3)内容聚类

基于聚类,我们可以把相似内容聚成一类,可以查看话题之间的相关性和距离。聚类效果图如下图中的最右侧图所示,每一种颜色是一种类别,可以很清晰地看到某些话题和其他话题距离比较远。

总结

通过语义富化、搜索,可以更好地实现对大模型输入输出的理解,从而建设更懂得自然语言的大模型应用。除此之外,还可以把方法从内容分析,拓展到各垂直场景中,例如:






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5