如果想要训练自己的数据,无监督,非问答的。这个数据集应该如何改造?比如一篇文章,怎么填充成这种格式
Environment- OS:
- Python:
- Transformers:
- PyTorch:
- CUDA Support (`python -c "import torch; print(torch.cuda.is_available())"`) :
如果想要训练自己的数据,无监督,非问答的。这个数据集应该如何改造?比如一篇文章,怎么填充成这种格式
Environment- OS:
- Python:
- Transformers:
- PyTorch:
- CUDA Support (`python -c "import torch; print(torch.cuda.is_available())"`) :
好像这里改改就行:
def preprocess_function_train(examples):
max_seq_length = data_args.max_source_length + data_args.max_target_length
model_inputs = {
"input_ids": [],
"labels": [],
}
for i in range(len(examples[prompt_column])):
if examples[prompt_column][i] and examples[response_column][i]:
prompt, answer = examples[prompt_column][i], examples[response_column][i]
prompt = prefix + prompt
a_ids = tokenizer.encode(text=prompt, add_special_tokens=False)
b_ids = tokenizer.encode(text=answer, add_special_tokens=False)
if len(a_ids) > data_args.max_source_length - 1:
a_ids = a_ids[: data_args.max_source_length - 1]
if len(b_ids) > data_args.max_target_length - 2:
b_ids = b_ids[: data_args.max_target_length - 2]
input_ids = a_ids + [150001, 150004] + b_ids + [150005]
context_length = input_ids.index(150004)
mask_position = context_length - 1
labels = [-100] * context_length + input_ids[mask_position+1:]
pad_len = max_seq_length - len(input_ids)
input_ids = input_ids + [tokenizer.pad_token_id] * pad_len
labels = labels + [tokenizer.pad_token_id] * pad_len
model_inputs["input_ids"].append(input_ids)
model_inputs["labels"].append(labels)
return model_inputs
其中input_ids = a_ids + [150001, 150004] + b_ids + [150005]
改成input_ids = b_ids + [150005]
然后数据集的summary填内容,content留空。
不行呢,会得到这样结果……
Traceback (most recent call last):
File "/media/j/新加卷/chatglm_ft/ChatGLM-6B/ptuning/main.py", line 390, in
您好,我有楼主同样的疑问…… 我看过了您给出的readme内容,但仍不确定自己应该如何制作数据集……
(像楼主说的,如何让chatglm学习一篇文章的知识:【如果想要训练自己的数据,无监督,非问答的。这个数据集应该如何改造?比如一篇文章,怎么填充成这种格式】)
如果有一个示例,相信会对很多伙伴带来帮助……谢谢!
@eeyrw @jiaozn 我也是,不大行,留空的就会出现IndexError: Invalid key: 0 is out of bounds for size 0,如果把content都设置为0,然后按照input_ids = b_ids + [150005]来跑就会出现ValueError: 150004 is not in list。只能按照原来的跑,但是这样就失去本来的目的。
所以请问这个问题的最终答案是什么呢?我如何使用大量的领域内文本(不是QA数据,就是单纯的文章)来无监督微调呢? 有demo可以参考吗
+1 ,很多离线的本地知识不一定都像例子一样 以 q & a 的方式的,比如公司内部有很多知识(文章,说明书之类的),该如何组织训练数据呢?
同求拿公司文本无监督微调的方法