返回列表

47th place solution -- Simple Method Based on Open Codes

573. Kaggle - LLM Science Exam | kaggle-llm-science-exam

开始: 2023-07-11 结束: 2023-10-10 自然语言处理 数据算法赛
第47名解决方案——基于开源代码的简单方法

第47名解决方案——基于开源代码的简单方法

作者: wqlun06
排名: 第47名
发布日期: 2023-10-13

感谢

首先,我们想向主办方和Kaggle团队组织这次令人惊叹的比赛表示诚挚的感谢。感谢我的团队成员 @yuanji1239 的辛勤工作。感谢Chris Deotte、MGoksu、MB和Radek分享OpenBook技术!

RAG(检索增强生成)

数据集

  1. Chris Deotte的60k数据集@cderotte 提供
    • 该数据集包含原始上下文,被划分为训练集、验证集和离线测试集,用于训练deberta-v3-large模型。
  2. Radek的6.5k数据集
    • 使用 tfidf召回代码 处理该数据集
    • 使用tfidf召回的上下文将数据集划分为训练集和验证集,用于训练deberta-v3-large模型

检索方法

  1. all-MiniLM-L6-v2 和 tfidf方法 基于 @mbanaei 的分享
  2. bge-small-faiss@simjeg 提供,以及tfidf方法

训练

  1. 使用 Chris Deotte的训练代码 基于(数据集1 - 60k数据集),选择6000-24000样本并设置多个种子生成模型,最终选择最佳模型作为模型1
  2. 基于上述代码,我们通过以下代码添加噪声并重新训练模型1,生成模型2:
    def calu_lenq85(df, col):
        '''
        # calu_lenq85(df_train, "context")  ## 930
        # calu_lenq85(df_valid, "context")  ## 877    
        '''
        ## mask == noise
        a = df[col].str.split(" ").apply(len)
        len_q85 = round(np.quantile(a, q=0.85))
        return len_q85
    
    def mask_string(s, len_q85=930):
        s = s.split(" ")
        s = np.array(s)
        mask = tokenizer.mask_token
        
        ##  mask for some items
        if len(s) > len_q85:
            ## mask ratio
            num_replacements = np.random.uniform(low=0.0, high=0.08)
            num_replacements = round(len(s) * num_replacements)
    
            # mask numbers
            maskidx = np.random.choice(len(s), size=num_replacements, replace=False)
            s[maskidx] = mask
        
        ## strings
        s = " ".join(s.tolist())
        return s
  3. 在数据集2(6.5k数据集)上应用上述训练方法,并通过以下代码修改选项的提示,训练生成模型3和模型4:
    def generate_prompt_option(df):
        cond1 = lambda x: True if 'What is' in x["prompt"] else False
        cond1 = df.apply(cond1, axis=1)
        for col in list("ABCDE"):
            df.loc[cond1, col] = df.loc[cond1, "prompt"].apply(lambda x: x[7:-1]) + ' ' + "is that" + ' ' + df.loc[cond1, col]
        return df

推理

使用4个deberta模型和 longformer模型(由 @yuanji1239 提供)的集成方法来推断在线测试数据集。

感谢 Dr.JI Yuan、所有团队和 Kaggle 😄

同比赛其他方案