开启想象翅膀:轻松实现文本生成模型的创作应用,支持LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,开箱即用
开启想象翅膀:轻松实现文本生成模型的创作应用,支持LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,开箱即用
TextGen: Implementation of Text Generation models
1.介绍
TextGen实现了多种文本生成模型,包括:LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,开箱即用。
1.1 最新更新
[2023/06/15] v1.0.0版本: 新增ChatGLM/LLaMA/Bloom模型的多轮对话微调训练,并发布医疗问诊LoRA模型shibing624/ziya-llama-13b-medical-lora。详见Release-v1.0.0
[2023/06/02] v0.2.7版本: 新增ChatGLM/LLaMA/Bloom模型的SFT微调训练,并发布适用于通用对话和中文纠错的LoRA模型。详见Release-v0.2.7
1.2 相关介绍
- ChatGLM:本项目基于PyTorch实现了ChatGLM-6B模型LoRA微调训练和预测,可以用于句子纠错、对话等文本生成任务
- LLaMA:本项目基于PyTorch实现了LLaMA模型LoRA微调训练和预测,可以用于对话生成任务和领域微调训练
- BLOOM:本项目基于PyTorch实现了BLOOM模型LoRA微调训练和预测,可以用于对话生成任务和领域微调训练
- UDA/EDA:本项目实现了UDA(非核心词替换)、EDA和Back Translation(回译)算法,基于TF-IDF将句子中部分不重要词替换为同义词,随机词插入、删除、替换等方法,产生新的文本,实现了文本扩增
- Seq2Seq:本项目基于PyTorch实现了Seq2Seq、ConvSeq2Seq、BART模型的训练和预测,可以用于文本翻译、对话生成、摘要生成等文本生成任务
- T5:本项目基于PyTorch实现了T5和CopyT5模型训练和预测,可以用于文本翻译、对话生成、对联生成、文案撰写等文本生成任务
- GPT2:本项目基于PyTorch实现了GTP2模型训练和预测,可以用于文章生成、对联生成等文本生成任务
- SongNet:本项目基于PyTorch实现了SongNet模型训练和预测,可以用于规范格式的诗词、歌词等文本生成任务
- TGLS:本项目实现了TGLS无监督相似文本生成模型,是一种“先搜索后学习”的文本生成方法,通过反复迭代学习候选集,最终模型能生成类似候选集的高质量相似文本
1.2.1 支持模型
release基于textgen
训练的中文模型,模型已经release到HuggingFace models,指定模型名称textgen
会自动下载模型,可直接使用。
Model | Arch | Introduction | Train Script | Predict Script |
---|---|---|---|---|
shibing624/t5-chinese-couplet | T5 | fine-tuned中文对联后的模型 | 对联生成模型调研 | predict script |
shibing624/songnet-base-chinese-songci | SongNet | fine-tuned宋词后的模型 | training script | predict script |
shibing624/songnet-base-chinese-couplet | SongNet | fine-tuned对联后的模型 | training script | predict script |
shibing624/chatglm-6b-csc-zh-lora | ChatGLM-6B | 在27万中文拼写纠错数据shibing624/CSC上微调了一版ChatGLM-6B,纠错效果有提升,发布微调后的LoRA权重 | training script | predict script |
shibing624/chatglm-6b-belle-zh-lora | ChatGLM-6B | 在100万条中文ChatGPT指令Belle数据集BelleGroup/train_1M_CN上微调了一版ChatGLM-6B,问答效果有提升,发布微调后的LoRA权重 | training script | predict script |
shibing624/llama-13b-belle-zh-lora | LLaMA-13B | 在100万条中文ChatGPT指令Belle数据集BelleGroup/train_1M_CN上微调了一版Llama-13B,问答效果有提升,发布微调后的LoRA权重 | training script | predict script |
shibing624/chinese-alpaca-plus-7b-hf | LLaMA-7B | 中文LLaMA-Plus, Alpaca-Plus 7B版本,在LLaMA-7B上扩充了中文词表并继续预训练120G文本(通用领域),在4M指令数据集上微调后得到的中文Alpaca-plus模型 | training script | predict script |
shibing624/chinese-alpaca-plus-13b-hf | LLaMA-13B | 中文LLaMA-Plus, Alpaca-Plus 13B版本,在LLaMA-13B上扩充了中文词表并继续预训练120G文本(通用领域),在4.3M指令数据集上微调后得到的中文Alpaca-plus模型 | training script | predict script |
shibing624/ziya-llama-13b-medical-lora | LLaMA-13B | 在240万条中英文医疗数据集shibing624/medical上微调了一版Ziya-LLaMA-13B模型,医疗问答效果有提升,发布微调后的LoRA权重 | training script | predict script |
1.2.2 模型评价得分
Model | Arch | Introduction | Score |
---|---|---|---|
LLaMA-7B-Chinese-Alpaca | LLaMA-7B | 复用ymcui/Chinese-LLaMA-Alpaca的评估case和得分 | 4.92 |
LLaMA-13B-Chinese-Alpaca | LLaMA-13B | 复用ymcui/Chinese-LLaMA-Alpaca的评估case和得分 | 7.05 |
ChatGLM-6B | ChatGLM-6B | 基于原生THUDM/chatglm-6b 评估测试集得分 | 7.16 |
ChatGLM-6B-v1.1 | ChatGLM-6B | 基于原生THUDM/chatglm-6b v1.1英文优化版模型评估测试集得分 | 7.18 |
shibing624/chatglm-6b-belle-zh-lora | ChatGLM-6B | 基于THUDM/chatglm-6b 加载shibing624/chatglm-6b-belle-zh-lora LoRA模型后评估测试集得分 | 7.03 |
facat/alpaca-lora-cn-13b | LLaMA-13B | 基于decapoda-research/llama-13b-hf 加载facat/alpaca-lora-cn-13b LoRA模型后评估测试集并标注得分 | 4.13 |
Chinese-Vicuna/Chinese-Vicuna-lora-13b-belle-and-guanaco | LLaMA-13B | 基于decapoda-research/llama-13b-hf 加载Chinese-Vicuna/Chinese-Vicuna-lora-13b-belle-and-guanaco LoRA模型后评估测试集并标注得分 | 3.98 |
shibing624/chinese-alpaca-plus-7b-hf | LLaMA-7B | 使用ymcui/Chinese-LLaMA-Alpaca 合并模型方法合并HF权重后,评估测试集并标注得分 | 6.93 |
shibing624/chinese-alpaca-plus-13b-hf | LLaMA-13B | 使用ymcui/Chinese-LLaMA-Alpaca 合并模型方法合并HF权重后,评估测试集并标注得分 | 7.07 |
TheBloke/vicuna-13B-1.1-HF | LLaMA-13B | 使用原生vicuna-13B-1.1合并后的模型,评估测试集并标注得分 | 5.13 |
IDEA-CCNL/Ziya-LLaMA-13B-v1 | LLaMA-13B | 使用姜子牙通用大模型V1,评估测试集并标注得分 | 6.63 |
说明:
- 评估case,详见在线文档:中文LLM-benchmark多任务评估集(腾讯文档) https://docs.qq.com/sheet/DUUpsREtWbFBsUVJE?tab=r7io7g 感谢韩俊明、杨家铭等同学的标注
- 评估任务类型包括:知识问答,开放式问答,数值计算,诗词、音乐、体育,娱乐,写文章,文本翻译,代码编程,伦理、拒答类,多轮问答,Score 评分是前100条(10分制)的平均分数,人工打分,越高越好
- 评估数量少,任务类型不够全面,评分之间的大小关系有一些参考价值,分数的绝对值没太大参考价值
- 评估脚本:tests/test_benchmark.py ,使用fp16预测,无int量化处理,运行脚本可复现评估结果,但生成结果具有随机性,受解码超参、随机种子等因素影响。评测并非绝对严谨,测试结果仅供晾晒参考
- 结论:ChatGLM-6B、LLaMA-13B的中文衍生模型(包括alpaca-plus, vicuna, ziya)的表现属于第一梯队,原版LLaMA-7B的表现整体稍差些
- LLaMA-13B-Chinese-Alpaca是在原版LLaMA上扩充了中文词表,并融入了约20G的通用中文语料后的指令微调模型,表明了LLaMA的底座优秀,具有强大的语言迁移能力
- ChatGLM这种原生的中文预训练模型更理解中文语义,且在中文知识问答、开放式问答得分高
- LLaMA系列模型数值计算、中英翻译、代码编程类得分高
- 经过中文预训练和SFT微调后的Chinese-LLaMA模型在中文诗词、娱乐、伦理类得分相较原版LLaMA有提升
2.demo展示
HuggingFace Demo: https://huggingface.co/spaces/shibing624/chinese-couplet-generate
run example: examples/gradio_demo.py to see the demo:
python examples/gradio_demo.py
model trained by examples/t5/T5_Finetune_Chinese_Couplet.ipynb
2.1 安装
pip install -U textgen
or
install develop version:
pip install torch # conda install pytorch
git clone https://github.com/shibing624/textgen.git
cd textgen
python setup.py install
2.2 ChatGLM-6B 模型
2.2.1 使用 ChatGLM-6B 微调后的模型
example: examples/chatglm/inference_demo.py
from textgen import ChatGlmModelmodel = ChatGlmModel("chatglm", "THUDM/chatglm-6b", peft_name="shibing624/chatglm-6b-csc-zh-lora")
r = model.predict(["对下面中文拼写纠错:\n少先队员因该为老人让坐。\n答:"])
print(r) # ['少先队员应该为老人让座。\n错误字:因,坐']
PS:由于使用了开发中的peft库,可能由于版本更新,导致LoRA模型加载失败,建议使用下面的训练方法,自己训练LoRA模型。
2.2.2 训练 ChatGLM-6B 微调模型
- 支持自定义训练数据集和训练参数,数据集格式参考examples/data/zh_csc_test.tsv或者examples/data/json_files/belle_10.json
- 支持AdaLoRA、LoRA、P_Tuning、Prefix_Tuning等部分参数微调方法,也支持全参微调
- 支持多卡训练,支持混合精度训练
example: examples/chatglm/training_chatglm_demo.py
单卡训练:
cd examples/chatglm
CUDA_VISIBLE_DEVICES=0 python training_chatglm_demo.py --do_train --do_predict --num_epochs 1 --output_dir outputs_chatglm
多卡训练:
cd examples/chatglm
CUDA_VISIBLE_DEVICES=0,1 torchrun --nproc_per_node 2 training_chatglm_demo.py --do_train --do_predict --num_epochs 20
2.2.3 基于微调(LoRA)模型继续训练
如果需要基于Lora模型继续训练,可以使用下面的脚本合并模型为新的base model,再微调训练即可。
执行以下命令:
python -m textgen/chatglm/merge_peft_adapter.py \--base_model_name_or_path path_to_original_base_model_dir \--peft_model_path path_to_peft_model_dir \--output_dir path_to_output_dir
参数说明:
--base_model_name_or_path:存放HF格式的底座模型权重和配置文件的目录
--peft_model_path:存放PEFT格式的微调模型权重和配置文件的目录
--output_dir:指定保存全量模型权重的目录,默认为./merged
2.3 LLaMA 模型
2.3.1 使用 LLaMA 微调后的模型
example: examples/gpt/inference_demo.py
show code example and resultimport syssys.path.append('../..')
from textgen import GptModeldef generate_prompt(instruction):return f"""Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instruction:{instruction}\n\n### Response:"""model = GptModel("llama", "decapoda-research/llama-7b-hf", peft_name="ziqingyang/chinese-alpaca-lora-7b")
predict_sentence = generate_prompt("问:用一句话描述地球为什么是独一无二的。\n答:")
r = model.predict([predict_sentence])
print(r) # ['地球是唯一一颗拥有生命的行星。']
2.3.2训练 LLaMA 微调模型
- 支持自定义训练数据集和训练参数,数据集格式参考examples/data/zh_csc_test.tsv或者shibing624/alpaca-zh
- 支持AdaLoRA、LoRA、P_Tuning、Prefix_Tuning等部分参数微调方法,也支持全参微调
- 支持多卡训练,支持混合精度训练,使用方法同上(ChatGLM多卡训练)
example: examples/llama/training_llama_demo.py
2.3.3 基于微调(LoRA)模型继续训练
如果需要基于Lora模型继续训练,可以使用下面的脚本合并模型为新的base model,再微调训练即可。
单LoRA权重合并(适用于 Chinese-LLaMA, Chinese-LLaMA-Plus, Chinese-Alpaca)
执行以下命令:
python -m textgen/gpt/merge_peft_adapter.py \--base_model_name_or_path path_to_original_base_model_dir \--peft_model_path path_to_chinese_llama_or_alpaca_lora \--output_type [pth|huggingface]--output_dir path_to_output_dir
参数说明:
--base_model_name_or_path:存放HF格式的底座模型权重和配置文件的目录
--peft_model_path:中文LLaMA/Alpaca LoRA解压后文件所在目录,也可使用HF上的Lora模型名称,如`ziqingyang/chinese-alpaca-lora-7b`会自动下载对应模型
--output_type: 指定输出格式,可为pth或huggingface。若不指定,默认为huggingface
--output_dir:指定保存全量模型权重的目录,默认为./merged
--offload_dir(可选):对于低内存用户需要指定一个offload缓存路径
2.3.4 训练领域模型
Note: 为了全面的介绍训练医疗大模型的过程,把4阶段训练方法(Pretraining, Supervised Finetuning, Reward Modeling and Reinforcement Learning)单独新建了一个repo:shibing624/MedicalGPT,请移步该repo查看训练方法。
2.4 BLOOM 模型
2.4.1训练 BLOOM 微调模型
example: examples/bloom/training_bloom_demo.py
2.5 ConvSeq2Seq 模型
训练并预测ConvSeq2Seq模型:
example: examples/seq2sesq/training_convseq2seq_model_demo.py
show code example and resultimport argparse
from loguru import logger
import syssys.path.append('../..')
from textgen.seq2seq.conv_seq2seq_model import ConvSeq2SeqModeldef main():parser = argparse.ArgumentParser()parser.add_argument('--train_file', default='../data/zh_dialog.tsv', type=str, help='Training data file')parser.add_argument('--do_train', action='store_true', help='Whether to run training.')parser.add_argument('--do_predict', action='store_true', help='Whether to run predict.')parser.add_argument('--output_dir', default='./outputs/convseq2seq_zh/', type=str, help='Model output directory')parser.add_argument('--max_seq_length', default=50, type=int, help='Max sequence length')parser.add_argument('--num_epochs', default=200, type=int, help='Number of training epochs')parser.add_argument('--batch_size', default=32, type=int, help='Batch size')args = parser.parse_args()logger.info(args)if args.do_train:logger.info('Loading data...')model = ConvSeq2SeqModel(epochs=args.num_epochs, batch_size=args.batch_size,model_dir=args.output_dir, max_length=args.max_seq_length)model.train_model(args.train_file)print(model.eval_model(args.train_file))if args.do_predict:model = ConvSeq2SeqModel(epochs=args.num_epochs, batch_size=args.batch_size,model_dir=args.output_dir, max_length=args.max_seq_length)sentences = ["什么是ai", "你是什么类型的计算机", "你知道热力学吗"]print("inputs:", sentences)print('outputs:', model.predict(sentences))if __name__ == '__main__':main()
output:
inputs: ["什么是ai", "你是什么类型的计算机", "你知道热力学吗"]
outputs: ['人工智能是工程和科学的分支,致力于构建思维的机器。', '我的程序运行在python,所以我在任何运脑上工作!', '我不能错热是一个疯狂的人工智能"200年。']
2.6 BART 模型
训练并预测BART模型:
example: examples/seq2sesq/training_bartseq2seq_zh_demo.py
output:
inputs: ['什么是ai', '你是什么类型的计算机', '你知道热力学吗']
outputs: ['人工智能是工程和科学的分支,致力于构', '我的程序运行在python,所以我在任何电脑上', '什么是热力学吗?']
2.7 T5 模型
example: examples/t5/training_zh_t5_model_demo.py
show code example and resultimport argparse
from loguru import logger
import pandas as pd
import syssys.path.append('../..')
from textgen.t5 import T5Modeldef load_data(file_path):data = []with open(file_path, 'r', encoding='utf-8') as f:for line in f:line = line.strip('\n')terms = line.split('\t')if len(terms) == 2:data.append(['QA', terms[0], terms[1]])else:logger.warning(f'line error: {line}')return datadef main():parser = argparse.ArgumentParser()parser.add_argument('--train_file', default='../data/zh_dialog.tsv', type=str, help='Training data file')parser.add_argument('--model_type', default='t5', type=str, help='Transformers model type')parser.add_argument('--model_name', default='Langboat/mengzi-t5-base', type=str, help='Transformers model or path')parser.add_argument('--do_train', action='store_true', help='Whether to run training.')parser.add_argument('--do_predict', action='store_true', help='Whether to run predict.')parser.add_argument('--output_dir', default='./outputs/mengzi_t5_zh/', type=str, help='Model output directory')parser.add_argument('--max_seq_length', default=50, type=int, help='Max sequence length')parser.add_argument('--num_epochs', default=10, type=int, help='Number of training epochs')parser.add_argument('--batch_size', default=32, type=int, help='Batch size')args = parser.parse_args()logger.info(args)if args.do_train:logger.info('Loading data...')# train_data: Pandas DataFrame containing the 3 columns - `prefix`, `input_text`, `target_text`.# - `prefix`: A string indicating the task to perform. (E.g. `"question"`, `"stsb"`)# - `input_text`: The input text. `prefix` is prepended to form the full input. (<prefix>: <input_text>)# - `target_text`: The target sequencetrain_data = load_data(args.train_file)logger.debug('train_data: {}'.format(train_data[:10]))train_df = pd.DataFrame(train_data, columns=["prefix", "input_text", "target_text"])eval_data = load_data(args.train_file)[:10]eval_df = pd.DataFrame(eval_data, columns=["prefix", "input_text", "target_text"])model_args = {"reprocess_input_data": True,"overwrite_output_dir": True,"max_seq_length": args.max_seq_length,"train_batch_size": args.batch_size,"num_train_epochs": args.num_epochs,"save_eval_checkpoints": False,"save_model_every_epoch": False,"evaluate_generated_text": True,"evaluate_during_training": True,"evaluate_during_training_verbose": True,"use_multiprocessing": True,"save_best_model": True,"output_dir": args.output_dir,"use_early_stopping": True,}# model_type: t5 model_name: Langboat/mengzi-t5-basemodel = T5Model(args.model_type, args.model_name, args=model_args)def count_matches(labels, preds):logger.debug(f"labels: {labels[:10]}")logger.debug(f"preds: {preds[:10]}")match = sum([1 if label == pred else 0 for label, pred in zip(labels, preds)])logger.debug(f"match: {match}")return matchmodel.train_model(train_df, eval_data=eval_df, matches=count_matches)print(model.eval_model(eval_df, matches=count_matches))if args.do_predict:model = T5Model(args.model_type, args.output_dir)sentences = ["什么是ai", "你是什么类型的计算机", "你知道热力学吗"]print("inputs:", sentences)print("outputs:", model.predict(sentences))if __name__ == '__main__':main()
output:
inputs: ['什么是ai', '你是什么类型的计算机', '你知道热力学吗']
outputs: ['人工智能有两个广义的定义,任何拟人的机械,如在卡雷尔capeks', '我的程序运行在Python,所以我在任何电脑上工作!', '什么是热力学']
2.8 GPT2 模型
2.8.1 中文GPT2 - 文章生成
使用中文数据集(段落格式,\n
间隔),训练GPT2模型,可以用于诗歌生成、文章生成等任务。
example: examples/gpt2/training_zh_gpt2_demo.py
2.8.2 中文GPT2 - 对联生成
使用中文对联数据集(tsv格式,\t
间隔),自定义数据集读取Dataset,训练GPT2模型,可以用于对联生成、对话生成等任务。
example: examples/gpt2/training_couplet_gpt2_demo.py
GPT2 vs T5:
- 都是从Transformer改进来的,T5同时有编码器和解码器,GPT2只有解码器
- T5的模型优势是处理给定输入,产出对应输出的任务,如翻译、对话、问答等
- GPT2的模型优势是自由创作,如写一篇短文
- T5的对联生成效果好于GPT2、GPT2的诗词生成效果好于T5
- 对联生成模型调研
- 古诗生成模型调研
2.9 SongNet 模型
格式控制的文本生成模型,paper见SongNet: Rigid Formats Controlled Text Generation,
适用于强韵律格式要求的诗歌、对联、歌词生成等任务。
example: examples/songnet/training_zh_songnet_demo.py
2.10 Keyword Text Augmentation(EDA/UDA)
example: examples/text_augmentation/text_augmentation_demo.py
show code example and resultimport syssys.path.append('..')
from textgen.augment import TextAugmentif __name__ == '__main__':docs = ['主要研究机器学习、深度学习、计算机视觉、智能对话系统相关内容','晚上肚子好难受','你会武功吗,我不会','组装标题质量受限于广告主自提物料的片段质量,且表达丰富度有限',]m = TextAugment(sentence_list=docs)a = docs[0]print(a)b = m.augment(a, aug_ops='random-0.2')print('random-0.2:', b)b = m.augment(a, aug_ops='insert-0.2')print('insert-0.2:', b)b = m.augment(a, aug_ops='delete-0.2')print('delete-0.2:', b)b = m.augment(a, aug_ops='tfidf-0.2')print('tfidf-0.2:', b)b = m.augment(a, aug_ops='mix-0.2')print('mix-0.2:', b)
output:
主要研究机器学习、深度学习、计算机视觉、智能对话系统相关内容
random-0.2: ('主要陪陪机器学习、深度学习主要计算机视觉、智能对话系统受限于内容', [('研究', '陪陪', 2, 4), ('、', '主要', 13, 15), ('相关', '受限于', 27, 30)])
insert-0.2: ('主要研究机器机器学习学习、深度深度学习、计算机视觉、智能对话系统相关内容', [('机器', '机器机器', 4, 8), ('学习', '学习学习', 8, 12), ('深度', '深度深度', 13, 17)])
delete-0.2: ('主要研究机器学习、深度学习、计算机视觉、对话系统相关内容', [('智能', '', 20, 20)])
tfidf-0.2: ('一是研究机器学习、深度学习、计算机听觉、智能交谈系统密切相关内容', [('主要', '一是', 0, 2), ('视觉', '听觉', 17, 19), ('对话', '交谈', 22, 24), ('相关', '密切相关', 26, 30)])
mix-0.2: ('主要研究机器学习、深度学、计算机听觉、智能对话软件系统相关内容', [('学习', '学', 11, 12), ('视觉', '听觉', 16, 18), ('系统', '软件系统', 23, 27)])
2.11 TGLS 模型(无监督相似文本生成模型)
无监督的中文电商评论生成:从电商评论中提取用户表达观点的短句并进行组合来生成仿真评论。
example: examples/unsup_generation/unsup_generation_demo.py
show code example and resultimport os
import syssys.path.append('..')
from textgen.unsup_generation import TglsModel, load_listpwd_path = os.path.abspath(os.path.dirname(__file__))samples = load_list(os.path.join(pwd_path, './data/ecommerce_comments.txt'))
docs_text = [["挺好的,速度很快,也很实惠,不知效果如何","产品没得说,买了以后就降价,心情不美丽。","刚收到,包装很完整,不错","发货速度很快,物流也不错,同一时间买的两个东东,一个先到一个还在路上。这个水水很喜欢,不过盖子真的开了。盖不牢了现在。","包装的很好,是正品","被种草兰蔻粉水三百元一大瓶囤货,希望是正品好用,收到的时候用保鲜膜包裹得严严实实,只敢买考拉自营的护肤品",],['很温和,清洗的也很干净,不油腻,很不错,会考虑回购,第一次考拉买护肤品,满意','这款卸妆油我会无限回购的。即使我是油痘皮,也不会闷痘,同时在脸部按摩时,还能解决白头的脂肪粒的问题。用清水洗完脸后,非常的清爽。','自从用了fancl之后就不用其他卸妆了,卸的舒服又干净','买贵了,大润发才卖79。9。',],samples
]
m = TglsModel(docs_text)
r = m.generate(samples[:500])
print('size:', len(r))
for review in r:print('\t' + review)
output:
美迪惠尔 N.M.F针剂水库保湿面膜有如下的20句评论,其中有10句是真实用户评论,10句是生成的评论,能看出来么?😂
还不错还不错还不错还不错。
东西到了,不知道好不好用。试用过后再来评价。到时看网评都还可以。
哺乳期唯一使用的护肤品,每天都是素颜,脸面全靠面膜吊着😄补水💦不粘腻一如既往的支持,喜欢💕
搞活动时买的面膜,不知道这个面膜是真是假敷在脸上面膜纸都有小水泡鼓起来。
很不错,非常补水,用过的都知道,性价比之王,好用又不贵,正品,用着放心,物流也很快。
面膜非常好用哦。面膜薄薄的。好像是蚕丝面膜啊。精华很多呢。敷在脸上很舒服。感觉挺保湿的,味道也挺好闻的。就是里面只有单纯的面膜直接敷脸上有点不好弄,哈哈哈
还可以保湿效果不错水润润的每天贴一片脸也不干了用完了在买点,不错还会继续回购的。
快递很快,东西很赞!想要得点考拉豆不容易,还要三十个字。时间宝贵,废话不说!用过了就知道了
挺好用的,朋友推荐来的
挺好用的,淡淡的,虽然不是很浓精华的感觉,但是效果也蛮好的。划算
不得不说美迪惠尔的面膜是我用过的最好的面膜之一😎补水效果非常好,没想到这么便宜的价格竟真的能买到真品。
保湿效果挺好的,面膜很好用。
期待好的产品。
一打开包装里面的精华刚刚好,用了补水补水效果不错,物流非常快。
皮肤很光滑😇比上去速度快三天就到了。
前两天皮肤干燥连续敷了两个晚上感觉还不错😂补水效果明显!可想而知精华液又多充足😍敷上以后凉凉的很舒服。
补水效果一般吧~但是我用的韩国背回来的面膜纸不算薄,希望好用会回购的,敷上脸感觉比较清爽~价格还不便宜。
希望好用,面膜用过了很好用,皮肤水嫩光滑白皙,补水不错,价格也合适。
就是精华液太少了,保湿效果不错。
面膜的补水效果非常好,保湿效果确实很赞,这个面膜相对于胶原蛋白和美白的那两款的面膜纸要厚一些,看着价格合适。
前10句是真实用户评论,后10句是生成的。
3.数据集 Dataset
3.1 SFT datasets
- 50万条中文ChatGPT指令Belle数据集:BelleGroup/train_0.5M_CN
- 100万条中文ChatGPT指令Belle数据集:BelleGroup/train_1M_CN
- 5万条英文ChatGPT指令Alpaca数据集:50k English Stanford Alpaca dataset
- 2万条中文ChatGPT指令Alpaca数据集:shibing624/alpaca-zh
- 69万条中文指令Guanaco数据集(Belle50万条+Guanaco19万条):Chinese-Vicuna/guanaco_belle_merge_v1.0
- 240万条中文医疗数据集(包括预训练数据和指令微调数据集):shibing624/medical
- 5万条英文ChatGPT多轮对话数据集:RyokoAI/ShareGPT52K
- 80万条中文ChatGPT多轮对话数据集:BelleGroup/multiturn_chat_0.8M
- 116万条中文ChatGPT多轮对话数据集:fnlp/moss-002-sft-data
3.2 Reward Model datasets
- 原版的oasst1数据集:OpenAssistant/oasst1
- 2万条多语言oasst1的reward数据集:tasksource/oasst1_pairwise_rlhf_reward
- 11万条英文hh-rlhf的reward数据集:Dahoas/full-hh-rlhf
- 9万条英文reward数据集(来自Anthropic’s Helpful Harmless dataset):Dahoas/static-hh
- 7万条英文reward数据集(来源同上):Dahoas/rm-static
- 7万条繁体中文的reward数据集(翻译自rm-static)liswei/rm-static-m2m100-zh
- 7万条英文Reward数据集:yitingxie/rlhf-reward-datasets
- 3千条中文知乎问答偏好数据集:liyucheng/zhihu_rlhf_3k
参考链接:https://github.com/shibing624/textgen
如果github进入不了也可进入https://download.csdn.net/download/sinat_39620217/88205079 免费下载相关资料
相关文章:

开启想象翅膀:轻松实现文本生成模型的创作应用,支持LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,开箱即用
开启想象翅膀:轻松实现文本生成模型的创作应用,支持LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,开箱即用 TextGen: Implementation of Text Generation models 1.介绍 TextGen实现了多种文本生成模型,包括&a…...

文心一言 VS 讯飞星火 VS chatgpt (74)-- 算法导论7.2 2题
二、如果用go语言,当数组A的所有元素都具有相同值时,QUICKSORT的时间复杂度是什么? 文心一言: 在Go语言中,对一个所有元素都相等的数组进行快速排序(QuickSort)的时间复杂度是O(n log n)。 快速排序是一…...
大数据第二阶段测试
大数据第二阶段测试 一、简答题 Flume 采集使用上下游的好处是什么? 参考答案一 -上游和下游可以实现解耦,上游不需要关心下游的处理逻辑,下游不需要关心上游的数据源。 -上游和下游可以并行处理,提高整体处理效率。 -可以实现…...

06 为什么需要多线程;多线程的优缺点;程序 进程 线程之间的关系;进程和线程之间的区别
为什么需要多线程 CPU、内存、IO之间的性能差异巨大多核心CPU的发展线程的本质是增加一个可以执行代码工人 多线程的优点 多个执行流,并行执行。(多个工人,干不一样的活) 多线程的缺点 上下文切换慢,切换上下文典型值…...

datax-web报错收集
在查看datax时发现日志出现了如上错误,因为项目是部署在本地linux虚拟机上的,使用的是nat网络地址转换,不知道为什么虚拟机的端口号发生了变化,导致数据库根本连接不进去,更新linux虚拟机的ip地址就好...

YOLO相关原理(文件结构、视频检测等)
超参数进化(hyperparameter evolution) 超参数进化是一种使用了genetic algorithm(GA)遗传算法进行超参数优化的一种方法。 YOLOv5的文件结构 images文件夹内的文件和labels中的文件存在一一对应关系 激活函数:非线性处理单元 activation f…...
深入解析Spring Boot的核心特性与示例代码
系列文章目录 文章目录 系列文章目录前言一、自动配置(Auto-Configuration)二、起步依赖(Starter Dependencies)三、命令行界面(CLI)四、微服务支持五、内嵌Web服务器六、配置文件管理七、简化的日志配置八、健康检查与监控九、注解驱动开发十、外部化配置总结前言 Spri…...
什么是Java中的观察者模式?
Java中的观察者模式是一种设计模式,它允许一个对象在状态发生改变时通知它的所有观察者。这种模式在许多情况下都非常有用,例如在用户界面中,当用户与界面交互时,可能需要通知其他对象。 下面是一个简单的Java代码示例࿰…...

无涯教程-Perl - endhostent函数
描述 此函数告诉系统您不再希望使用gethostent从hosts文件读取条目。 语法 以下是此函数的简单语法- endhostent返回值 此函数不返回任何值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perlwhile( ($name, $aliases, $addrtype, $length, addrs)gethostent() ) …...

Vue2使用easyplayer
说一下easyplayer在vue2中的使用,vue3中没测试,估计应该差不多,大家可自行验证。 安装: pnpm i easydarwin/easyplayer 组件封装 习惯性将其封装为单独的组件 <template><div class"EasyPlayer"><e…...

Map映射学习
一、Map的遍历 创建Map集合 Map<String, Integer> map new HashMap<>();添加元素 map.put("java", 99);map.put("c", 88);map.put("c", 93);map.put("python", 96);map.put("Go", 88); 遍历方法: …...
【每日一题Day292】LC1572矩阵对角线元素的和 模拟
矩阵对角线元素的和【LC1572】](https://leetcode.cn/problems/matrix-diagonal-sum/) 思路 简单模拟,主对角线的元素横纵坐标相等,副对角线的元素横纵坐标相加为n-1,注意避免重复计算 实现 class Solution {public int diagonalSum(int[][]…...

Mongodb:业务应用(2)
需求: 1、获取保存到mongodb库中的搜索记录列表 2、实现删除搜索记录接口 保存搜索记录数据参考上篇Mongodb:业务应用(1)_Success___的博客-CSDN博客 获取记录列表 1、创建controller package com.heima.search.controller.v1;…...
DSO学习笔记
最近在学习DSO系列的代码,整理记录一下 DOS代码流程 TODO DSO跑kitti数据集 参考高翔大佬的LDSO中LDSO/examples/run_dso_kitti.cc,由于kitti数据集木有光度参数标定文件,其实最重要的就是相机内参文件camera.txt按照格式来就行了ÿ…...
【Windows 常用工具系列 5 -- 如何在网页(CSDN)中实现右上角及右下角数字显示】
文章目录 网页右上角/右下角标号写法 网页右上角/右下角标号写法 在网页撰写文章时经常遇到需要平方的写法,比如书写 X 的 2次方, 可以通过下面方法完成: <sup>x</sup> : x 上移到右上角;<sub>x</sub> : x 下移到右下角。 实…...
sql注入--报错注入
常用的简单测试语句和注释符号说明 sql语句的注释符号,是sq注入语句的关键点:常用 # 和 -- 1、# 和 --(有个空格)表示注释,可以使它们后面的语句不被执行。在url中,如果是get请求也就是我们在浏览器地址栏…...
Nginx常用功能
Nginx 介绍 Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的…...
【Express.js】express-validator
express-validator express.js 集成 express-validator进行数据校验 在最初的时候,对于请求的数据校验,我们是自定义一个中间件,然后在里面通过最原生的方式检验。在本节,我们将尝试用一种更优雅的方式进行数据校验。 准备工作…...

沁恒ch32V208处理器开发(三)GPIO控制
目录 GPIO功能概述 CH32V2x 微控制器的GPIO 口可以配置成多种输入或输出模式,内置可关闭的上拉或下拉电阻,可以配置成推挽或开漏功能。GPIO 口还可以复用成其他功能。端口的每个引脚都可以配置成以下的多种模式之一: 1 浮空输入 2 上拉输入…...

Jenkins 中 shell 脚本执行失败却不自行退出
Jenkins 中 执行 shell 脚本时,有时候 shell 执行失败了,或者判断结果是错误的,但是 Jenkins 执行完成后确提示成功 success 。 此时,可以通过条件判断来解决这个问题,让 Jenkins 强制退出并提示执行失败 failed 。 …...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...