Spark2 Dataset分析函数--排名函数row_number,rank,dense_rank,percent_rank

select gender,
       age,
       row_number() over(partition by gender order by age) as rowNumber,
       rank() over(partition by gender order by age) as ranks,
       dense_rank() over(partition by gender order by age) as denseRank,
       percent_rank() over(partition by gender order by age) as percentRank
  from Affairs

 

 

val spark = SparkSession.builder().appName("Spark SQL basic example").config("spark.some.config.option", "some-value").getOrCreate()

// For implicit conversions like converting RDDs to DataFrames
import spark.implicits._
	
val dataList: List[(Double, String, Double, Double, String, Double, Double, Double, Double)] = List(
      (0, "male", 37, 10, "no", 3, 18, 7, 4), 
      (0, "female", 27, 4, "no", 4, 14, 6, 4), 
      (0, "female", 32, 15, "yes", 1, 12, 1, 4), 
      (0, "male", 57, 15, "yes", 5, 18, 6, 5), 
      (0, "male", 22, 0.75, "no", 2, 17, 6, 3), 
      (0, "female", 32, 1.5, "no", 2, 17, 5, 5), 
      (0, "female", 22, 0.75, "no", 2, 12, 1, 3), 
      (0, "male", 57, 15, "yes", 2, 14, 4, 4), 
      (0, "female", 32, 15, "yes", 4, 16, 1, 2), 
      (0, "male", 22, 1.5, "no", 4, 14, 4, 5), 
      (0, "male", 37, 15, "yes", 2, 20, 7, 2), 
      (0, "male", 27, 4, "yes", 4, 18, 6, 4), 
      (0, "male", 47, 15, "yes", 5, 17, 6, 4), 
      (0, "female", 22, 1.5, "no", 2, 17, 5, 4), 
      (0, "female", 27, 4, "no", 4, 14, 5, 4), 
      (0, "female", 37, 15, "yes", 1, 17, 5, 5), 
      (0, "female", 37, 15, "yes", 2, 18, 4, 3), 
      (0, "female", 22, 0.75, "no", 3, 16, 5, 4), 
      (0, "female", 22, 1.5, "no", 2, 16, 5, 5), 
      (0, "female", 27, 10, "yes", 2, 14, 1, 5), 
      (0, "female", 22, 1.5, "no", 2, 16, 5, 5), 
      (0, "female", 22, 1.5, "no", 2, 16, 5, 5), 
      (0, "female", 27, 10, "yes", 4, 16, 5, 4), 
      (0, "female", 32, 10, "yes", 3, 14, 1, 5), 
      (0, "male", 37, 4, "yes", 2, 20, 6, 4))

val data = dataList.toDF("affairs", "gender", "age", "yearsmarried", "children", "religiousness", "education", "occupation", "rating")

data.printSchema()

// 创建视图 
data.createOrReplaceTempView("Affairs")

val s1="row_number() over(partition by gender order by age) as rowNumber,"
val s2="rank() over(partition by gender order by age) as ranks,"
val s3="dense_rank() over(partition by gender order by age) as denseRank,"
val s4="percent_rank() over(partition by gender order by age) as percentRank"
val df8=spark.sql("select gender,age,"+s1+s2+s3+s4+" from Affairs")

df8.show(50)
+------+----+---------+-----+---------+------------------+                      
|gender| age|rowNumber|ranks|denseRank|       percentRank|
+------+----+---------+-----+---------+------------------+
|female|22.0|        1|    1|        1|               0.0|
|female|22.0|        2|    1|        1|               0.0|
|female|22.0|        3|    1|        1|               0.0|
|female|22.0|        4|    1|        1|               0.0|
|female|22.0|        5|    1|        1|               0.0|
|female|22.0|        6|    1|        1|               0.0|
|female|27.0|        7|    7|        2|               0.4|
|female|27.0|        8|    7|        2|               0.4|
|female|27.0|        9|    7|        2|               0.4|
|female|27.0|       10|    7|        2|               0.4|
|female|32.0|       11|   11|        3|0.6666666666666666|
|female|32.0|       12|   11|        3|0.6666666666666666|
|female|32.0|       13|   11|        3|0.6666666666666666|
|female|32.0|       14|   11|        3|0.6666666666666666|
|female|37.0|       15|   15|        4|0.9333333333333333|
|female|37.0|       16|   15|        4|0.9333333333333333|
|  male|22.0|        1|    1|        1|               0.0|
|  male|22.0|        2|    1|        1|               0.0|
|  male|27.0|        3|    3|        2|              0.25|
|  male|37.0|        4|    4|        3|             0.375|
|  male|37.0|        5|    4|        3|             0.375|
|  male|37.0|        6|    4|        3|             0.375|
|  male|47.0|        7|    7|        4|              0.75|
|  male|57.0|        8|    8|        5|             0.875|
|  male|57.0|        9|    8|        5|             0.875|
+------+----+---------+-----+---------+------------------+

 

转载于:https://www.cnblogs.com/wwxbi/p/6102675.html

<think>好的,我现在需要帮助用户解决他们在使用llamafactory-cli进行模型微调后遇到的结果重复的问题。首先,我需要仔细分析用户提供的命令参数,看看是否有参数设置不当的地方。 首先,用户使用的训练阶段是sft,也就是监督式微调。模型路径是DeepSeek-R1-Distill-Qwen-1.5B,这可能是一个预训练模型。finetuning_type是lora,说明他们用的是LoRA方法,这种方法的优势在于参数高效,但有时候可能因为秩不够导致效果不佳。这里设置的lora_rank是8,alpha是16,dropout为0,目标层是all。可能的问题点在于rank的大小,如果任务复杂,8的秩可能不足以捕捉足够的特征变化,导致模型生成重复内容。 接下来看数据集部分,dataset_dir是data,数据集名称是golden_db_train_zh,max_samples设为100000,但不确定实际数据量是否足够。如果数据量不足或者多样性不够,模型容易过拟合,生成重复内容。另外,训练时开启了train_on_prompt,这意味着模型在训练时可能会过于关注prompt部分,而忽略了后续生成的内容,导致生成重复。 学习率是2e-5,epochs是30,可能训练时间过长,导致过拟合。虽然用了cosine学习率调度,但30个epoch对于某些数据集可能太多。需要检查验证集的损失,看是否在后期出现上升,如果是的话,可能需要早停。 批次相关的参数,per_device_train_batch_size是2,gradient_accumulation_steps是8,实际的总批次大小是16。这个设置是否合理?如果总批次太小,可能影响训练稳定性,但用户的问题更可能和模型结构或数据有关。 其他参数如bf16、flash_attn、use_unsloth都是为了加速训练,可能不影响生成结果。packing设为False,train_on_prompt为True,这可能导致模型在生成时过度依赖prompt,而缺乏多样性。 另外,用户可能在微调后加载了之前的adapter路径,这可能导致参数没有正确更新,或者新旧参数冲突。需要确认是否在重新训练时清除了之前的适配器,或者是否正确加载。 还有,生成策略的问题,比如在推理时是否设置了do_sample=True,temperature或top_p等参数,如果这些参数设置过于保守,比如temperature太低,会导致生成结果确定性过高,从而重复。但用户的问题是在训练后的结果重复,可能更多是训练过程中的问题。 可能的解决方案包括:调整LoRA的rank和alpha,增加dropout,减少训练epoch,使用早停,检查数据质量和多样性,关闭train_on_prompt,调整生成参数等。需要逐步排查这些可能性,建议用户检查这些方面,并进行实验验证。</think>这个训练配置在使用LoRA微调后出现输出重复的情况,可以从以下几个技术角度进行分析和改进建议: $\boxed{1.\ LoRA参数配置}$ - $\text{lora\_rank=8}$ 可能过低,建议逐步提升至32或64(需配合$\alpha$调整) - $\text{lora\_alpha=16}$ 可尝试调整为$\alpha=2*\text{rank}$(如rank=32则$\alpha=64$) - $\text{lora\_dropout=0}$ 建议设置为0.1-0.3增加正则化 - $\text{lora\_target="all"}$ 可尝试指定关键层:$\text{q_proj,v_proj}$ $\boxed{2.\ 训练策略优化}$ - $\text{train\_on\_prompt=True}$ 会导致模型过度拟合prompt模式,建议设为False - $\text{learning\_rate=2e-5}$ 可尝试提高到3e-5~5e-5范围 - $\text{max\_grad\_norm=0.5}$ 可适当放宽到1.0-2.0 - $\text{num\_train\_epochs=30}$ 可能过拟合,建议通过$\text{max\_steps=5000}$控制 $\boxed{3.\ 数据与模型配置}$ - $\text{cutoff\_len=4096}$ 建议根据实际样本长度调整(可缩减到2048) - $\text{resize\_vocab=True}$ 需要确认tokenizer是否需要扩展 - $\text{dataset}$ 应检查数据多样性,重复数据需去重 $\boxed{4.\ 解码策略补充}$ 训练完成后生成时建议添加解码参数: ```bash --temperature 0.7 \ --top_p 0.9 \ --repetition_penalty 1.2 \ --do_sample True ``` $\boxed{5.\ 验证建议}$ 可进行以下对比实验: 1. 保持当前配置,将$\text{lora\_rank}$提升至32,$\alpha=64$ 2. 设置$\text{train\_on\_prompt=False}$ + $\text{num\_train\_epochs=10}$ 3. 添加$\text{--report_to "none"}$ 避免监控系统干扰 建议优先尝试调整LoRA参数与训练轮数,如果问题仍未解决,可提供部分训练日志和生成样例进一步分析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值