T5-base AI模型训练自动生成测试用例

admin 2024年9月29日21:43:58评论20 views字数 3202阅读10分40秒阅读模式

1 前言

由于目前AI比较火,于是我就想通过AI模型训练一个属于自己的自动生成测试用例的模型,目前选用的是T5-base这个模型进行训练测试。

2 环境搭建

(1)安装相关环境

AI模型训练需要相关依赖环境,以Centos 7系统为例,安装相关环境命令如下:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsource $HOME/.cargo/envpip3 install transformers pandas torchpip3 install tokenizers torch tqdm

(2)下载T5模型

通过如下命令安装T5模型:

cd /home/diskgit clone https://huggingface.co/google-t5/t5-base

如果通过git无法下载的话,可以通过网址下载zip压缩包,解压到相应目录下即可

T5-base AI模型训练自动生成测试用例

如果以上内容无法下载,可以去github里面找找有没有相应的t5-base模型

(3)编写脚本    

可以利用AI帮你写一个训练模型的python脚本:

#例如用 AI生成的训练模型python脚本:import torchfrom transformers import T5Tokenizer, T5ForConditionalGeneration, Trainer, TrainingArguments# 加载 T5-base 模型和分词器model_name = "t5-base"tokenizer = T5Tokenizer.from_pretrained(model_name)model = T5ForConditionalGeneration.from_pretrained(model_name)# 准备训练数据train_data = [    "input_text_1",    "input_text_2",    # 添加更多训练数据,这里的内容自己添加,添加需求的内容]train_labels = [    "output_text_1",    "output_text_2",    # 添加更多对应的输出文本,添加生成测试用例的数据]# 对训练数据进行编码def encode(examples):    return tokenizer(examples, padding="max_length", truncation=True, return_tensors="pt")encoded_train_data = encode(train_data)encoded_train_labels = encode(train_labels)# 定义训练参数training_args = TrainingArguments(    output_dir="./results",    num_train_epochs=3,    per_device_train_batch_size=8,    save_steps=10_000,    save_total_limit=2,)# 定义训练器trainer = Trainer(    model=model,    args=training_args,    train_dataset=torch.utils.data.TensorDataset(encoded_train_data["input_ids"], encoded_train_labels["input_ids"]),)# 开始训练trainer.train()# 保存训练后的模型trainer.save_model("./trained_model")  

T5-base AI模型训练自动生成测试用例

训练结果如上图所示,这里简单列举一些测试用例,目前生成的语言模型是用英文生成的,中文模型我后面再尝试下

(4)测试训练的模型

利用已经生成的模型,测试输入需求,看是否能够生成测试用例,测试代码如下:

import torchfrom transformers import T5Tokenizer, T5ForConditionalGeneration# 1. 加载训练好的模型和tokenizerdef load_model(model_path):    tokenizer = T5Tokenizer.from_pretrained(model_path)    model = T5ForConditionalGeneration.from_pretrained(model_path)    return tokenizer, model# 2. 生成测试用例def generate_test_case(model, tokenizer, requirement, max_length=150):    model.eval()  # 设置为评估模式    input_text = f"Generate a test case for the requirement: {requirement}"    input_ids = tokenizer(input_text, return_tensors="pt").input_ids    # 使用束搜索生成    outputs = model.generate(input_ids, max_length=max_length, num_beams=5, early_stopping=True)    generated_case = tokenizer.decode(outputs[0], skip_special_tokens=True)    return generated_case# 3. 主程序    if __name__ == "__main__":    # 加载训练好的模型    model_path = './my_trained_model_2'  # 替换为模型保存路径    tokenizer, model = load_model(model_path)    # 输入需求    requirement = "User should be able to register a new account using an email address."    # 生成测试用例    generated_test_case = generate_test_case(model, tokenizer, requirement)    # 输出生成的测试用例    print(f"需求: {requirement}n生成的测试用例: {generated_test_case}")

测试输出的测试用例:

T5-base AI模型训练自动生成测试用例

通过多次训练,发现测试预定需求的数据,可以很快给出生成的测试用例

如果是非预定需求的数据,测试结果:

T5-base AI模型训练自动生成测试用例

发现也是可以自动给出测试用例

说明我们训练的模型还是有效的,可以正常根据需求内容生成测试用例

不过目前的测试数据还比较少,测试用例给的也比较简单,后续会再优化下

(5)模型重复训练

如果训练的模型不理想,可以采用重复迭代训练的方式进行训练,或者采用如下方式进行训练

1. 增加训练数据:如果可能,收集更多的训练数据。这有助于模型更好地学习需求与测试用例之间的关系。2. 调整训练参数:   - 增加训练轮数:尝试增加训练的epochs,可能需要更多的时间让模型收敛。   - 调整学习率:不同的学习率可能会影响模型的训练效果,尝试降低或增大学习率。3. 使用预训练模型:可以尝试使用更大的预训练模型(如 T5-large 或 T5-3B),这些模型通常具有更强的学习能力。4. 修改数据准备过程:   - 确保数据的格式和预处理方法是正确的,避免因数据格式问题导致模型学习效果不佳。   - 检查标签(测试用例)的质量,确保其与需求内容相匹配。5. 增量训练:如果可以,尝试进行增量训练,即在已有模型的基础上继续训练,而不是从头开始。    6. 使用更复杂的模型结构:如果使用 T5 模型效果不佳,可以尝试其他类型的生成模型,比如 GPT-2 或 BART,这些模型可能更适合某些类型的文本生成任务。
欢迎关注「技术分享交流」公众号 ,如果有建议或者疑问的话,欢迎大家评论留言,如果喜欢公众号文章的话可以点【在看】,您的鼓励就是我的动力哈!!!

原文始发于微信公众号(技术分享交流):T5-base AI模型训练自动生成测试用例

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月29日21:43:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   T5-base AI模型训练自动生成测试用例https://cn-sec.com/archives/3219166.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息