项目实训个人周报6

去除过短或者过长训练数据

在机器学习中,去除过短或过长的训练数据通常是为了提高模型的性能和稳定性。以下是具体的原因:

  1. 质量控制

过短的文本:

  • 可能包含太少的信息,无法提供足够的上下文。
  • 可能是噪音或无用的内容,如单个字符或单词。

过长的文本:

  • 可能包含冗余信息或噪音。
  • 处理起来资源消耗较大,增加计算开销。
  1. 计算效率

过长的文本:

  • 需要更多的计算资源和时间。
  • 可能导致内存不足或训练时间过长。
  1. 模型训练稳定性

过短的文本:

  • 可能导致模型过拟合,无法泛化到更长或更复杂的句子。
  • 模型可能学不到有用的特征。

过长的文本:

  • 可能导致模型在训练时遇到梯度消失或爆炸的问题。
  • 增加模型的复杂性,可能需要更复杂的架构来处理。
  1. 数据均衡性

去除过短或过长的文本有助于确保训练数据的长度分布更加均衡,避免模型对特定长度的文本过度拟合。

  1. 一致性和可解释性

保持数据长度在一个合理的范围内,可以提高模型预测结果的一致性和可解释性。

下面是我去除过短或者过长训练数据的代码

import pandas as pd

# 读取CSV文件
data = pd.read_csv('data.csv')

# 过滤数据,保留满足条件的行
filtered_data = data[(data['question'].str.len() >= 5) & (data['question'].str.len() <= 50) &
                     (data['answer'].str.len() >= 50) & (data['answer'].str.len() <= 512)]

# 保存过滤后的数据到新的CSV文件
filtered_data.to_csv('filtered_data.csv', index=False)
  1. 读取CSV文件:使用pd.read_csv()函数读取名为data.csv的文件
  2. 过滤数据
    • 使用Pandas的字符串方法.str.len()来计算每一行中questionanswer列的长度。
    • 使用布尔索引过滤出满足所有条件的行:
      • 问题列的长度至少为5个字符且不超过50个字符。
      • 答案列的长度至少为50个字符且不超过512个字符。
  3. 保存过滤后的数据:使用to_csv()方法将过滤后的数据保存到一个名为filtered_data.csv的新文件中。设置index=False参数来避免写入行索引到文件。

删除相似的问题或者相似的答案

在大模型训练中,删除相似的问题或相似的答案有以下几个主要原因:

  1. 减少数据冗余

相似的问题和答案:

  • 会导致数据集中存在大量重复信息。
  • 增加数据量但不提供新的有价值的信息。

通过删除相似的样本,可以减少数据冗余,使模型更专注于学习多样化和有代表性的信息。

  1. 提高训练效率

减少冗余数据:

  • 可以显著减少训练时间和计算资源的消耗。
  • 使模型训练更高效,因为训练时不需要反复处理相似的信息。
  1. 防止过拟合

相似的问题和答案:

  • 可能导致模型对某些特定模式过拟合。
  • 模型可能会记住这些重复的样本,而不是学会如何处理更多样化的数据。

删除相似的样本有助于提高模型的泛化能力,使其在面对新数据时表现更好。

  1. 增强模型的多样性学习

多样化数据:

  • 使模型能够学习到更广泛的模式和特征。
  • 提高模型在不同情境下的表现能力。

删除相似的样本可以确保模型接触到更多样化的训练数据,从而提高模型的鲁棒性和应对不同情况的能力。

  1. 改善数据集质量

清理数据集:

  • 可以去除那些重复或者几乎相同的问答对,提升数据集的整体质量。
  • 有助于确保数据集中的每个样本都提供有价值的训练信息。

高质量的数据集有助于模型更有效地学习和推理。

下面是我的代码

import pandas as pd
from difflib import SequenceMatcher

def similar(a, b):
    return SequenceMatcher(None, a, b).ratio()

# 读取CSV文件
data = pd.read_csv('data.csv')

# 初始化要删除的索引列表
indices_to_drop = set()

# 检查问题列的相似度
for i in range(len(data) - 1):
    for j in range(i + 1, len(data)):
        # 比较问题列
        if similar(data.loc[i, 'question'], data.loc[j, 'question']) > 0.8:
            indices_to_drop.add(j)  # 添加问题二的索引到删除列表

        # 比较答案列
        if similar(data.loc[i, 'answer'], data.loc[j, 'answer']) > 0.8:
            indices_to_drop.add(j)  # 添加答案二的索引到删除列表

# 删除相似度高的行
data = data.drop(indices_to_drop)

# 保存过滤后的数据到新的CSV文件
data.to_csv('filtered_data.csv', index=False)
  1. 相似度计算函数

    • 使用SequenceMatcher函数比较两个字符串的相似度。这个函数返回一个介于0和1之间的数值,表示两个字符串的相似度百分比。
  2. 读取CSV文件

    • 使用pd.read_csv()读取CSV文件。
  3. 初始化索引列表

    • 使用一个集合indices_to_drop来存储需要删除的行索引。使用集合可以避免重复添加同一索引。
  4. 双重循环比较每行

    • 用双重循环遍历数据框,比较每一对问题和答案。
  • 如果发现问题或答案的相似度超过80%,将较后的行索引添加到indices_to_drop集合中。
  1. 删除指定行

    • 使用DataFrame.drop方法删除所有标记为删除的行。
  2. 保存结果

    • 使用to_csv()方法将处理后的数据保存到新的CSV文件filtered_data.csv中,index=False参数确保不保存行索引。

这段代码将根据问题和答案的相似度过滤出唯一的行,是处理大量文本数据

  • 11
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值