(improvement) improve evalution accuracy (#727)

This commit is contained in:
mainmain
2024-02-19 17:31:38 +08:00
committed by GitHub
parent fdb69547e6
commit 699a33b1c1
13 changed files with 112 additions and 53 deletions

View File

@@ -77,7 +77,7 @@ public abstract class BaseSemanticCorrector implements SemanticCorrector {
protected void addFieldsToSelect(SemanticParseInfo semanticParseInfo, String correctS2SQL) { protected void addFieldsToSelect(SemanticParseInfo semanticParseInfo, String correctS2SQL) {
Set<String> selectFields = new HashSet<>(SqlSelectHelper.getSelectFields(correctS2SQL)); Set<String> selectFields = new HashSet<>(SqlSelectHelper.getSelectFields(correctS2SQL));
Set<String> needAddFields = new HashSet<>(SqlSelectHelper.getGroupByFields(correctS2SQL)); Set<String> needAddFields = new HashSet<>(SqlSelectHelper.getGroupByFields(correctS2SQL));
needAddFields.addAll(SqlSelectHelper.getOrderByFields(correctS2SQL)); //needAddFields.addAll(SqlSelectHelper.getOrderByFields(correctS2SQL));
// If there is no aggregate function in the S2SQL statement and // If there is no aggregate function in the S2SQL statement and
// there is a data field in 'WHERE' statement, add the field to the 'SELECT' statement. // there is a data field in 'WHERE' statement, add the field to the 'SELECT' statement.

View File

@@ -5,13 +5,21 @@ import com.tencent.supersonic.chat.api.pojo.SemanticSchema;
import com.tencent.supersonic.chat.api.pojo.response.SqlInfo; import com.tencent.supersonic.chat.api.pojo.response.SqlInfo;
import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.core.pojo.QueryContext;
import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum;
import com.tencent.supersonic.common.util.ContextUtils;
import com.tencent.supersonic.common.util.jsqlparser.SqlAddHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlAddHelper;
import com.tencent.supersonic.common.util.jsqlparser.SqlSelectHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlSelectHelper;
import com.tencent.supersonic.headless.api.pojo.Dim;
import com.tencent.supersonic.headless.api.pojo.response.ModelResp;
import com.tencent.supersonic.headless.api.pojo.response.ViewResp;
import com.tencent.supersonic.headless.server.pojo.MetaFilter;
import com.tencent.supersonic.headless.server.service.ModelService;
import com.tencent.supersonic.headless.server.service.ViewService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -23,11 +31,35 @@ public class GroupByCorrector extends BaseSemanticCorrector {
@Override @Override
public void doCorrect(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { public void doCorrect(QueryContext queryContext, SemanticParseInfo semanticParseInfo) {
Boolean addGroupBy = addGroupBy(queryContext, semanticParseInfo);
log.info("addGroupBy:{}", addGroupBy);
if (!addGroupBy) {
return;
}
addGroupByFields(queryContext, semanticParseInfo); addGroupByFields(queryContext, semanticParseInfo);
} }
private Boolean addGroupBy(QueryContext queryContext, SemanticParseInfo semanticParseInfo) {
Long viewId = semanticParseInfo.getViewId();
ViewService viewService = ContextUtils.getBean(ViewService.class);
ModelService modelService = ContextUtils.getBean(ModelService.class);
ViewResp viewResp = viewService.getView(viewId);
List<Long> modelIds = viewResp.getViewDetail().getViewModelConfigs().stream().map(config -> config.getId()
).collect(Collectors.toList());
MetaFilter metaFilter = new MetaFilter(modelIds);
List<ModelResp> modelRespList = modelService.getModelList(metaFilter);
for (ModelResp modelResp : modelRespList) {
List<Dim> dimList = modelResp.getModelDetail().getDimensions();
for (Dim dim : dimList) {
if (Objects.nonNull(dim.getTypeParams()) && dim.getTypeParams().getTimeGranularity().equals("none")) {
return false;
}
}
}
return true;
}
private void addGroupByFields(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { private void addGroupByFields(QueryContext queryContext, SemanticParseInfo semanticParseInfo) {
Long viewId = semanticParseInfo.getViewId(); Long viewId = semanticParseInfo.getViewId();
//add dimension group by //add dimension group by

View File

@@ -27,7 +27,7 @@ public class HavingCorrector extends BaseSemanticCorrector {
addHaving(queryContext, semanticParseInfo); addHaving(queryContext, semanticParseInfo);
//add having expression filed to select //add having expression filed to select
addHavingToSelect(semanticParseInfo); //addHavingToSelect(semanticParseInfo);
} }

View File

@@ -484,7 +484,15 @@ public class SqlSelectHelper {
SelectBody selectBody = selectStatement.getSelectBody(); SelectBody selectBody = selectStatement.getSelectBody();
if (selectBody instanceof PlainSelect) { if (selectBody instanceof PlainSelect) {
PlainSelect plainSelect = (PlainSelect) selectBody; PlainSelect plainSelect = (PlainSelect) selectBody;
return (Table) plainSelect.getFromItem(); if (plainSelect.getFromItem() instanceof Table) {
return (Table) plainSelect.getFromItem();
}
if (plainSelect.getFromItem() instanceof SubSelect) {
SubSelect subSelect = (SubSelect) plainSelect.getFromItem();
return getTable(subSelect.getSelectBody().toString());
}
} else if (selectBody instanceof SetOperationList) { } else if (selectBody instanceof SetOperationList) {
SetOperationList setOperationList = (SetOperationList) selectBody; SetOperationList setOperationList = (SetOperationList) selectBody;
if (!CollectionUtils.isEmpty(setOperationList.getSelects())) { if (!CollectionUtils.isEmpty(setOperationList.getSelects())) {

View File

@@ -5,4 +5,4 @@
# 评测意义 # 评测意义
制定评工具方便supersonic快速对接其他模型、更改参数配置对于提示词代码更改的影响至关重要,可以帮助我们了解这些变化是否会提高或降低准确率、响应速度。 制定评工具方便supersonic快速对接其他模型、更改参数配置,对于评估提示词代码更改所带来的影响至关重要,可以帮助我们了解这些变化是否会提高或降低准确率、响应速度。

View File

@@ -9,7 +9,7 @@ import jwt
def get_authorization(): def get_authorization():
exp = time.time() + 1000 exp = time.time() + 100000
token= jwt.encode({"token_user_name": "admin","exp": exp}, "secret", algorithm="HS512") token= jwt.encode({"token_user_name": "admin","exp": exp}, "secret", algorithm="HS512")
return "Bearer "+token return "Bearer "+token

View File

@@ -25,7 +25,7 @@ def get_pred_sql(query,url,agentId,chatId,authorization,default_sql):
header["Authorization"] =authorization header["Authorization"] =authorization
try: try:
result = requests.post(url=url, headers=header, json=data) result = requests.post(url=url, headers=header, json=data)
print(result.json()) #print(result.json())
print(result.json()["traceId"]) print(result.json()["traceId"])
if result.status_code == 200: if result.status_code == 200:
data = result.json()["data"] data = result.json()["data"]
@@ -68,7 +68,7 @@ def get_pred_result():
for i in range(0,len(questions)): for i in range(0,len(questions)):
pred_sql=get_pred_sql(questions[i],url,agent_id,chat_id,authorization,default_sql) pred_sql=get_pred_sql(questions[i],url,agent_id,chat_id,authorization,default_sql)
pred_sql_list.append(pred_sql) pred_sql_list.append(pred_sql)
time.sleep(30) time.sleep(60)
write_sql(pred_sql_path, pred_sql_list) write_sql(pred_sql_path, pred_sql_list)
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -56,10 +56,10 @@ def build_internet(path,day):
VALUES (?, ?, ?,?, ?, ?,?) VALUES (?, ?, ?,?, ?, ?,?)
''' '''
data = [ data = [
(imp_date,"item_enterprise_13_136","阿里云","2009年9月10日","item_enterprise_13_134","张勇",50000000), (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_134","张勇",100000000), (imp_date,"item_enterprise_13_137","天猫","2012年1月11日","item_enterprise_13_132","张勇",100000000),
(imp_date,"item_enterprise_13_138","腾讯游戏","2003","item_enterprise_13_131","马化腾",50000000), (imp_date,"item_enterprise_13_138","腾讯游戏","2003","item_enterprise_13_133","马化腾",50000000),
(imp_date,"item_enterprise_13_139","度小满","2018","item_enterprise_13_132","朱光",100000000), (imp_date,"item_enterprise_13_139","度小满","2018","item_enterprise_13_131","朱光",100000000),
(imp_date,"item_enterprise_13_140","京东金融","2017","item_enterprise_13_134","刘强东",100000000) (imp_date,"item_enterprise_13_140","京东金融","2017","item_enterprise_13_134","刘强东",100000000)
] ]
cursor.executemany(insert_data_query, data) cursor.executemany(insert_data_query, data)
@@ -83,10 +83,10 @@ def build_internet(path,day):
''' '''
data = [ data = [
(imp_date,"item_enterprise_13_131","item_enterprise_13_139",0.1,0.1,0.3), (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_133","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_134","item_enterprise_13_140",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_132","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_132","item_enterprise_13_136",0.1,0.1,0.3)
] ]
cursor.executemany(insert_data_query, data) cursor.executemany(insert_data_query, data)
conn.commit() 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, "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_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_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) cursor.executemany(insert_data_query, data)
conn.commit() conn.commit()

View File

@@ -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 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.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 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 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.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, 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, 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

View File

@@ -2,9 +2,9 @@
在各公司所有品牌收入排名中,给出每一个品牌,其所在公司以及收入占该公司的总收入比例 在各公司所有品牌收入排名中,给出每一个品牌,其所在公司以及收入占该公司的总收入比例
在各公司所有品牌收入排名中,给出每一个品牌和其法人,其所在公司以及收入占该公司的总收入比例 在各公司所有品牌收入排名中,给出每一个品牌和其法人,其所在公司以及收入占该公司的总收入比例
在各公司所有品牌收入排名中,给出每一个品牌,其所在公司以及收入占该公司的总收入比例,同时给出该公司总部所在地 在各公司所有品牌收入排名中,给出每一个品牌,其所在公司以及收入占该公司的总收入比例,同时给出该公司总部所在地
在公司各品牌收入排名的利润占比最多10%时,给出公司的名称品牌的名称并给出公司各品牌收入排名的营收占比 在公司各品牌收入排名的利润占比最多0.1时,给出公司的名称品牌的名称并给出公司各品牌收入排名的营收占比
在公司各品牌收入排名的利润占比小于10%时,给出公司的名称品牌的名称并给出公司各品牌收入排名的营收占比 在公司各品牌收入排名的利润占比小于0.1时,给出公司的名称品牌的名称并给出公司各品牌收入排名的营收占比
在公司各品牌收入排名的利润占比不止10%时,给出公司的名称品牌的名称并给出公司各品牌收入排名的营收占比 在公司各品牌收入排名的利润占比不止0.1时,给出公司的名称品牌的名称并给出公司各品牌收入排名的营收占比
注册资本不小于1亿的品牌中哪个品牌的平均营收占比最大并给出它的法定代表人 注册资本不小于1亿的品牌中哪个品牌的平均营收占比最大并给出它的法定代表人
注册资本大于1亿的品牌中哪5个品牌收入最少并给出它们的法定代表人 注册资本大于1亿的品牌中哪5个品牌收入最少并给出它们的法定代表人
找到注册资本少于一个亿的品牌及其法人,并给出对应公司的平均营收占比 找到注册资本少于一个亿的品牌及其法人,并给出对应公司的平均营收占比
@@ -12,17 +12,17 @@
给出注册资本不超过一亿的的品牌及其法人,并给出对应的公司的总营收占比 给出注册资本不超过一亿的的品牌及其法人,并给出对应的公司的总营收占比
给出注册资本少于一亿的品牌及其法人,并给出对应的公司的最大营收占比 给出注册资本少于一亿的品牌及其法人,并给出对应的公司的最大营收占比
给出注册资本不超过1亿的品牌及其法人并找出对应的公司的最大营收占比 给出注册资本不超过1亿的品牌及其法人并找出对应的公司的最大营收占比
在注册资本超过一亿的公司中,给出公司各品牌收入品牌的平均营收占比正好50%的品牌及其法人 在注册资本超过一亿的公司中,给出公司各品牌收入品牌的平均营收占比正好0.5的品牌及其法人
在注册资本不超过一亿的公司中,给出个品牌收入排名五的品牌及其法人 在注册资本不超过一亿的公司中,给出个品牌收入排名五的品牌及其法人
在各品牌收入在公司排名中当品牌的注册资本不大于1亿时给出公司各品牌收入排名的支出占比的平均值小于等于45%的那些品牌的名称以及公司各品牌收入排名的营收占比的平均值 在各品牌收入在公司排名中当品牌的注册资本不大于1亿时给出公司各品牌收入排名的支出占比的平均值小于等于0.45的那些品牌的名称以及公司各品牌收入排名的营收占比的平均值
在各品牌收入在公司排名中当品牌的注册资本小于1亿时给出公司各品牌收入排名数量小于等于5的那些品牌的名称以及公司各品牌收入排名的营收占比的最小值 在各品牌收入在公司排名中当品牌的注册资本小于1亿时给出公司各品牌收入排名数量小于等于5的那些品牌的名称以及公司各品牌收入排名的营收占比的最小值
在各品牌收入在公司排名中,给出每个品牌的名称,品牌的法定代表人,以及公司各品牌收入排名的营收占比的平均值 在各品牌收入在公司排名中,给出每个品牌的名称,品牌的法定代表人,以及公司各品牌收入排名的营收占比的平均值
在各品牌收入在公司排名中,给出每个品牌的名称,品牌的法定代表人,以及公司各品牌收入排名的营收占比的最小值 在各品牌收入在公司排名中,给出每个品牌的名称,品牌的法定代表人,以及公司各品牌收入排名的营收占比的最小值
在各品牌收入在公司排名中,给出每个品牌的名称,品牌的法定代表人,以及公司各品牌收入排名的营收占比的总和 在各品牌收入在公司排名中,给出每个品牌的名称,品牌的法定代表人,以及公司各品牌收入排名的营收占比的总和
在各品牌收入在公司排名中,给出每个品牌的名称,品牌的法定代表人,以及公司各品牌收入排名的营收占比的最大值 在各品牌收入在公司排名中,给出每个品牌的名称,品牌的法定代表人,以及公司各品牌收入排名的营收占比的最大值
在各品牌收入在公司排名中给出收入排名不超过5的品牌及其法人 在各品牌收入在公司排名中给出收入排名不超过5的品牌及其法人
在各品牌收入在公司排名中,给出在收入排名中的平均营收占比超过50%的品牌及其法人 在各品牌收入在公司排名中,给出在收入排名中的平均营收占比超过0.5的品牌及其法人
在各品牌收入在公司排名中,当公司各品牌收入排名的利润占比的平均值小于等于60%时,给出品牌的名称以及公司各品牌收入排名的营收占比的平均值 在各品牌收入在公司排名中,当公司各品牌收入排名的利润占比的平均值小于等于0.6时,给出品牌的名称以及公司各品牌收入排名的营收占比的平均值
在各品牌收入在公司排名中当公司各品牌收入排名数量等于5时给出品牌的名称以及公司各品牌收入排名的营收占比的最小值 在各品牌收入在公司排名中当公司各品牌收入排名数量等于5时给出品牌的名称以及公司各品牌收入排名的营收占比的最小值
哪个品牌收入的平均利润占比最大,给出品牌的法定代表人,以及其收入平均营收占比 哪个品牌收入的平均利润占比最大,给出品牌的法定代表人,以及其收入平均营收占比
哪3个品牌的收入最多给出品牌的法定代表人以及其收入总营收占比 哪3个品牌的收入最多给出品牌的法定代表人以及其收入总营收占比
@@ -38,10 +38,6 @@
给出每一个品牌和其法人,所属的公司以及总部所在城市 给出每一个品牌和其法人,所属的公司以及总部所在城市
有自己品牌的公司有哪些?给出这些公司和总部所在地 有自己品牌的公司有哪些?给出这些公司和总部所在地
有自己品牌的公司有哪些?给出这些公司和年营业额 有自己品牌的公司有哪些?给出这些公司和年营业额
在各公司其品牌的历年收入中,给出每一个品牌,其所属的公司和公司总部所在地点,并给出该品牌近几年的营收
在各公司其品牌的历年收入中,给出每一个品牌,其所属的公司和公司年营业额,并给出该品牌近几年的营收
在各公司其品牌的历年收入中,给出每一个品牌,其所属的公司和公司法人,并给出该品牌近几年的营收
在各公司其品牌的历年收入中,给出每一个品牌,其所属的公司,以及该品牌近几年的营收
在品牌的注册资本至少1亿时给出公司的名称以及公司的总部地点品牌的法定代表人 在品牌的注册资本至少1亿时给出公司的名称以及公司的总部地点品牌的法定代表人
在品牌的注册资本少于1亿时给出公司的名称以及公司的总部地点品牌的法定代表人 在品牌的注册资本少于1亿时给出公司的名称以及公司的总部地点品牌的法定代表人
在品牌的注册资本超过1亿时给出公司的名称以及公司的总部地点品牌的法定代表人 在品牌的注册资本超过1亿时给出公司的名称以及公司的总部地点品牌的法定代表人
@@ -56,7 +52,7 @@
给出注册资本不超过一亿且年营业额少于288亿的公司以及总部地点和法人 给出注册资本不超过一亿且年营业额少于288亿的公司以及总部地点和法人
找出注册资本少于一亿且年营业额不超过288亿的公司以及总部在哪法人是谁 找出注册资本少于一亿且年营业额不超过288亿的公司以及总部在哪法人是谁
在公司品牌历年收入的利润最多500亿时给出公司的名称品牌的名称并给出公司品牌历年收入的营收 在公司品牌历年收入的利润最多500亿时给出公司的名称品牌的名称并给出公司品牌历年收入的营收
在公司品牌历年收入的营收同比增长至少100%时,给出公司的名称品牌的名称并给出公司品牌历年收入的营收 在公司品牌历年收入的营收同比增长至少1时给出公司的名称品牌的名称并给出公司品牌历年收入的营收
年营业额不小于288亿的公司中哪5个公司的平均营收占比最少,并给出它们的总部地点 年营业额不小于288亿的公司中哪5个公司的平均营收占比最少,并给出它们的总部地点
年营业额不小于288亿的公司中哪个公司的平均营收占比最大并给出它的总部地点 年营业额不小于288亿的公司中哪个公司的平均营收占比最大并给出它的总部地点
注册资本大于1亿的品牌中哪个品牌历年收入的平均营收最大并给出它的法定代表人 注册资本大于1亿的品牌中哪个品牌历年收入的平均营收最大并给出它的法定代表人
@@ -78,12 +74,12 @@
给出不超过288亿年营业额的公司及总部地点并给出这些品牌中的平均注册资本 给出不超过288亿年营业额的公司及总部地点并给出这些品牌中的平均注册资本
给出不超过288亿年营业额的公司及其总部地点并给出这些品牌的的最大注册资本 给出不超过288亿年营业额的公司及其总部地点并给出这些品牌的的最大注册资本
给出年营业额超过288亿的公司及其总部地点并给出这些品牌的的总注册资本 给出年营业额超过288亿的公司及其总部地点并给出这些品牌的的总注册资本
给出年营业额不超过288亿的各公司品牌中给出收入排名中的营收占比加起来不超过50%的公司及其总部地点 给出年营业额不超过288亿的各公司品牌中给出收入排名中的营收占比加起来不超过0.5的公司及其总部地点
给出年营业额低于288亿的各公司的各品牌中给出收入排名中的总营收占比不超过50%的公司及总部地点中 给出年营业额低于288亿的各公司的各品牌中给出收入排名中的总营收占比不超过0.5的公司及总部地点中
在年营业额不少于288亿的公司中给出品牌不超过5个的公司及其总部地点 在年营业额不少于288亿的公司中给出品牌不超过5个的公司及其总部地点
在年营业额不超过288亿的公司中给出品牌少于5个的公司及其总部地点 在年营业额不超过288亿的公司中给出品牌少于5个的公司及其总部地点
在各公司的各品牌收入排名中当公司的年营业额大于288亿时给出公司各品牌收入排名数量大于5的那些公司的名称以及公司各品牌收入排名的营收占比的最小值 在各公司的各品牌收入排名中当公司的年营业额大于288亿时给出公司各品牌收入排名数量大于5的那些公司的名称以及公司各品牌收入排名的营收占比的最小值
在各公司的各品牌收入排名中当公司的年营业额小于288亿时给出公司各品牌收入排名的利润占比的平均值大于75%的那些公司的名称以及公司各品牌收入排名的营收占比的最大值 在各公司的各品牌收入排名中当公司的年营业额小于288亿时给出公司各品牌收入排名的利润占比的平均值大于0.75的那些公司的名称以及公司各品牌收入排名的营收占比的最大值
在各品牌的历年收入中当品牌的注册资本不大于1亿时给出公司品牌历年收入的利润同比增长的总和小于等于1000000的那些品牌的名称以及公司品牌历年收入的营收的最大值 在各品牌的历年收入中当品牌的注册资本不大于1亿时给出公司品牌历年收入的利润同比增长的总和小于等于1000000的那些品牌的名称以及公司品牌历年收入的营收的最大值
在各品牌的历年收入中当品牌的注册资本小于1亿时给出公司品牌历年收入数量小于5的那些品牌的名称以及公司品牌历年收入的营收的最小值 在各品牌的历年收入中当品牌的注册资本小于1亿时给出公司品牌历年收入数量小于5的那些品牌的名称以及公司品牌历年收入的营收的最小值
在各品牌所属的公司中当公司的年营业额大于288亿时给出品牌数量小于5的那些公司的名称以及品牌的注册资本的总和 在各品牌所属的公司中当公司的年营业额大于288亿时给出品牌数量小于5的那些公司的名称以及品牌的注册资本的总和
@@ -98,3 +94,7 @@
在各品牌的历年收入中,给出每个品牌的名称,品牌的法定代表人,以及公司品牌历年收入的营收的最大值 在各品牌的历年收入中,给出每个品牌的名称,品牌的法定代表人,以及公司品牌历年收入的营收的最大值
在各品牌所属的公司中,给出每个公司的名称,公司的总部地点,以及品牌的注册资本的总和 在各品牌所属的公司中,给出每个公司的名称,公司的总部地点,以及品牌的注册资本的总和
在各品牌所属的公司中,给出每个公司的名称,公司的总部地点,以及品牌的注册资本的最大值 在各品牌所属的公司中,给出每个公司的名称,公司的总部地点,以及品牌的注册资本的最大值
在各品牌所属的公司中,给出每个公司的名称,公司的总部地点,以及品牌的注册资本的最小值
在各品牌所属的公司中,给出每个公司的名称,公司的总部地点,以及品牌的注册资本的平均值
在各公司的各品牌收入排名种哪些公司的品牌排名的总营收占比超过0.5,并给出总部的地点
在各公司的各品牌收入排名中哪些公司的品牌收入排名超过5并给出公司的总部地点

View File

@@ -522,14 +522,19 @@ def evaluate(gold, predict, db_dir, etype, kmaps,query_path):
p_sql = p_str p_sql = p_str
if etype in ["all", "exec"]: if etype in ["all", "exec"]:
exec_score = eval_exec_match(db, p_str, g_str, p_sql, g_sql) result = eval_exec_match(db, p_str, g_str, p_sql, g_sql)
if not exec_score: #exec_score = eval_exec_match(db, p_str, g_str, p_sql, g_sql)
if not result["equal"]:
element={} element={}
element["query"]=questions[index] element["query"]=questions[index]
element["gold_sql"]=g_str element["gold_sql"]=g_str
element["pred_sql"]=p_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) log_list.append(element)
if exec_score: if result["equal"]:
scores[hardness]['exec'] += 1.0 scores[hardness]['exec'] += 1.0
scores['all']['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 return 1 if the values between prediction and gold are matching
in the corresponding index. Currently not support multiple col_unit(pairs). in the corresponding index. Currently not support multiple col_unit(pairs).
""" """
result={}
conn = sqlite3.connect(db) conn = sqlite3.connect(db)
cursor = conn.cursor() cursor = conn.cursor()
try: try:
@@ -618,8 +624,10 @@ def eval_exec_match(db, p_str, g_str, pred, gold):
for index in range(0,len(p_fields)): for index in range(0,len(p_fields)):
p_fields[index]=re.sub("t\d+.", "",p_fields[index].replace("`","").lower()) p_fields[index]=re.sub("t\d+.", "",p_fields[index].replace("`","").lower())
p_res = cursor.fetchall() p_res = cursor.fetchall()
except: except Exception as e:
return False logging.info(e)
result["equal"]=False
return result
cursor.execute(g_str) cursor.execute(g_str)
q_res = cursor.fetchall() 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) g_fields = parse_sql(g_str)
#print("p_res_map:{}".format(res_map(p_res, p_fields))) p_res_map=res_map(p_res, p_fields)
#print("q_res_map:{}".format(res_map(q_res, g_fields))) q_res_map=res_map(q_res, g_fields)
return res_map(p_res, p_fields) == 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): def parse_sql(sql):
# 使用 sqlparse 库解析 SQL 查询语句 # 使用 sqlparse 库解析 SQL 查询语句

View File

@@ -34,6 +34,11 @@ authentication:
time: time:
threshold: 100 threshold: 100
dimension:
topn: 20
metric:
topn: 20
mybatis: mybatis:
mapper-locations=classpath:mappers/custom/*.xml,classpath*:/mappers/*.xml mapper-locations=classpath:mappers/custom/*.xml,classpath*:/mappers/*.xml

View File

@@ -1118,22 +1118,22 @@ insert into company(imp_date,company_id,company_name,headquarter_address,company
insert into company(imp_date,company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES (DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_134','北京京东世纪贸易有限公司','北京','1998','刘强东','刘强东',28800000000,179000); insert into company(imp_date,company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES (DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_134','北京京东世纪贸易有限公司','北京','1998','刘强东','刘强东',28800000000,179000);
insert into company(imp_date,company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES (DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_135','网易公司','杭州','1997','丁磊','丁磊',67500000000,20000); insert into company(imp_date,company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES (DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_135','网易公司','杭州','1997','丁磊','丁磊',67500000000,20000);
insert into brand(imp_date,brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES (DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_136','阿里云','2009年9月10日','item_enterprise_13_134','张勇',50000000); insert into brand(imp_date,brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES (DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_136','阿里云','2009年9月10日','item_enterprise_13_132','张勇',50000000);
insert into brand(imp_date,brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES (DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_137','天猫','2012年1月11日','item_enterprise_13_134','张勇',100000000); insert into brand(imp_date,brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES (DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_137','天猫','2012年1月11日','item_enterprise_13_132','张勇',100000000);
insert into brand(imp_date,brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES (DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_138','腾讯游戏','2003','item_enterprise_13_131','马化腾',50000000); insert into brand(imp_date,brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES (DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_138','腾讯游戏','2003','item_enterprise_13_133','马化腾',50000000);
insert into brand(imp_date,brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES (DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_139','度小满','2018','item_enterprise_13_132','朱光',100000000); insert into brand(imp_date,brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES (DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_139','度小满','2018','item_enterprise_13_131','朱光',100000000);
insert into brand(imp_date,brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES (DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_140','京东金融','2017','item_enterprise_13_134','刘强东',100000000); insert into brand(imp_date,brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES (DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_140','京东金融','2017','item_enterprise_13_134','刘强东',100000000);
insert into company_revenue(imp_date,company_id,brand_id,revenue_proportion,profit_proportion,expenditure_proportion) VALUES ( DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_131','item_enterprise_13_139',10,10,30); insert into company_revenue(imp_date,company_id,brand_id,revenue_proportion,profit_proportion,expenditure_proportion) VALUES ( DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_131','item_enterprise_13_139',10,10,30);
insert into company_revenue(imp_date,company_id,brand_id,revenue_proportion,profit_proportion,expenditure_proportion) VALUES ( DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_134','item_enterprise_13_138',80,80,60); insert into company_revenue(imp_date,company_id,brand_id,revenue_proportion,profit_proportion,expenditure_proportion) VALUES ( DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_133','item_enterprise_13_138',80,80,60);
insert into company_revenue(imp_date,company_id,brand_id,revenue_proportion,profit_proportion,expenditure_proportion) VALUES ( DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_135','item_enterprise_13_139',80,80,60); insert into company_revenue(imp_date,company_id,brand_id,revenue_proportion,profit_proportion,expenditure_proportion) VALUES ( DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_134','item_enterprise_13_140',80,80,60);
insert into company_revenue(imp_date,company_id,brand_id,revenue_proportion,profit_proportion,expenditure_proportion) VALUES ( DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_131','item_enterprise_13_137',80,80,60); insert into company_revenue(imp_date,company_id,brand_id,revenue_proportion,profit_proportion,expenditure_proportion) VALUES ( DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_132','item_enterprise_13_137',80,80,60);
insert into company_revenue(imp_date,company_id,brand_id,revenue_proportion,profit_proportion,expenditure_proportion) VALUES ( DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_135','item_enterprise_13_137',10,10,30); insert into company_revenue(imp_date,company_id,brand_id,revenue_proportion,profit_proportion,expenditure_proportion) VALUES ( DATEADD('DAY', -1, CURRENT_DATE()),'item_enterprise_13_132','item_enterprise_13_136',10,10,30);
insert into company_brand_revenue(imp_date,year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES (DATEADD('DAY', -1, CURRENT_DATE()), '2018','item_enterprise_13_138',500000000,-300000000,10,-10); insert into company_brand_revenue(imp_date,year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES (DATEADD('DAY', -1, CURRENT_DATE()), '2018','item_enterprise_13_138',500000000,-300000000,10,-10);
insert into company_brand_revenue(imp_date,year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES (DATEADD('DAY', -1, CURRENT_DATE()), '2019','item_enterprise_13_136',100000000000,50000000000,100,50); insert into company_brand_revenue(imp_date,year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES (DATEADD('DAY', -1, CURRENT_DATE()), '2019','item_enterprise_13_136',100000000000,50000000000,100,50);
insert into company_brand_revenue(imp_date,year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ( DATEADD('DAY', -1, CURRENT_DATE()),'2018','item_enterprise_13_137',100000000000,50000000000,100,-10); insert into company_brand_revenue(imp_date,year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ( DATEADD('DAY', -1, CURRENT_DATE()),'2018','item_enterprise_13_137',100000000000,50000000000,100,-10);
insert into company_brand_revenue(imp_date,year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES (DATEADD('DAY', -1, CURRENT_DATE()), '2018','item_enterprise_13_139',500000000,50000000000,10,50); insert into company_brand_revenue(imp_date,year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES (DATEADD('DAY', -1, CURRENT_DATE()), '2018','item_enterprise_13_139',500000000,50000000000,10,50);
insert into company_brand_revenue(imp_date,year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ( DATEADD('DAY', -1, CURRENT_DATE()),'2018','item_enterprise_13_138',100000000000,-300000000,10,50); insert into company_brand_revenue(imp_date,year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ( DATEADD('DAY', -1, CURRENT_DATE()),'2018','item_enterprise_13_140',100000000000,-300000000,10,50);
-- benchmark -- benchmark