mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-11 12:07:42 +00:00
(improvement) improve evalution accuracy (#727)
This commit is contained in:
@@ -5,4 +5,4 @@
|
||||
|
||||
# 评测意义
|
||||
|
||||
制定评估工具方便supersonic快速对接其他模型、更改参数配置,对于提示词或代码更改的影响至关重要,可以帮助我们了解这些变化是否会提高或降低准确率、响应速度。
|
||||
制定评测工具方便supersonic快速对接其他大模型、更改参数配置,对于评估提示词、代码更改所带来的影响至关重要,可以帮助我们了解这些变化是否会提高或降低准确率、响应速度。
|
||||
|
||||
@@ -9,7 +9,7 @@ import jwt
|
||||
|
||||
|
||||
def get_authorization():
|
||||
exp = time.time() + 1000
|
||||
exp = time.time() + 100000
|
||||
token= jwt.encode({"token_user_name": "admin","exp": exp}, "secret", algorithm="HS512")
|
||||
return "Bearer "+token
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ def get_pred_sql(query,url,agentId,chatId,authorization,default_sql):
|
||||
header["Authorization"] =authorization
|
||||
try:
|
||||
result = requests.post(url=url, headers=header, json=data)
|
||||
print(result.json())
|
||||
#print(result.json())
|
||||
print(result.json()["traceId"])
|
||||
if result.status_code == 200:
|
||||
data = result.json()["data"]
|
||||
@@ -68,7 +68,7 @@ def get_pred_result():
|
||||
for i in range(0,len(questions)):
|
||||
pred_sql=get_pred_sql(questions[i],url,agent_id,chat_id,authorization,default_sql)
|
||||
pred_sql_list.append(pred_sql)
|
||||
time.sleep(30)
|
||||
time.sleep(60)
|
||||
write_sql(pred_sql_path, pred_sql_list)
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@@ -56,10 +56,10 @@ def build_internet(path,day):
|
||||
VALUES (?, ?, ?,?, ?, ?,?)
|
||||
'''
|
||||
data = [
|
||||
(imp_date,"item_enterprise_13_136","阿里云","2009年9月10日","item_enterprise_13_134","张勇",50000000),
|
||||
(imp_date,"item_enterprise_13_137","天猫","2012年1月11日","item_enterprise_13_134","张勇",100000000),
|
||||
(imp_date,"item_enterprise_13_138","腾讯游戏","2003","item_enterprise_13_131","马化腾",50000000),
|
||||
(imp_date,"item_enterprise_13_139","度小满","2018","item_enterprise_13_132","朱光",100000000),
|
||||
(imp_date,"item_enterprise_13_136","阿里云","2009年9月10日","item_enterprise_13_132","张勇",50000000),
|
||||
(imp_date,"item_enterprise_13_137","天猫","2012年1月11日","item_enterprise_13_132","张勇",100000000),
|
||||
(imp_date,"item_enterprise_13_138","腾讯游戏","2003","item_enterprise_13_133","马化腾",50000000),
|
||||
(imp_date,"item_enterprise_13_139","度小满","2018","item_enterprise_13_131","朱光",100000000),
|
||||
(imp_date,"item_enterprise_13_140","京东金融","2017","item_enterprise_13_134","刘强东",100000000)
|
||||
]
|
||||
cursor.executemany(insert_data_query, data)
|
||||
@@ -83,10 +83,10 @@ def build_internet(path,day):
|
||||
'''
|
||||
data = [
|
||||
(imp_date,"item_enterprise_13_131","item_enterprise_13_139",0.1,0.1,0.3),
|
||||
(imp_date,"item_enterprise_13_134","item_enterprise_13_138",0.8,0.8,0.6),
|
||||
(imp_date,"item_enterprise_13_135","item_enterprise_13_139",0.8,0.8,0.6),
|
||||
(imp_date,"item_enterprise_13_131","item_enterprise_13_137",0.8,0.8,0.6),
|
||||
(imp_date,"item_enterprise_13_135","item_enterprise_13_137",0.1,0.1,0.3)
|
||||
(imp_date,"item_enterprise_13_133","item_enterprise_13_138",0.8,0.8,0.6),
|
||||
(imp_date,"item_enterprise_13_134","item_enterprise_13_140",0.8,0.8,0.6),
|
||||
(imp_date,"item_enterprise_13_132","item_enterprise_13_137",0.8,0.8,0.6),
|
||||
(imp_date,"item_enterprise_13_132","item_enterprise_13_136",0.1,0.1,0.3)
|
||||
]
|
||||
cursor.executemany(insert_data_query, data)
|
||||
conn.commit()
|
||||
@@ -113,7 +113,7 @@ def build_internet(path,day):
|
||||
(imp_date, "2019", "item_enterprise_13_136", 100000000000, 50000000000, 1, 0.5),
|
||||
(imp_date, "2018", "item_enterprise_13_137", 100000000000, 50000000000, 1, -0.1),
|
||||
(imp_date, "2018", "item_enterprise_13_139", 500000000, 50000000000, 0.1, 0.5),
|
||||
(imp_date, "2018", "item_enterprise_13_138", 100000000000, -300000000, 0.1, 0.5)
|
||||
(imp_date, "2018", "item_enterprise_13_140", 100000000000, -300000000, 0.1, 0.5)
|
||||
]
|
||||
cursor.executemany(insert_data_query, data)
|
||||
conn.commit()
|
||||
|
||||
@@ -38,10 +38,6 @@ SELECT T1.brand_name, T2.company_name, T1.registered_capital, T2.headquarter_add
|
||||
SELECT T1.brand_name, T2.company_name, T1.legal_representative, T2.headquarter_address FROM brand AS T1 JOIN company AS T2 ON T1.company_id = T2.company_id internet
|
||||
SELECT T2.company_name, T2.headquarter_address FROM company_revenue AS T1 JOIN company AS T2 ON T1.company_id = T2.company_id internet
|
||||
SELECT T2.company_name, T2.annual_turnover FROM company_revenue AS T1 JOIN company AS T2 ON T1.company_id = T2.company_id internet
|
||||
SELECT T3.company_name, T3.headquarter_address, T2.brand_name, T1.revenue FROM company_brand_revenue AS T1 JOIN brand AS T2 JOIN company AS T3 ON T1.brand_id = T2.brand_id AND T2.company_id = T3.company_id internet
|
||||
SELECT T3.company_name, T3.annual_turnover, T2.brand_name, T1.revenue FROM company_brand_revenue AS T1 JOIN brand AS T2 JOIN company AS T3 ON T1.brand_id = T2.brand_id AND T2.company_id = T3.company_id internet
|
||||
SELECT T3.company_name, T2.brand_name, T2.legal_representative, T1.revenue FROM company_brand_revenue AS T1 JOIN brand AS T2 JOIN company AS T3 ON T1.brand_id = T2.brand_id AND T2.company_id = T3.company_id internet
|
||||
SELECT T3.company_name, T2.brand_name, T1.revenue FROM company_brand_revenue AS T1 JOIN brand AS T2 JOIN company AS T3 ON T1.brand_id = T2.brand_id AND T2.company_id = T3.company_id internet
|
||||
SELECT T2.company_name, T2.headquarter_address, T1.legal_representative FROM brand AS T1 JOIN company AS T2 ON T1.company_id = T2.company_id WHERE T1.registered_capital >= 100000000 internet
|
||||
SELECT T2.company_name, T2.headquarter_address, T1.legal_representative FROM brand AS T1 JOIN company AS T2 ON T1.company_id = T2.company_id WHERE T1.registered_capital < 100000000 internet
|
||||
SELECT T2.company_name, T2.headquarter_address, T1.legal_representative FROM brand AS T1 JOIN company AS T2 ON T1.company_id = T2.company_id WHERE T1.registered_capital > 100000000 internet
|
||||
@@ -98,3 +94,7 @@ SELECT T2.legal_representative, T2.brand_name, sum(T1.revenue) FROM company_bran
|
||||
SELECT T2.legal_representative, T2.brand_name, max(T1.revenue) FROM company_brand_revenue AS T1 JOIN brand AS T2 ON T1.brand_id = T2.brand_id GROUP BY T1.brand_id internet
|
||||
SELECT T2.headquarter_address, T2.company_name, sum(T1.registered_capital) FROM brand AS T1 JOIN company AS T2 ON T1.company_id = T2.company_id GROUP BY T1.company_id internet
|
||||
SELECT T2.headquarter_address, T2.company_name, max(T1.registered_capital) FROM brand AS T1 JOIN company AS T2 ON T1.company_id = T2.company_id GROUP BY T1.company_id internet
|
||||
select T2.headquarter_address , T2.company_name, min(T1.registered_capital) from brand as T1 join company as T2 on T1.company_id = T2.company_id group by T1.company_id internet
|
||||
select T2.headquarter_address , T2.company_name, avg(T1.registered_capital) from brand as T1 join company as T2 on T1.company_id = T2.company_id group by T1.company_id internet
|
||||
select T2.headquarter_address , T2.company_name from company_revenue as T1 join company as T2 on T1.company_id = T2.company_id group by T1.company_id having sum(T1.revenue_proportion) > 0.5 internet
|
||||
select T2.headquarter_address , T2.company_name from company_revenue as T1 join company as T2 on T1.company_id = T2.company_id group by T1.company_id having count(*) > 5 internet
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
在各公司所有品牌收入排名中,给出每一个品牌,其所在公司以及收入占该公司的总收入比例
|
||||
在各公司所有品牌收入排名中,给出每一个品牌和其法人,其所在公司以及收入占该公司的总收入比例
|
||||
在各公司所有品牌收入排名中,给出每一个品牌,其所在公司以及收入占该公司的总收入比例,同时给出该公司总部所在地
|
||||
在公司各品牌收入排名的利润占比最多10%时,给出公司的名称品牌的名称并给出公司各品牌收入排名的营收占比
|
||||
在公司各品牌收入排名的利润占比小于10%时,给出公司的名称品牌的名称并给出公司各品牌收入排名的营收占比
|
||||
在公司各品牌收入排名的利润占比不止10%时,给出公司的名称品牌的名称并给出公司各品牌收入排名的营收占比
|
||||
在公司各品牌收入排名的利润占比最多0.1时,给出公司的名称品牌的名称并给出公司各品牌收入排名的营收占比
|
||||
在公司各品牌收入排名的利润占比小于0.1时,给出公司的名称品牌的名称并给出公司各品牌收入排名的营收占比
|
||||
在公司各品牌收入排名的利润占比不止0.1时,给出公司的名称品牌的名称并给出公司各品牌收入排名的营收占比
|
||||
注册资本不小于1亿的品牌中,哪个品牌的平均营收占比最大?并给出它的法定代表人
|
||||
注册资本大于1亿的品牌中,哪5个品牌收入最少?并给出它们的法定代表人
|
||||
找到注册资本少于一个亿的品牌及其法人,并给出对应公司的平均营收占比
|
||||
@@ -12,17 +12,17 @@
|
||||
给出注册资本不超过一亿的的品牌及其法人,并给出对应的公司的总营收占比
|
||||
给出注册资本少于一亿的品牌及其法人,并给出对应的公司的最大营收占比
|
||||
给出注册资本不超过1亿的品牌及其法人,并找出对应的公司的最大营收占比
|
||||
在注册资本超过一亿的公司中,给出公司各品牌收入品牌的平均营收占比正好50%的品牌及其法人
|
||||
在注册资本超过一亿的公司中,给出公司各品牌收入品牌的平均营收占比正好0.5的品牌及其法人
|
||||
在注册资本不超过一亿的公司中,给出个品牌收入排名五的品牌及其法人
|
||||
在各品牌收入在公司排名中,当品牌的注册资本不大于1亿时,给出公司各品牌收入排名的支出占比的平均值小于等于45%的那些品牌的名称以及公司各品牌收入排名的营收占比的平均值
|
||||
在各品牌收入在公司排名中,当品牌的注册资本不大于1亿时,给出公司各品牌收入排名的支出占比的平均值小于等于0.45的那些品牌的名称以及公司各品牌收入排名的营收占比的平均值
|
||||
在各品牌收入在公司排名中,当品牌的注册资本小于1亿时,给出公司各品牌收入排名数量小于等于5的那些品牌的名称以及公司各品牌收入排名的营收占比的最小值
|
||||
在各品牌收入在公司排名中,给出每个品牌的名称,品牌的法定代表人,以及公司各品牌收入排名的营收占比的平均值
|
||||
在各品牌收入在公司排名中,给出每个品牌的名称,品牌的法定代表人,以及公司各品牌收入排名的营收占比的最小值
|
||||
在各品牌收入在公司排名中,给出每个品牌的名称,品牌的法定代表人,以及公司各品牌收入排名的营收占比的总和
|
||||
在各品牌收入在公司排名中,给出每个品牌的名称,品牌的法定代表人,以及公司各品牌收入排名的营收占比的最大值
|
||||
在各品牌收入在公司排名中,给出收入排名不超过5的品牌及其法人
|
||||
在各品牌收入在公司排名中,给出在收入排名中的平均营收占比超过50%的品牌及其法人
|
||||
在各品牌收入在公司排名中,当公司各品牌收入排名的利润占比的平均值小于等于60%时,给出品牌的名称以及公司各品牌收入排名的营收占比的平均值
|
||||
在各品牌收入在公司排名中,给出在收入排名中的平均营收占比超过0.5的品牌及其法人
|
||||
在各品牌收入在公司排名中,当公司各品牌收入排名的利润占比的平均值小于等于0.6时,给出品牌的名称以及公司各品牌收入排名的营收占比的平均值
|
||||
在各品牌收入在公司排名中,当公司各品牌收入排名数量等于5时,给出品牌的名称以及公司各品牌收入排名的营收占比的最小值
|
||||
哪个品牌收入的平均利润占比最大,给出品牌的法定代表人,以及其收入平均营收占比
|
||||
哪3个品牌的收入最多,给出品牌的法定代表人,以及其收入总营收占比
|
||||
@@ -38,10 +38,6 @@
|
||||
给出每一个品牌和其法人,所属的公司以及总部所在城市
|
||||
有自己品牌的公司有哪些?给出这些公司和总部所在地
|
||||
有自己品牌的公司有哪些?给出这些公司和年营业额
|
||||
在各公司其品牌的历年收入中,给出每一个品牌,其所属的公司和公司总部所在地点,并给出该品牌近几年的营收
|
||||
在各公司其品牌的历年收入中,给出每一个品牌,其所属的公司和公司年营业额,并给出该品牌近几年的营收
|
||||
在各公司其品牌的历年收入中,给出每一个品牌,其所属的公司和公司法人,并给出该品牌近几年的营收
|
||||
在各公司其品牌的历年收入中,给出每一个品牌,其所属的公司,以及该品牌近几年的营收
|
||||
在品牌的注册资本至少1亿时,给出公司的名称以及公司的总部地点品牌的法定代表人
|
||||
在品牌的注册资本少于1亿时,给出公司的名称以及公司的总部地点品牌的法定代表人
|
||||
在品牌的注册资本超过1亿时,给出公司的名称以及公司的总部地点品牌的法定代表人
|
||||
@@ -56,7 +52,7 @@
|
||||
给出注册资本不超过一亿,且年营业额少于288亿的公司,以及总部地点和法人
|
||||
找出注册资本少于一亿,且年营业额不超过288亿的公司,以及总部在哪,法人是谁
|
||||
在公司品牌历年收入的利润最多500亿时,给出公司的名称品牌的名称并给出公司品牌历年收入的营收
|
||||
在公司品牌历年收入的营收同比增长至少100%时,给出公司的名称品牌的名称并给出公司品牌历年收入的营收
|
||||
在公司品牌历年收入的营收同比增长至少1时,给出公司的名称品牌的名称并给出公司品牌历年收入的营收
|
||||
年营业额不小于288亿的公司中,哪5个公司的平均营收占比最少?,并给出它们的总部地点
|
||||
年营业额不小于288亿的公司中,哪个公司的平均营收占比最大?并给出它的总部地点
|
||||
注册资本大于1亿的品牌中,哪个品牌历年收入的平均营收最大?并给出它的法定代表人
|
||||
@@ -78,12 +74,12 @@
|
||||
给出不超过288亿年营业额的公司及总部地点,并给出这些品牌中的平均注册资本
|
||||
给出不超过288亿年营业额的公司及其总部地点,并给出这些品牌的的最大注册资本
|
||||
给出年营业额超过288亿的公司及其总部地点,并给出这些品牌的的总注册资本
|
||||
给出年营业额不超过288亿的各公司品牌中,给出收入排名中的营收占比加起来不超过50%的公司及其总部地点
|
||||
给出年营业额低于288亿的各公司的各品牌中,给出收入排名中的总营收占比不超过50%的公司及总部地点中
|
||||
给出年营业额不超过288亿的各公司品牌中,给出收入排名中的营收占比加起来不超过0.5的公司及其总部地点
|
||||
给出年营业额低于288亿的各公司的各品牌中,给出收入排名中的总营收占比不超过0.5的公司及总部地点中
|
||||
在年营业额不少于288亿的公司中,给出品牌不超过5个的公司及其总部地点
|
||||
在年营业额不超过288亿的公司中,给出品牌少于5个的公司及其总部地点
|
||||
在各公司的各品牌收入排名中,当公司的年营业额大于288亿时,给出公司各品牌收入排名数量大于5的那些公司的名称以及公司各品牌收入排名的营收占比的最小值
|
||||
在各公司的各品牌收入排名中,当公司的年营业额小于288亿时,给出公司各品牌收入排名的利润占比的平均值大于75%的那些公司的名称以及公司各品牌收入排名的营收占比的最大值
|
||||
在各公司的各品牌收入排名中,当公司的年营业额小于288亿时,给出公司各品牌收入排名的利润占比的平均值大于0.75的那些公司的名称以及公司各品牌收入排名的营收占比的最大值
|
||||
在各品牌的历年收入中,当品牌的注册资本不大于1亿时,给出公司品牌历年收入的利润同比增长的总和小于等于1000000的那些品牌的名称以及公司品牌历年收入的营收的最大值
|
||||
在各品牌的历年收入中,当品牌的注册资本小于1亿时,给出公司品牌历年收入数量小于5的那些品牌的名称以及公司品牌历年收入的营收的最小值
|
||||
在各品牌所属的公司中,当公司的年营业额大于288亿时,给出品牌数量小于5的那些公司的名称以及品牌的注册资本的总和
|
||||
@@ -98,3 +94,7 @@
|
||||
在各品牌的历年收入中,给出每个品牌的名称,品牌的法定代表人,以及公司品牌历年收入的营收的最大值
|
||||
在各品牌所属的公司中,给出每个公司的名称,公司的总部地点,以及品牌的注册资本的总和
|
||||
在各品牌所属的公司中,给出每个公司的名称,公司的总部地点,以及品牌的注册资本的最大值
|
||||
在各品牌所属的公司中,给出每个公司的名称,公司的总部地点,以及品牌的注册资本的最小值
|
||||
在各品牌所属的公司中,给出每个公司的名称,公司的总部地点,以及品牌的注册资本的平均值
|
||||
在各公司的各品牌收入排名种,哪些公司的品牌排名的总营收占比超过0.5,并给出总部的地点
|
||||
在各公司的各品牌收入排名中,哪些公司的品牌收入排名超过5,并给出公司的总部地点
|
||||
|
||||
@@ -522,14 +522,19 @@ def evaluate(gold, predict, db_dir, etype, kmaps,query_path):
|
||||
p_sql = p_str
|
||||
|
||||
if etype in ["all", "exec"]:
|
||||
exec_score = eval_exec_match(db, p_str, g_str, p_sql, g_sql)
|
||||
if not exec_score:
|
||||
result = eval_exec_match(db, p_str, g_str, p_sql, g_sql)
|
||||
#exec_score = eval_exec_match(db, p_str, g_str, p_sql, g_sql)
|
||||
if not result["equal"]:
|
||||
element={}
|
||||
element["query"]=questions[index]
|
||||
element["gold_sql"]=g_str
|
||||
element["pred_sql"]=p_str
|
||||
if "p_res_map" in result:
|
||||
element["p_res_map"]=result["p_res_map"]
|
||||
if "q_res_map" in result:
|
||||
element["q_res_map"]=result["q_res_map"]
|
||||
log_list.append(element)
|
||||
if exec_score:
|
||||
if result["equal"]:
|
||||
scores[hardness]['exec'] += 1.0
|
||||
scores['all']['exec'] += 1.0
|
||||
|
||||
@@ -609,6 +614,7 @@ def eval_exec_match(db, p_str, g_str, pred, gold):
|
||||
return 1 if the values between prediction and gold are matching
|
||||
in the corresponding index. Currently not support multiple col_unit(pairs).
|
||||
"""
|
||||
result={}
|
||||
conn = sqlite3.connect(db)
|
||||
cursor = conn.cursor()
|
||||
try:
|
||||
@@ -618,8 +624,10 @@ def eval_exec_match(db, p_str, g_str, pred, gold):
|
||||
for index in range(0,len(p_fields)):
|
||||
p_fields[index]=re.sub("t\d+.", "",p_fields[index].replace("`","").lower())
|
||||
p_res = cursor.fetchall()
|
||||
except:
|
||||
return False
|
||||
except Exception as e:
|
||||
logging.info(e)
|
||||
result["equal"]=False
|
||||
return result
|
||||
|
||||
cursor.execute(g_str)
|
||||
q_res = cursor.fetchall()
|
||||
@@ -635,9 +643,15 @@ def eval_exec_match(db, p_str, g_str, pred, gold):
|
||||
|
||||
g_fields = parse_sql(g_str)
|
||||
|
||||
#print("p_res_map:{}".format(res_map(p_res, p_fields)))
|
||||
#print("q_res_map:{}".format(res_map(q_res, g_fields)))
|
||||
return res_map(p_res, p_fields) == res_map(q_res, g_fields)
|
||||
p_res_map=res_map(p_res, p_fields)
|
||||
q_res_map=res_map(q_res, g_fields)
|
||||
# print("p_res_map:{}".format(p_res_map))
|
||||
# print("q_res_map:{}".format(q_res_map))
|
||||
result["equal"]=(p_res_map==q_res_map)
|
||||
result["p_res_map"]=json.dumps(p_res_map, ensure_ascii=False)
|
||||
result["q_res_map"]=json.dumps(q_res_map, ensure_ascii=False)
|
||||
return result
|
||||
#return res_map(p_res, p_fields) == res_map(q_res, g_fields)
|
||||
|
||||
def parse_sql(sql):
|
||||
# 使用 sqlparse 库解析 SQL 查询语句
|
||||
|
||||
Reference in New Issue
Block a user