1 前言
由于目前AI比较火,于是我就想通过AI模型训练一个属于自己的自动生成测试用例的模型,目前选用的是T5-base这个模型进行训练测试。
2 环境搭建
(1)安装相关环境
AI模型训练需要相关依赖环境,以Centos 7系统为例,安装相关环境命令如下:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
pip3 install transformers pandas torch
pip3 install tokenizers torch tqdm
(2)下载T5模型
通过如下命令安装T5模型:
cd /home/disk
git clone https://huggingface.co/google-t5/t5-base
如果通过git无法下载的话,可以通过网址下载zip压缩包,解压到相应目录下即可
如果以上内容无法下载,可以去github里面找找有没有相应的t5-base模型
(3)编写脚本
可以利用AI帮你写一个训练模型的python脚本:
#例如用 AI生成的训练模型python脚本:
import torch
from 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")
训练结果如上图所示,这里简单列举一些测试用例,目前生成的语言模型是用英文生成的,中文模型我后面再尝试下
(4)测试训练的模型
利用已经生成的模型,测试输入需求,看是否能够生成测试用例,测试代码如下:
import torch
from transformers import T5Tokenizer, T5ForConditionalGeneration
# 1. 加载训练好的模型和tokenizer
def 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}")
测试输出的测试用例:
通过多次训练,发现测试预定需求的数据,可以很快给出生成的测试用例
如果是非预定需求的数据,测试结果:
发现也是可以自动给出测试用例
说明我们训练的模型还是有效的,可以正常根据需求内容生成测试用例
不过目前的测试数据还比较少,测试用例给的也比较简单,后续会再优化下
(5)模型重复训练
如果训练的模型不理想,可以采用重复迭代训练的方式进行训练,或者采用如下方式进行训练
1. 增加训练数据:如果可能,收集更多的训练数据。这有助于模型更好地学习需求与测试用例之间的关系。
2. 调整训练参数:
- 增加训练轮数:尝试增加训练的epochs,可能需要更多的时间让模型收敛。
- 调整学习率:不同的学习率可能会影响模型的训练效果,尝试降低或增大学习率。
3. 使用预训练模型:可以尝试使用更大的预训练模型(如 T5-large 或 T5-3B),这些模型通常具有更强的学习能力。
4. 修改数据准备过程:
- 确保数据的格式和预处理方法是正确的,避免因数据格式问题导致模型学习效果不佳。
- 检查标签(测试用例)的质量,确保其与需求内容相匹配。
5. 增量训练:如果可以,尝试进行增量训练,即在已有模型的基础上继续训练,而不是从头开始。
6. 使用更复杂的模型结构:如果使用 T5 模型效果不佳,可以尝试其他类型的生成模型,比如 GPT-2 或 BART,这些模型可能更适合某些类型的文本生成任务。
原文始发于微信公众号(技术分享交流):T5-base AI模型训练自动生成测试用例
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论