Files
2026-07-13 13:39:21 +08:00

215 lines
12 KiB
Python

from typing import Dict
def get_task_def_by_task_name_and_type(task_name: str, task_type: str) -> str:
if task_type in ['STS']:
return "Retrieve semantically similar text."
if task_type in ['Summarization']:
return "Given a news summary, retrieve other semantically similar summaries."
if task_type in ['BitextMining']:
return "Retrieve parallel sentences."
if task_type in ['Classification']:
task_name_to_instruct: Dict[str, str] = {
'AmazonCounterfactualClassification': 'Classify a given Amazon customer review text as either counterfactual or not-counterfactual.',
'AmazonPolarityClassification': 'Classify Amazon reviews into positive or negative sentiment.',
'AmazonReviewsClassification': 'Classify the given Amazon review into its appropriate rating category.',
'Banking77Classification': 'Given a online banking query, find the corresponding intents.',
'EmotionClassification': 'Classify the emotion expressed in the given Twitter message into one of the six emotions: anger, fear, joy, love, sadness, and surprise.',
'ImdbClassification': 'Classify the sentiment expressed in the given movie review text from the IMDB dataset.',
'MassiveIntentClassification': 'Given a user utterance as query, find the user intents.',
'MassiveScenarioClassification': 'Given a user utterance as query, find the user scenarios.',
'MTOPDomainClassification': 'Classify the intent domain of the given utterance in task-oriented conversation.',
'MTOPIntentClassification': 'Classify the intent of the given utterance in task-oriented conversation.',
'ToxicConversationsClassification': 'Classify the given comments as either toxic or not toxic.',
'TweetSentimentExtractionClassification': 'Classify the sentiment of a given tweet as either positive, negative, or neutral.',
# C-MTEB eval instructions
'TNews': 'Classify the fine-grained category of the given news title.',
'IFlyTek': 'Given an App description text, find the appropriate fine-grained category.',
'MultilingualSentiment': 'Classify sentiment of the customer review into positive, neutral, or negative.',
'JDReview': 'Classify the customer review for iPhone on e-commerce platform into positive or negative.',
'OnlineShopping': 'Classify the customer review for online shopping into positive or negative.',
'Waimai': 'Classify the customer review from a food takeaway platform into positive or negative.',
}
return task_name_to_instruct[task_name]
if task_type in ['Clustering']:
task_name_to_instruct: Dict[str, str] = {
'ArxivClusteringP2P': 'Identify the main and secondary category of Arxiv papers based on the titles and abstracts.',
'ArxivClusteringS2S': 'Identify the main and secondary category of Arxiv papers based on the titles.',
'BiorxivClusteringP2P': 'Identify the main category of Biorxiv papers based on the titles and abstracts.',
'BiorxivClusteringS2S': 'Identify the main category of Biorxiv papers based on the titles.',
'MedrxivClusteringP2P': 'Identify the main category of Medrxiv papers based on the titles and abstracts.',
'MedrxivClusteringS2S': 'Identify the main category of Medrxiv papers based on the titles.',
'RedditClustering': 'Identify the topic or theme of Reddit posts based on the titles.',
'RedditClusteringP2P': 'Identify the topic or theme of Reddit posts based on the titles and posts.',
'StackExchangeClustering': 'Identify the topic or theme of StackExchange posts based on the titles.',
'StackExchangeClusteringP2P': 'Identify the topic or theme of StackExchange posts based on the given paragraphs.',
'TwentyNewsgroupsClustering': 'Identify the topic or theme of the given news articles.',
# C-MTEB eval instructions
'CLSClusteringS2S': 'Identify the main category of scholar papers based on the titles.',
'CLSClusteringP2P': 'Identify the main category of scholar papers based on the titles and abstracts.',
'ThuNewsClusteringS2S': 'Identify the topic or theme of the given news articles based on the titles.',
'ThuNewsClusteringP2P': 'Identify the topic or theme of the given news articles based on the titles and contents.',
}
return task_name_to_instruct[task_name]
if task_type in ['Reranking', 'PairClassification']:
task_name_to_instruct: Dict[str, str] = {
'AskUbuntuDupQuestions': 'Retrieve duplicate questions from AskUbuntu forum.',
'MindSmallReranking': 'Retrieve relevant news articles based on user browsing history.',
'SciDocsRR': 'Given a title of a scientific paper, retrieve the titles of other relevant papers.',
'StackOverflowDupQuestions': 'Retrieve duplicate questions from StackOverflow forum.',
'SprintDuplicateQuestions': 'Retrieve duplicate questions from Sprint forum.',
'TwitterSemEval2015': 'Retrieve tweets that are semantically similar to the given tweet.',
'TwitterURLCorpus': 'Retrieve tweets that are semantically similar to the given tweet.',
# C-MTEB eval instructions
'T2Reranking': 'Given a Chinese search query, retrieve web passages that answer the question.',
'MMarcoReranking': 'Given a Chinese search query, retrieve web passages that answer the question.',
'CMedQAv1': 'Given a Chinese community medical question, retrieve replies that best answer the question.',
'CMedQAv2': 'Given a Chinese community medical question, retrieve replies that best answer the question.',
'Ocnli': 'Retrieve semantically similar text.',
'Cmnli': 'Retrieve semantically similar text.',
}
return task_name_to_instruct[task_name]
if task_type in ['Retrieval']:
if task_name.lower().startswith('cqadupstack'):
return 'Given a question, retrieve detailed question descriptions from Stackexchange that are duplicates to the given question.'
task_name_to_instruct: Dict[str, str] = {
'ArguAna': 'Given a claim, find documents that refute the claim.',
'ClimateFEVER': 'Given a claim about climate change, retrieve documents that support or refute the claim.',
'DBPedia': 'Given a query, retrieve relevant entity descriptions from DBPedia.',
'FEVER': 'Given a claim, retrieve documents that support or refute the claim.',
'FiQA2018': 'Given a financial question, retrieve user replies that best answer the question.',
'HotpotQA': 'Given a multi-hop question, retrieve documents that can help answer the question.',
'MSMARCO': 'Given a web search query, retrieve relevant passages that answer the query.',
'NFCorpus': 'Given a question, retrieve relevant documents that best answer the question.',
'NQ': 'Given a question, retrieve Wikipedia passages that answer the question.',
'QuoraRetrieval': 'Given a question, retrieve questions that are semantically equivalent to the given question.',
'SCIDOCS': 'Given a scientific paper title, retrieve paper abstracts that are cited by the given paper.',
'SciFact': 'Given a scientific claim, retrieve documents that support or refute the claim.',
'Touche2020': 'Given a question, retrieve detailed and persuasive arguments that answer the question.',
'TRECCOVID': 'Given a query on COVID-19, retrieve documents that answer the query.',
# C-MTEB eval instructions
'T2Retrieval': 'Given a Chinese search query, retrieve web passages that answer the question.',
'MMarcoRetrieval': 'Given a web search query, retrieve relevant passages that answer the query.',
'DuRetrieval': 'Given a Chinese search query, retrieve web passages that answer the question.',
'CovidRetrieval': 'Given a question on COVID-19, retrieve news articles that answer the question.',
'CmedqaRetrieval': 'Given a Chinese community medical question, retrieve replies that best answer the question.',
'EcomRetrieval': 'Given a user query from an e-commerce website, retrieve description sentences of relevant products.',
'MedicalRetrieval': 'Given a medical question, retrieve user replies that best answer the question.',
'VideoRetrieval': 'Given a video search query, retrieve the titles of relevant videos.',
}
# add lower case keys to match some beir names
task_name_to_instruct.update({k.lower(): v for k, v in task_name_to_instruct.items()})
# other cases where lower case match still doesn't work
task_name_to_instruct['trec-covid'] = task_name_to_instruct['TRECCOVID']
task_name_to_instruct['climate-fever'] = task_name_to_instruct['ClimateFEVER']
task_name_to_instruct['dbpedia-entity'] = task_name_to_instruct['DBPedia']
task_name_to_instruct['webis-touche2020'] = task_name_to_instruct['Touche2020']
task_name_to_instruct['fiqa'] = task_name_to_instruct['FiQA2018']
task_name_to_instruct['quora'] = task_name_to_instruct['QuoraRetrieval']
# for miracl evaluation
task_name_to_instruct['miracl'] = 'Given a question, retrieve Wikipedia passages that answer the question.'
return task_name_to_instruct[task_name]
raise ValueError(f"No instruction config for task {task_name} with type {task_type}")
tasks_desc = {
'Retrieval': [
'ArguAna',
'ClimateFEVER',
'DBPedia',
'FEVER',
'FiQA2018',
'HotpotQA',
'MSMARCO',
'NFCorpus',
'NQ',
'QuoraRetrieval',
'SCIDOCS',
'SciFact',
'Touche2020',
'TRECCOVID',
'CQADupstackAndroidRetrieval',
'CQADupstackEnglishRetrieval',
'CQADupstackGamingRetrieval',
'CQADupstackGisRetrieval',
'CQADupstackMathematicaRetrieval',
'CQADupstackPhysicsRetrieval',
'CQADupstackProgrammersRetrieval',
'CQADupstackStatsRetrieval',
'CQADupstackTexRetrieval',
'CQADupstackUnixRetrieval',
'CQADupstackWebmastersRetrieval',
'CQADupstackWordpressRetrieval'
],
'Classification': [
# 12
'AmazonCounterfactualClassification',
'AmazonPolarityClassification',
'AmazonReviewsClassification',
'Banking77Classification',
'EmotionClassification',
'ImdbClassification',
'MassiveIntentClassification',
'MassiveScenarioClassification',
'MTOPDomainClassification',
'MTOPIntentClassification',
'ToxicConversationsClassification',
'TweetSentimentExtractionClassification',
],
'Clustering': [
# 11
'ArxivClusteringP2P',
'ArxivClusteringS2S',
'BiorxivClusteringP2P',
'BiorxivClusteringS2S',
'MedrxivClusteringP2P',
'MedrxivClusteringS2S',
'RedditClustering',
'RedditClusteringP2P',
'StackExchangeClustering',
'StackExchangeClusteringP2P',
'TwentyNewsgroupsClustering',
],
'PairClassification': [
# 3
'SprintDuplicateQuestions',
'TwitterSemEval2015',
'TwitterURLCorpus',
],
'Reranking': [
# 4
'AskUbuntuDupQuestions',
'MindSmallReranking',
'SciDocsRR',
'StackOverflowDupQuestions',
],
'STS': [
# 10
'BIOSSES',
'SICK-R',
'STS12',
'STS13',
'STS14',
'STS15',
'STS16',
'STS17',
'STS22',
'STSBenchmark',
],
'Summarization': [
# 1
'SummEval',
]
}