- TableGPT2-7B 是浙江大学推出的大规模解码器,专注于处理和分析表格数据。
- 模型通过特殊的表格编码器和双维注意力机制,有效捕捉表格数据的行和列关系。
- 在多个基准测试中,TableGPT2-7B 的性能显著优于其他模型。
正文(附运行示例)
TableGPT2-7B 是什么

TableGPT2-7B 是由浙江大学开发的大规模解码器,专为数据密集型任务设计,特别强调处理和分析表格数据。该模型旨在填补传统大语言模型(LLM)能力和实际需求之间的差距,特别是在商业智能(BI)、自动数据驱动分析以及涉及数据库或数据仓库的任务中表现出色。
TableGPT2-7B 的技术原理
- 结构化数据作为独立模态:TableGPT2-7B 将结构化数据视为一种独立的模态,直接理解和处理数据库和 Excel 中的数据。
- 表格编码器:模型包含一个专门的表格编码器,用于读取和解释表格数据。编码器处理整个表格,生成每列的紧凑嵌入,基于双维注意力机制,无需位置嵌入,同时进行分层特征提取,确保行和列的关系被有效捕捉。
- 双维注意力机制:TableGPT2-7B 使用双维注意力机制处理表格数据,支持模型捕捉表格的行和列之间的关系,同时保持对表格结构的感知。
- 列对比学习方法:基于列对比学习方法,模型被鼓励去学习有意义的、结构感知的语义表示,有助于模型更好地理解和解释表格数据。
- Q-former 样式适配器:用 Q-former 样式的适配器对齐表格嵌入和文本输入,引入可学习的查询,及特殊标记区分表格特征与文本,让模型同时处理两种模态。
如何运行 TableGPT2-7B
安装依赖
首先,确保安装了 transformers 库:
pipinstalltransformers>=4.37.0
加载模型和数据
fromtransformersimportAutoModelForCausalLM,AutoTokenizer
importpandasaspd
fromioimportStringIO
#示例表格数据
EXAMPLE_CSV_CONTENT="""
"Loss","Date","Score","Opponent","Record","Attendance"
"Hampton(14–12)","September25","8–7","
adres","67–84","31,193"
"Speier(5–3)","September26","3–1","
adres","67–85","30,711"
"Elarton(4–9)","September22","3–1","@Expos","65–83","9,707"
"Lundquist(0–1)","September24","15–11","
adres","67–83","30,774"
"Hampton(13–11)","September6","9–5","Dodgers","61–78","31,407"
"""
#读取表格数据
csv_file=StringIO(EXAMPLE_CSV_CONTENT)
df=pd.read_csv(csv_file)
#加载模型和分词器
model_name="tablegpt/TableGPT2-7B"
model=AutoModelForCausalLM.from_pretrained(
model_name,torch_dtype="auto",device_map="auto"
)
tokenizer=AutoTokenizer.from_pretrained(model_name)
#构建提示
example_prompt_template="""Givenaccesstoseveralpandasdataframes,writethePythoncodetoanswertheuser'squestion.
/*
"{var_name}.head(5).to_string(index=False)"asfollows:
{df_info}
*/
Question:{user_question}
"""
question="哪些比赛的战绩达到了40胜40负?"
prompt=example_prompt_template.format(
var_name="df",
df_info=df.head(5).to_string(index=False),
user_question=question,
)
#生成响应
messages=[
{"role":"system","content":"Youareahelpfulassistant."},
{"role":"user","content":prompt},
]
text=tokenizer.apply_chat_template(
messages,tokenize=False,add_generation_prompt=True
)
model_inputs=tokenizer([text],return_tensors="pt").to(model.device)
generated_ids=model.generate(**model_inputs,max_new_tokens=512)
generated_ids=[
output_ids[len(input_ids):]
forinput_ids,output_idsinzip(model_inputs.input_ids,generated_ids)
]
response=tokenizer.batch_decode(generated_ids,skip_special_tokens=True)[0]
print(response)