• Open Book LLM Science Exam


    工作太忙,导致完全没有时间学习了。国庆期间,抽空找个baseline继续学习一波

    https://www.kaggle.com/code/jjinho/open-book-llm-science-exam/notebook

    • 首先将维基百科数据都保存为faiss index,根据train训练集的prompt选择最相似的3个
    trn = pd.read_csv("/kaggle/input/kaggle-llm-science-exam/train.csv")
    
    model = SentenceTransformer(MODEL, device='cuda')
    model.max_seq_length = MAX_LENGTH
    model = model.half()
    
    sentence_index = read_index("/kaggle/input/wikipedia-2023-07-faiss-index/wikipedia_202307.index")
    
    # 训练集中prompt转化为embed
    prompt_embeddings = model.encode(trn.prompt.values, batch_size=BATCH_SIZE, device=DEVICE, show_progress_bar=True, convert_to_tensor=True, normalize_embeddings=True).half()
    prompt_embeddings = prompt_embeddings.detach().cpu().numpy()
    
    # 选择top3相似
    search_score, search_index = sentence_index.search(prompt_embeddings, 3)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 根据index得到文件
    # wiki的index
    df = pd.read_parquet("/kaggle/input/wikipedia-20230701/wiki_2023_index.parquet", columns=['id', 'file'])
    
    wikipedia_file_data = []
    
    for i, (scr, idx) in tqdm(enumerate(zip(search_score, search_index)), total=len(search_score)):
        
        ## Get indices by score threshold
        #scr_idx = idx[np.where(scr <= 0.85)]
        scr_idx = idx
        _df = df.loc[scr_idx].copy()
        _df['prompt_id'] = i
        wikipedia_file_data.append(_df)
    wikipedia_file_data = pd.concat(wikipedia_file_data).reset_index(drop=True)
    wikipedia_file_data = wikipedia_file_data[['id', 'prompt_id', 'file']].drop_duplicates().sort_values(['file', 'id']).reset_index(drop=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 根据文件得到text
    wiki_text_data = []
    
    for file in tqdm(wikipedia_file_data.file.unique(), total=len(wikipedia_file_data.file.unique())):
        _id = [str(i) for i in wikipedia_file_data[wikipedia_file_data['file']==file]['id'].tolist()]
        _df = pd.read_parquet(f"{WIKI_PATH}/{file}", columns=['id', 'text'])
    
        _df = _df[_df['id'].isin(_id)]
        wiki_text_data.append(_df)
        _ = gc.collect()
    wiki_text_data = pd.concat(wiki_text_data).drop_duplicates().reset_index(drop=True)
    _ = gc.collect()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • Parse documents into sentences
      • 根据text进行sentence embedding
      wiki_data_embeddings = model.encode(processed_wiki_text_data.text, batch_size=BATCH_SIZE, device=DEVICE, show_progress_bar=True, convert_to_tensor=True, normalize_embeddings=True).half()
      wiki_data_embeddings = wiki_data_embeddings.detach().cpu().numpy()
      
      • 1
      • 2

      得到wiki 增强的数据

      第二部分

      df_valid = pd.read_csv("/kaggle/input/kaggle-llm-science-exam/test.csv")
      retrieved_articles_parsed = get_relevant_documents_parsed(df_valid)
      
      • 1
      • 2

      其中的get_relevant_documents_parsed

        问题roadmap

        如何解决这个问题的思路,整理的比较全面 https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/440908

        • BERT or GPT
        • Multi class or Multi label

        Top solution

        3rd

        在这里插入图片描述

        • Wikipedia dump
        • rerank模型进行微调
        • Train with hard negatives: 使用两个70b 的大模型对于一小部分(500)最难的问题

        10th

        在这里插入图片描述

        • 多个不同的wiki数据召回: 也就是上图的四种
        • deberta
        • 最大概率的方法集成
        • tfidf后处理
      • 相关阅读:
        Redis八股文目录
        SSM注解大全
        华为云文件上传(单个上传和分段上传)
        面试知识点1(硬件、Linux、虚拟化、网络、openstack、Docker、KVM)
        [100天算法】-最短无序连续子数组(day 66)
        自定义el-upload 上传文件
        689. 三个无重叠子数组的最大和(dp)
        RK3568驱动指南|第六篇-平台总线-第53章 probe函数编写实验
        在受污染的二叉树中查找元素 C++
        Cookie与Session详解
      • 原文地址:https://blog.csdn.net/weixin_38812492/article/details/133393816