今天是2025年6月20日,星五,北京,晴
继续看代码,看个表格RAG的项目,解决的问题是从大量表中检索相关表。思路有点怪,输入用户query,先做大表过滤,拿到过滤结果后再补充额外特征信息,然后组织后送LLM生成,设计其实不是很合理,速度会很慢。但是,依旧可以看看思路
四看表格RAG的处理思路tablerag
项目tablerag,在https://github.com/YuhangWuAI/tablerag,很早的项目了,效果未知,但看着很费token,但实现思路还是很有趣,可体会下。
一看整体流程
整体流程如下图:

看着很长,其实就4的大内容。
一个是TableFilter,对表格进行过滤支持基于语义(semantic-based)和基于大型语言模型(LLM-based)的过滤,主要用于对大表格的过滤。
一个是TableClarification,对表格进行澄清补充,补充一些上下文信息,更好的用于召回,比对,这个后面单独说。
一个是Tableformat,格式化为一个html或者markdown表示的表格。其中,html可以保留复杂的表格结构,使其适合多维或嵌套表格,Markdown提供一种简单、人类可读的格式,在检索增强生成 (RAG) 范式中表现良好。
一个生成阶段seriaize request,丢给LLM做生成。
二看表格过滤(召回)细节
这个虽然叫过滤,但实际上做的是召回的事情,逻辑在:https://github.com/YuhangWuAI/tablerag/blob/main/src/table_master/table_filter.py,这个还不是在离线环境下做的,放在整个在线环境中,给一个

几个核心点:
1)对于表格,whether_column_grounding控制是否需要进行列对齐,后续做处理。top_k表示过滤后保留的行数,默认为3。
2)基于语义的过滤方法,通过生成嵌入向量匹配用户查询来过滤行。生成表格行和用户查询的嵌入向量,使用余弦相似度选择与用户查询最相似的前k行。

如果启用了列对齐,则对列进行嵌入向量生成和相似性匹配,只保留与查询最相关的列(注意,这个是或操作。),这里用到ColBERT。

3)基于llm的方法,将所有的column_names给到llm,合并query,让llm来选择最相关的行。

进一步的生成的逻辑在:https://github.com/YuhangWuAI/tablerag/blob/main/src/llm/llm_generator/llm_generating.py

三看表格澄清处理细节
这里的表格澄清细节,实际上指的是对召回回来的表格,还可能有歧义,直接丢给大模型做处理,会出问题。所以,就补充一些细节信息,细节在https://github.com/YuhangWuAI/tablerag/blob/main/src/table_master/table_clarifier.py

几个核心点:
1)表格澄清Table Clarification:该模块为表格中模棱两可或特定领域的术语提供额外的上下文,从而提高模型的理解力并减少偏见。具体是使用LLM识别和解释特定领域的术语和缩写。

逻辑在:https://github.com/YuhangWuAI/tablerag/blob/main/src/llm/llm_generator/llm_generating.py
2)表格摘要生成Table summary:将来自Wikipedia 的元数据用于生成表格内容的简明摘要,为LLM提供额外的背景信息,生成表格内容的简明摘要。

逻辑在:https://github.com/YuhangWuAI/tablerag/blob/main/src/llm/llm_generator/llm_generating.py
3)生成相似问题,这个有点类似于faq的感觉
逻辑在:https://github.com/YuhangWuAI/tablerag/blob/main/src/llm/llm_generator/llm_generating.py

看一个直观的例子:
处理前的表格:

处理后的表格,生成table的format 格式信息,table_summary信息,包括Title、Kyeword, Content Overview、Term Explanations(包括Definition、Synonyms and Related Concepts),也包括Query Suggestions,这个可以用来做distinguish。

四看生成阶段seriaize request
这个就是直接拼prompt送llm做回答了,如:

逻辑在:https://github.com/YuhangWuAI/tablerag/blob/main/src/llm/llm_generator/llm_generating.py
参考文献
1、https://github.com/YuhangWuAI/tablerag
(文:老刘说NLP)