MateConv:3、MateConv预训练过程

MateConv预训练过程

B站同步视频 -> 点击进入> 点击进入> B站同步视频> 点击进入> 点击进入> B站同步视频> 点击进入>   

大模型预训练与预训练数据集

  在大模型训练的过程中,预训练阶段是至关重要的一步。预训练(Pre-training)是指在大规模无监督数据上进行初步模型训练,使模型能够学习到通用的语言模式、知识表征和统计特征。这一阶段不依赖于特定任务,而是通过在大规模、多样化的数据集上进行广泛的学习,帮助模型建立基础的语言理解能力。通过预训练,模型可以在后续的特定任务上(如分类、生成、翻译等)以更快的速度和更高的准确性进行微调(Fine-tuning)。

  预训练的目标是使模型能够有效捕捉数据中的规律,学会高效的特征表示,从而为后续的任务奠定基础。这一阶段通常涉及训练深度神经网络,如Transformer架构,通过处理大规模文本数据,模型能够学会上下文依赖关系、词汇语义关系等复杂的语言特征。

  而在选择预训练数据集时,需要特别已关注以下几个关键因素:

数据规模
预训练数据集的规模对模型的性能具有直接影响。大模型通常需要数百亿甚至上千亿个参数,这要求使用海量数据来支持模型训练。在数据量较少的情况下,模型可能无法充分学习复杂的语义关系,进而影响预训练的效果。因此,数据集的规模应足够大,以便涵盖广泛的语言模式和知识。

数据多样性
数据集的多样性同样至关重要。预训练过程中,模型需要接触各种类型的文本内容,包括新闻、书籍、博客、技术文档等,以确保其能够广泛适应不同语言风格、领域知识和应用场景。如果数据过于单一,模型在后续应用于其他任务时,可能会表现出偏差或局限性。因此,选取多样化的数据源有助于提升模型的泛化能力。

数据质量
数据质量直接影响模型预训练的有效性和稳定性。高质量的数据应具有较少的噪声、语法错误和不完整的句子。若数据质量较差,模型可能会学习到错误的模式或产生不合理的输出。因此,需对数据集进行预处理和清洗,以剔除错误、冗余或低质量的部分。

领域相关性
尽管预训练通常是在通用数据集上进行,但在某些情况下,特定领域的数据可能更为重要。例如,若大模型的目标是用于医学或法律领域的应用,预训练数据集中应包含该领域的相关内容,以帮助模型建立更为准确的领域知识。这种数据的领域适配性可以在后续任务中显著提高模型的表现。

综上所述,预训练阶段的数据集选取是大模型成功的关键环节之一,良好的数据规模、质量、多样性及领域适配性有助于提高模型的泛化能力和应用效果。同时,数据的合规性与道德责任也不容忽视。通过精心选择和处理数据集,可以为后续的任务微调提供坚实的基础。

大模型预训练数据集构建方法

  在大模型的开发中,构建高质量的预训练数据集是至关重要的一环。如果现有的公开数据集无法完全满足特定需求,研究人员或开发团队可能会选择自构预训练数据集,以便更好地适配模型的任务或领域。在构建过程中,不仅需要考虑数据的收集和处理,还应确保遵循数据的伦理、质量和多样性原则。

构建预训练数据集的步骤

确定数据来源
数据集的质量和多样性主要取决于数据来源的选择。常见的数据来源包括:

公开数据集:如维基百科、Common Crawl等大型通用文本数据集。这类数据资源庞大且容易获取。

领域特定数据:从技术文献库、领域文献、研究论文或行业报告中收集数据,适用于特定领域(如医学、法律、金融等)模型的预训练。

网络抓取:通过网络爬虫工具从特定网站抓取数据,尤其适合于需要最新或领域特定信息的场景。需要注意遵守网站的隐私政策及数据使用协议。

自有数据:如企业内部的技术文档、客户服务记录等,这些数据能够使模型专门针对企业应用场景进行优化。

数据清洗与预处理
收集到的原始数据往往包含很多噪声和冗余信息,如广告、格式错误、拼写错误、重复内容等。为了提高预训练的有效性,必须对数据进行清洗和预处理,主要包括:

去重处理:消除重复的文本片段,以避免模型过度学习某些特定模式。

去除噪声:如无意义的文本、HTML标签、标点符号过度堆积等。这些信息会干扰模型的训练,降低训练效果。

文本规范化:标准化文本格式,如统一的编码格式、消除特殊符号、处理数字或单位等。

句子分割与标注:确保文本中的句子分割合理,特别是对于连续文本段落的处理。根据需要,也可以对文本进行标注(如词性、句法等),以增加模型训练的多样性和丰富性。

数据分布与多样性检查
数据集的多样性和分布平衡性是影响模型泛化能力的重要因素。应尽量确保不同领域、不同风格、不同语言或不同语境下的数据均有适当的比例,以避免模型在某些特定领域或语言风格上产生偏见。可以通过统计分析工具对数据进行分布检查,确保数据涵盖广泛的上下文和主题。

数据格式化与存储
预训练数据通常需要转换为模型能够直接使用的格式,如标准化的纯文本文件(.txt)、序列化数据(JSON、CSV等),或者特定的分词和标注格式。确保数据的文件组织结构清晰,便于在训练时进行高效加载。
此外,预训练数据集往往非常庞大,因此需要合理的存储策略。常见的存储方式包括分片存储、大数据存储系统(如HDFS)、云存储等,以确保在大规模训练时的数据读取速度。

数据增强(可选)
在某些情况下,数据增强技术可以进一步提高数据集的多样性和丰富性,尤其是在数据规模不足的情况下。常见的数据增强技术包括:

同义词替换:在不改变语义的前提下,用同义词替换句子中的部分词汇。

句子顺序打乱:对文本中的句子顺序进行随机调整,增加训练数据的复杂性。

生成式增强:利用已有模型生成新的语料,通过多种生成方式扩展训练数据的规模。

注意事项

合法性与伦理合规
在数据收集的过程中,必须遵守相关法律法规,特别是数据隐私保护和版权问题。未经授权采集的数据可能涉及法律风险,尤其是涉及个人隐私信息或受版权保护的内容时,必须确保有合法使用许可。此外,数据集中应避免包含有害或偏见性的内容,如种族、性别、文化等方面的歧视性语言。

数据平衡与去偏
数据集中的偏见可能会导致模型输出中的偏差,例如如果训练数据集中某类文本(如某一性别、民族或职业)过度代表,模型可能会倾向于此类文本。为减少这种偏差,数据集的构建应尽量平衡不同类型的内容,确保模型学习到的知识更加中立和广泛。

数据质量控制
数据的质量直接决定了模型预训练的效果。低质量的数据(如拼写错误、语法错误、不完整的句子等)会导致模型学习到不可靠的模式,因此需要在数据清洗阶段严格控制数据质量。此外,数据标注的准确性也是模型表现的关键,特别是在需要监督信号或标注信息时,必须确保标注的一致性和正确性。

数据规模与计算资源匹配
自构数据集时需要考虑数据集的规模与计算资源的匹配问题。大规模的数据集需要与之匹配的计算资源,如多GPU/TPU架构、高速存储系统等。若计算资源有限,建议采取渐进式预训练策略,逐步扩大数据集规模或降低模型复杂度,以提高计算效率。

其他常见问题

1. 能否用企业内部数据直接训练大模型?

  如果企业内部的数据量足够大且多样化,完全可以用企业数据训练一个大模型。通过在企业私有数据上训练,模型可以学习到企业内部的专业知识和特定领域的任务,从而在企业专属的应用场景中表现出色。然而,通常情况下,企业的内部数据在规模和多样性上可能有限,直接用于训练大模型时,可能无法充分发挥大模型的潜力。

  大模型的优势在于它能够通过海量数据捕捉广泛的语言和知识模式。如果企业内部数据量有限,模型可能无法学习到足够多的通用知识,进而在泛化能力上表现较弱。尤其是现代的大模型往往拥有上亿甚至上千亿的参数,它们需要大量的数据来支撑训练。因此,在企业内部数据量不足的情况下,单独依赖这些数据可能会导致模型性能欠佳。

2. 如果企业数据量较少,是否应混合互联网数据集进行训练?

  对于数据量有限的企业,混合使用公开的互联网数据集是一个常见且有效的策略。通过将企业的专业数据与互联网中的大规模通用数据集(如Wikipedia、Common Crawl等)相结合,模型可以同时学习到通用的语言模式和领域特定的知识。这样,模型不仅在企业任务上有较好的表现,也能在通用任务中展现出优异的泛化能力。

这种混合训练的基本思想是:

通用数据为模型提供广泛的语言理解能力,包括基本的词汇、语法、常识性知识等。

企业私有数据则为模型注入特定领域的专业知识,如企业的业务流程、技术文档或客户服务记录。

  然而,混合训练也存在潜在的风险——模型可能会“遗忘”企业私有数据背后的关键信息,尤其是在通用数据量相对庞大且与企业数据差异较大的情况下。

3. 如何防止大模型遗忘企业私有数据?

  为了防止大模型在训练过程中遗忘企业私有数据背后的关键信息,有几种方法可以增强企业私有数据的作用,确保其在模型中的有效保留和强化:

3.1 微调(Fine-tuning

微调是一个常见的方法。你可以先使用大规模的互联网数据进行预训练,获取模型的基础能力,然后在企业私有数据上进行微调。微调阶段专注于企业的数据,允许模型在保持通用能力的同时,强化与企业特定任务相关的知识。

微调的核心思想是在预训练的大模型基础上,通过额外的训练使模型对企业领域的数据更加敏感,而不会完全依赖于通用数据。这种方式可以让模型在保持通用能力的同时,深入掌握企业的专业知识。

3.2 知识蒸馏(Knowledge Distillation

知识蒸馏是一种通过训练一个“小”模型来压缩和保留大模型知识的方法。在企业场景下,可以通过蒸馏技术将企业数据上训练的大模型信息提取出来,并浓缩到一个轻量化的模型中。这可以使模型在特定任务上更加高效且不易遗忘关键信息。

这种方法的优势在于,模型可以专注于企业数据的细节,而不必牺牲性能或增加计算资源的负担。

3.3 数据采样与加权训练

在训练过程中,可以使用数据采样或加权策略,给企业私有数据更大的权重。这意味着,在每个训练批次中,企业的数据可能比公开数据被更频繁地选择或赋予更高的损失函数权重。通过这种方式,模型会对企业数据给予更多的已关注,进而减少遗忘。

这种加权训练可以通过超参数调整实现,使模型更加倾向于学习企业特定领域的知识。

3.4 混合训练中的对比学习(Contrastive Learning

对比学习是一种无监督学习的方法,可以用于增强企业数据的重要性。在混合训练的过程中,企业私有数据可以被作为一种“对比”的参考,模型可以通过区分企业数据和通用数据来学习到领域特有的表示。这种方法可以帮助模型更清晰地理解哪些信息是企业独有的,哪些是通用知识。

对比学习的目标是通过将企业数据作为正样本,让模型学习到其特殊的语义特征,从而减少遗忘。

3.5 连续学习(Continual Learning

在动态环境中,企业数据往往是逐步生成和更新的。通过连续学习方法,可以让模型在新的企业数据生成时逐步适应,而不会遗忘先前学到的信息。通过增量式更新训练,模型能够保留历史数据的知识,同时吸收新的信息。

这可以防止模型在引入更多通用数据或新数据时,遗忘早期学习的企业数据。

4. 增强企业私有数据的方法

  除了上述防止遗忘的方法,还有一些技术可以进一步增强企业私有数据在大模型中的权重和价值:

数据增强:可以对企业私有数据进行增强,尤其是在数据量较少的情况下。例如,通过同义词替换、文本生成等技术扩展数据量,使企业数据的多样性得到提升,进而增强模型对该数据的敏感性。

生成对抗网络(GANs:使用生成对抗网络可以在企业私有数据上生成新的数据样本。这种方法不仅可以扩展数据量,还能捕捉企业数据中的潜在模式,丰富模型的知识储备。

跨领域预训练:如果企业的领域数据与其他领域存在部分相似性,可以尝试使用与该领域相关的公开数据进行初步预训练,然后再在企业数据上进行微调。这种方法能够加速模型对企业特定知识的适应。

  对于数据量较少的企业,可以通过混合互联网数据集和企业私有数据来训练大模型,这能够提高模型的通用性和专业性。然而,模型在训练过程中确实可能遗忘企业特有的数据,为了防止这种情况,可以通过微调、加权训练、对比学习、连续学习等方法来增强企业私有数据的权重。此外,数据增强等技术也可以进一步丰富和扩展企业数据,确保模型对这些数据的已关注度。

一、MateConv预训练数据集清洗与创建

1.预训练数据集获取

中文公开预训练数据集一览

中文预训练语料

描述

Wiki中文百科:wikipedia-cn-20230720-filtered

中文Wikipedia的数据

BaiduBaiKe:百度网盘 提取码: bwvb

中文BaiduBaiKe的数据

C4_zh:百度网盘 part1 提取码:zv4r;百度网盘 part2 提取码:sb83;百度网盘 part3 提取码:l89d

C4是可用的最大语言数据集之一,收集了来自互联网上超过3.65亿个域的超过1560亿个token。C4_zh是其中的一部分

WuDaoCorpora:智源研究院BAAI:WuDaoCorpora Text文本预训练数据集

中文悟道开源的200G数据

shibing624/medical:shibing624/medical

源自shibing624的一部分医学领域的预训练数据

seq-monkey-data:seq-monkey-data

是由多种公开来源的数据(如网页、百科、博客、开源代码、书籍等)汇总清洗而成。整理成统一的JSONL格式,并经过了严格的筛选和去重,确保数据的全面性、规模、可信性和高质量。总量大约在10B token,适合中文大语言模型的预训练。

Skywork:Skywork

可公开访问部分包含约2.33亿个独立网页,每个网页平均包含1000多个汉字。数据集包括大约150B token和620GB的纯文本数据。

获取预训练数据集

  本次模型选择序列猴子通用文本数据集作为预训练数据集mobvoi_seq_monkey_general_open_corpus,该数据集介绍如下:https://github.com/mobvoi/seq-monkey-data/blob/main/docs/pretrain_open_corpus.md

数据集需要手动下载mobvoi_seq_monkey_general_open_corpus.zip文件并上传至项目data文件夹内。

文件解压缩

  接下来则需要在服务器上运行如下命令:

Bash
conda activate MateConv
sudo apt-get install unzip
cd /root/autodl-tmp/MateConv/dataset/
unzip mobvoi_seq_monkey_general_open_corpus.zip

解压缩后就会得到文件mobvoi_seq_monkey_general_open_corpus.jsonl

2.预训练集清洗与二进制转化

Step 1.导入库

Python
import itertools
import re
import json
import jsonlines
import psutil
import ujson
import numpy as np
import pandas as pd
from transformers import AutoTokenizer
from datasets import load_dataset
import os
from tqdm import tqdm

Plaintext
/root/miniconda3/envs/MateConv/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
  from .autonotebook import tqdm as notebook_tqdm

Step 2.定义BOS和EOS标记,并加载分词器

Python
# 定义BOS和EOS标记
bos_token = “<s>”
eos_token = “</s>”

Python
# 加载训练好的分词器路径
tokenizer = AutoTokenizer.from_pretrained('/root/autodl-tmp/MateConv/model/mateconv_tokenizer', use_fast=False)
print(f'加载的tokenizer词表大小: {len(tokenizer)}')

Plaintext
加载的tokenizer词表大小: 6400

Step 3.读取部分数据

Python
def preview_dataset(file_path, num_lines=5):
    “””
    读取并展示数据集的前 num_lines 行
    “””
    # 检查文件是否存在
    if not os.path.exists(file_path):
        raise FileNotFoundError(f”{file_path} 文件不存在,请检查路径!”)

    # 逐行读取并展示前 num_lines 行
    with jsonlines.open(file_path) as reader:
        for idx, obj in enumerate(reader):
            print(f”第 {idx + 1} 行数据: {obj}”)
            if idx + 1 >= num_lines:
                break

# 指定文件路径和需要展示的行数
file_path = './dataset/mobvoi_seq_monkey_general_open_corpus.jsonl'
preview_dataset(file_path, num_lines=5)

Plaintext
第 1 行数据: {'text': '在查处虚开增值税专用发票案件中,常常涉及进项留抵税额和税款损失的认定和处理。在计算税款损失时,要不要将进项留抵税额包括在内?
对此,实务中存在意见分歧。
有人主张归并,即计算税款损失时包括进项留抵税额;
有人主张剥离,即计算税款损失时剔除进项留抵税额。分析这个问题,需要确定进项留抵税额与税款损失之间是什么关系。
理清这二者之间的关系,首先需要了解增值税的概念和其抵扣机制。增值税是以商品(货物、服务等)在流转过程中产生的增值额作为计税依据而征收的一种流转税。为避免重复征税,在增值税中存在抵扣链条机制。
一般而言,交易上游企业缴纳的税额,交易下游企业可以对相应的税额进行抵扣。
对增值税一般纳税人来说,其购进货物、服务等取得增值税专用发票,发票上的税额是进项税额。
其出售货物、服务等,向购买方开具增值税专用发票,发票的税额是销项税额。
一般情况下,销项税额减去进项税额的金额是应纳税额,企业根据应纳税额按期申报纳税。
其次需要了解进项留抵税额的概念及产生原因。
在计算销项税额和进项税额的差额时,有时会出现负数,即当期进项税额大于当期销项税额。这个差额在当期未实现抵扣,为进项留抵税额,在以后纳税人有销项税额时再进行抵扣。
企业产生进项留抵税额的主要原因是其进项税额和销项税额时间上的不一致。
例如,企业前期集中采购货物和服务,投资大,销项税率低于进项税率等。
从税款抵扣的角度看,进项留抵税额只是购进的这部分进项税额参与到增值税应纳税额的计算过程中,但是其对应的进项税额抵扣还未真正实现,一般要等到其未来有相应的销项税额时,才能真正实现进项税额抵扣。
可见,进项留抵税额处于不确定状态,能否抵扣受到很多因素影响,例如企业经营中断,没有销项税额,这时进项留抵税额就无法实现抵扣。但如果企业按照税收政策规定申请进项留抵退税,进项税额抵扣就随之实现。
最后需要了解税款损失的概念。
税款损失,通常是指因虚开增值税专用发票,导致国家税款被骗或者流失的金额。关于税款损失,实务中有多种表述。
例如,北京大学法学院教授陈兴良曾谈到虚开行为本身不会造成国家税款损失,只有利用发票抵扣时才会造成国家税款损失。刘兵等编著的《虚开增值税专用发票案例司法观点和案例解析》一书中提到:“给国家税款造成损失的数额,实际上就是被骗取的国家税款在侦查终结以前无法追回的部分。”
赵清海与王家欣合著的《增值税专用发票虚开的判定与预防》一书中提到:“司法实践中,受票方用虚开的增值税专用发票予以抵扣的税款,从而导致受票方应纳税额的减少是法院所认定的国家税款流失的金额。”
从这些表述可见,税款损失应该是实际造成的损失,不应包括不确定的部分——进项留抵税额,进项留抵税额与税款损失之间不能直接画等号。
综上分析,进项留抵税额,只是使国家税款处于可能被抵扣的状态,还没有真正造成国家税款流失,一般情况下应将其从税款损失中剥离,特殊条件下将其归并入税款损失。
例如,当纳税人造假按照税收政策规定申请进项留抵税额退税后,有关税款损失将会从危险状态转化成危害结果,这时候要将有关进项留抵税额并入税款损失。
所以,在虚开增值税专用发票案件中,一般情况下,如果以纳税人的进项税额作为税款损失的计算基数,在对其进行行政处罚或刑事处罚时,应把进项留抵税额从税款损失中剔除,但纳税人申请进项留抵退税的除外。这样处理,把处罚与危害结果相对应,体现行政处罚法的过罚相当原则和刑法的罚当其罪原则。'}
第 2 行数据: {'text': '读者在使用本《年鉴》时发现与以前本局出版、公布、或内部提供的资料有出入的,概以本《年鉴》为准。
《年鉴》正文内容分为三大部分。第一部分为文字部分,收录了《2012年政府工作报告》以及《2011年河源市国民经济和社会发展统计公报》。第二部分为统计图,形象地反映建市以来河源市国民经济发展变化情况。第三部分为统计资料,具体分为行政区划和自然资源,综合、核算、人口,农村经济,工业,能源,交通、邮电,贸易业、物价指数,对外经济、旅游,财政、金融和保险,固定资产投资与建筑业,劳动工资,人民生活,文教、卫生和其他,河源市乡镇主要经济指标,广东省县域主要经济指标,广东省各市主要经济指标等16部分。此外,为便于读者正确理解和使用统计资料,特附主要统计指标解释、统计术语简介及统计法律法规等资料。
《年鉴》中,本市的数据是根据我局及有关部门的统计年报整理汇编而成,由于某些专业统计制度和统计口径的变化,有些数据空缺。使用本《年鉴》时,请注意指标名称的含义、统计口径、统计范围、计算单位、可比价与现行价(当年价)等。
《年鉴》第一部分中的有些数据为初步统计数,凡与本《年鉴》中第三部分的数据有出入的,则以第三部分的统计数据为准。
本《年鉴》部分统计数据使用了四舍五入的进位方法,因此,可能令统计表内个别项目相加与总数略有出入。
本《年鉴》统计表中符号使用说明:“#”表示其中主要项;“空格”表示该项统计指标数据不详或无该项数据。
本《年鉴》的编辑出版,得到县、区及市直有关部门和单位的大力支持,在此表示感谢!本书疏漏之处敬请批评指正。
下载说明: �本站下载的文件一律为压缩文件,请使用 WinRAR 解压。
�PDF格式的资料请使用 Adobe Reader 浏览。
�本站提供的一些资料是供学习研究之用,如用于商业用途,请购买正版。'}
第 3 行数据: {'text': '初中阶段是学生身心发育的一个突变期。尤其是初一学生,从小学到中学,随着环境改变,课程增多,难度加大,他们内心发生了急剧变化,产生了许多烦恼、困惑,造成较大的心理偏差,这就需要教师和家长及时给予心理指导和帮助。
一、心理偏差的种种表现
1、骄傲自负心理。这种心理偏差主要表现在思维敏捷、小学成绩拔尖的学生身上,特别是一些长期担任班干部、竞赛获奖、父母有权力的学生表现尤为明显。
2.单纯求趣心理。求趣激趣,这是教学的原则之一,但是,有些初一学生过分地追求接受知识要符合自己的兴趣,还想回到幼儿园、小学时“游戏教育”和“愉快教育”中去,不能努力适应初中阶段的学习生活。
3.自卑孤僻心理。多数来自普通工薪家庭及农村贫困地区或遭遇父母婚变的学生,往往在干部、富家子弟、有特长的同学面前感到自卑,心理压抑,行为孤僻,甚至变态的自尊,影响学习。
4.胆怯畏惧心理。部分性格内向、胆小的学生,主要是女生,羞于用语言表达思想,沉溺于内心活动和笔头表达。内心活动不能外显,妨碍了思维素质的深入发展。
5.浮躁马虎心理。部分活泼好动的学生,智力水平不低,但就是不能静下心学习,总是浅尝辄止,马虎应付,不愿作深入的思考,常常“半罐水响叮当”。
6.贪图享受心理。一些家境较好的学生,行为懒散,好逸恶劳,学习上畏难怕苦,生活上讲吃讲穿。
二、上述心理偏差的形成原因
1.生理上的原因。初中学生处于发育高峰期,身高体重剧增,性发育开始。生理上的急剧变化使儿童意识到自己不再是孩子,“成人感”增强。但是,青年身体成熟速度存在着很大的个体差异:不同性别之间相差两年左右,同性别之间相差四年左右。因此,同是初中学生,一部分学生生理已跨入青年期,而另一部分学生可能还停留在童年期。
2.心理上的原因。随着生理的变化,“成人感”的出现,初中学生心理产生“独立”,力求摆脱对成人的依赖,老师、家长在他们心目中的权威降低,同学之间相互影响增强。思维上发展了批判性,但由于经验的缺乏含有片面性和主观性;行为上出现“独特性”和“受暗示性”乃至“抗拒性”,即逆反心理;情绪上带有冲动性,不善于克制自己;兴趣和愿望上带有随意性、多变性、狂热性,常为了所谓讲“义气”而庇护同伴,或为同伴打抱不平;感情上具有“闭锁性”,而对于艰苦的学习活动特别重要的意志品质,则还处在比较软弱的状态。
3.环境的原因。心理学认为,个体的生物遗传因素规定了发展的潜在可能范围,而个体环境教育则确定他在此可能范围内的现实水平。环境条件有利与否对个体发展的现实水平起了决定性作用。
①家庭。社会的信仰、观念等社会化目标都是首先通过父母的过渡,以高度个性化了的、有选择的形式传递给儿童的。父母本身的个性特征、社会地位、教育水平、宗教信仰、价值标准等等都强烈地影响他们的后代。父母的教养方式、家庭结构、物质条件、人际环境、文化和情绪氛围,都在很大程度上影响着学生。
②学校。学校不仅是对学生传授文化科学知识,进行政治思想教育的社会基本教育单元,还是促进学生良好品格形成和发展的重要场所。学生在学校里形成良好的品格,才能顺利走向社会,适应社会生活。反之,则会发生各种问题。而现在的应试教育制度,像紧箍咒一样,时时冲击着素质教育,教师以升学率论质量给待遇,使一些教师对成绩好的学生倍加宠爱,对成绩差的学生则百般呵斥。更有少数教师将腐朽庸俗的人际关系引入师生和家长的关系,身教言传,污染了学生心灵;让孩子过早成人化、世故化。
③社会。社会上各种腐朽思想沉渣泛起,对学生负面影响很大。影视传媒、流失少年、勒索等等,浸染着学生稚嫩的心灵;电子游戏机、卡拉OK厅等,又使我们的孩子面临着极强的诱惑,意志薄弱者稍不留意,便坠入其间。
三、纠正初中学生的心理偏差的对策
为了纠正初中学生的心理偏差,我们必须对教育环境影响予以高度重视。在现有环境中,我们应做到:
1.坚持以德、智、体、美、劳全面的教育方针为指导思想进行教育管理,坚持“要成才先成人”的教育思想。
2.“学高为师,身正为范。”作为教师,必须加强道德修养,提高职业素质,全面关心和爱护每一位学生的身心健康发展。
3.以激励为心育的主要手段。我们要将思想教育和学生喜闻乐见的实践活动结合起来,不断提高学生对美的感受和鉴赏力,使其求真向善,茁壮成长。
4.形成教育合力。在抓好班集体建设的同时,我们必须密切联系家长,与家长一起研究分析学生,共同教育学生。
5.帮助学生正确认识、分析、评价自己的心理过程。让他们将社会化标准--《中学生日常行为规范》逐渐内化,用以规范自己的言行,自觉抵制不良诱惑,不断提高自我意识水平和自我教育能力。
6.对各类心理偏差学生施以不同的教育。对有骄傲自负心理的学生施以“挫折教育”;对有自卑、胆怯畏惧心理的学生施以“磨难教育”;对有虚荣忌妒、趋同报复、庸俗心理的学生施以分辨真美善、假丑恶的“是非教育”等。
与此同时,还应努力提高、优化当代中学生的心理特点。
首先,作为家长必须转变观念。对自己的孩子,在作业和职业方面的“期望值”不能脱离子女的实际而好高骛远,每个孩子因智力因素、情趣爱好,性格意志和心理承力各不相同,如果孩子确实尽了自己的努力,而未达到你所期望的目标,不应过多责怪,更不能冷嘲热讽,惩罚打骂。诚然,家长望子成龙“天经地义”,无可厚非。但“龙”的内涵并不专指读大学、考研究生。“三百六十行,行行出状元”,如果每一位家长都能建立这样的“职业观”,让孩子在宽松的环境里读书,
其次,作为教育者—-教师来说,则更要不断学习,及时吸收新鲜气息,不断提高自己的思想、政治教育水平,提高自己的专业知识和业务水平,做到不仅能教书育人,更能进行教育评价,尊重学生人格,依法执教,用先进的具有创造性的教育思想、理论、方法促进教育水平的提高,注重培养学生的全面发展,加强能力培养和思维训练,提高学生的综合素质。具体方法如下:
第一,让学生充分了解自己的心理特点,通过与周围的同学以及其他同龄人相比,通过同电影、小说电视里特定情景中的人物相比,如宣传奥斯特洛夫斯基、托尔斯泰、张海迪、贝多芬等等,通过对比,找出自己在哪些方面存在弱点,或者也可以通过父母、老师、同学对自己经常的评价了解自己在哪些方面存在不良心理特点,从而扬长避短。
第二,选择恰当的方法进行锻炼。例如:
1、教他们多读好书,如《周恩来》、《钢铁是怎样炼成的》等优化心理品质。人类的几千年文明,其智慧、经验、真知灼见,都浓缩于书中,如果多读好书,能经常与这样一些“高尚朋友”对话,听听他们的“指点”以此开阔视野,启迪智慧,这对优化学生的心理品质是大有裨益的,作为中学生,不仅要读好的故事书,还应该读一些伟人的传记,读一些思想、修养方面的书籍,并且养成做读书笔记的习惯。
2、鼓励学生参加社会活动,锻炼心理品质,如送“温暖小组”、“助残小分队”等活动的开展,都是锻炼心理品质行之有效的方法。
3、也要注重培养学生琴、棋、书、画、音、体、美等美育活动,有助于疏导、排解不良情绪,给人以美的熏陶和享受,从而对心理产生良性刺激。让美来充实孩子的精神生活,让美来帮助塑造孩子健康的心理。
4、在条件可能的情况下,可组织学生春游、郊游、野炊等活动,学生也可以利用寒、曙假、节假日到一些名胜古迹去游览、旅游、参观、陶冶自己的情操,走进大自然,亲近大自然,细心体会大自然,不仅能使人心胸开阔、情绪放松,精神振奋,还常能使人领悟到人生的真谛。
只有这样,优化了学生的心理特点,才能促使学生健康成长,从而成为新世纪的合格人才。'}
第 4 行数据: {'text': '我们生产的食品消泡剂,具有可以快速消除泡沫的特点。
丹东食品消泡剂相关内容:一般而言,纯水和纯表面活性剂不起泡,这是因为它们的表面和内部是均匀的,很难形成弹性薄膜,即使形成亦不稳定,会瞬间消失。
丹东食品消泡剂选择:
1. 相容性:相容性是指两种或者两种以上物质混合时,不产生相斥分离现象的能力,相容性好,消泡剂就能够长期、稳定、均匀地存在于体系中,进而发挥消抑泡的作用;反之,就会出现分层等现象,使消泡剂的消泡工作无法正常进行。
2. 消泡能力:消泡能力是消泡剂的最主要性能,鉴别此项性能的标准是在同等条件下,分别加入等量不同的消泡剂,观察消泡剂的消泡速度。'}
第 5 行数据: {'text': '程总在座谈中首先向学校的客人介绍了三一集团和北京三一重机的情况,以及在公司快速发展过程中对人才的渴求,指出通过校企联合,学校可以依靠企业的参与制定人才培养方案,使培养的人才更贴近市场,贴近企业,又可以借助企业的资源充实学校的办学实力。同时校企联合有利于企业的可持续发展。校企联合是企业实现人才战略的途径。企业在与高等职业教育合作过程中可以贯彻自己的培养意向,满足对生产第一线实用型人才的需求。
武汉交通职业学院盛建龙院长和河北工业职业技术学院李军锁副院长分别介绍了各自学校人才培养情况,并对三一集团的高速发展表示钦佩和赞赏,表示将和公司开展深入、全面的合作,优势互补,使学校和企业实现充分的资源共享,建立全方位长效合作机制。
本次联合办学签约仪式,是北京桩机高起点校企合作的开始。按照北京桩机人力资源提升计划,明年北京桩机将和所高职高专院校进行联合办学成立“三一班”,均为统招大专高技学历层次,涉及焊接、装配、机加工、售后服务等紧缺工种,“三一班”学员将达到近300人,为北京桩机的下一个五年跨越式发展打下良好的人才基础。'}

JSONL(JSON Lines):是一种逐行存储 JSON 对象的文件格式,每行是一个独立的 JSON 对象,行与行之间并没有特定的结构。每行的 JSON 对象独立存在,不属于同一个数组或对象。例如:

Python
{“name”: “Alice”, “age”: 25}
{“name”: “Bob”, “age”: 30}

Plaintext
{'name': 'Bob', 'age': 30}

什么样的 JSONL 中会携带无效的 JSON 格式

在 JSONL 文件中,每一行都应当是有效的 JSON 对象,但有以下几种常见情况会导致无效的 JSON 行:

缺少必要的符号:JSON 对象必须用 {} 括起来,且键值对之间要用逗号分隔。例如,缺少结束花括号:

Plaintext
{“name”: “Alice”, “age”: 25

引号问题:JSON 的键和值(非数字类型)必须使用双引号。如果使用了单引号或忘记引号,都会导致无效格式:

Plaintext
{'name': 'Alice', 'age': 25}  # 错误的引号

数据未完整写入:例如由于文件写入中断,某一行可能是不完整的 JSON 对象:

Plaintext
{“name”: “Alice”, “age”:

额外的标点符号或换行符:一些 JSONL 文件可能错误地加入了多余的标点符号或不正确的换行符,导致解析错误:

Plaintext
{“name”: “Alice”, “age”: 25},
{“name”: “Bob”, “age”: 30}

这里的逗号在 JSONL 中是不需要的,因为每一行都是独立的。

字符编码问题:文件可能存在编码不一致的情况,特别是非 UTF-8 编码时,可能会引发解码错误,例如你的错误提示中看到的 “codec can't decode byte”。

无效的 JSON 格式示例

例如,以下 JSON 数据格式就是无效的:

缺少关闭括号:

JSON
{“name”: “Alice”, “age”: 25

键名未加双引号:

JSON
{name: “Alice”, “age”: 25}

值部分使用了错误的引号:

JSON
{“name”: 'Alice', “age”: 25}

Step 4.统计与清理数据

Python
def get_total_lines(file_path):
    “””
    获取 JSONL 文件的总行数,不忽略错误,保证能够全面统计。
    “””
    with open(file_path, 'rb') as f:  # 使用二进制模式避免编码问题
        return sum(1 for _ in f)

Python
def check_jsonl_format(file_path):
    “””
    检查 JSONL 文件中的每一行是否是有效的 JSON 格式,带进度显示,并统计所有有问题的行。
    “””
    total_lines = get_total_lines(file_path)  # 获取文件总行数
    valid_lines = 0
    invalid_lines = 0

    # 使用逐行读取,捕获 JSON 和编码错误
    with open(file_path, 'rb') as f:  # 使用二进制读取避免编码问题
        # 使用 tqdm 进度条显示检查进度
        for idx, line in tqdm(enumerate(f), total=total_lines, desc=”Checking JSONL format”):
            try:
                # 先尝试将每行数据解码为 UTF-8
                decoded_line = line.decode('utf-8')
                # 然后检查是否是有效的 JSON 格式
                obj = jsonlines.Reader([decoded_line]).read()
                valid_lines += 1
            except UnicodeDecodeError as e:
                print(f”Encoding error at line {idx + 1}: {e}”)
                invalid_lines += 1
            except jsonlines.InvalidLineError as e:
                print(f”Invalid JSON at line {idx + 1}: {e}”)
                invalid_lines += 1

    print(f”检查完成,文件中共有 {valid_lines} 行有效的 JSON 数据,{invalid_lines} 行无效的 JSON 数据。”)
    return valid_lines, invalid_lines

Python
valid_lines, invalid_lines = check_jsonl_format(file_path)

Plaintext
Checking JSONL format: 100%|██████████| 9598787/9598787 [02:01<00:00, 79274.88it/s]

Encoding error at line 9598787: 'utf-8' codec can't decode byte 0xe5 in position 503: unexpected end of data
检查完成,文件中共有 9598786 行有效的 JSON 数据,1 行无效的 JSON 数据。

Python
def remove_invalid_line(file_path, output_path, invalid_line_num):
    “””
    读取文件,跳过指定的无效行,并将结果写入新文件
    “””
    with open(file_path, 'rb') as infile, open(output_path, 'wb') as outfile:
        for idx, line in enumerate(infile):
            if idx + 1 != invalid_line_num:  # 跳过无效行
                outfile.write(line)

# 使用该函数删除第 9598787 行并保存为新文件
remove_invalid_line('./dataset/mobvoi_seq_monkey_general_open_corpus.jsonl',
                    './dataset/mobvoi_seq_monkey_general_open_corpus_cleaned.jsonl',
                    invalid_line_num=9598787)

Step 5.定义处理函数(逐块处理数据)

Python
def process_seq_monkey(chunk_size=50000):
    “””
    逐块读取 mobvoi_seq_monkey_general_open_corpus.jsonl 文件,
    对文本进行分词,并将分词结果保存为二进制文件,支持跳过无效行,并显示处理进度。
    “””
    doc_ids = []
    chunk_idx = 0
    total_lines = 0

    # 先计算总行数以便显示进度
    with open('./dataset/mobvoi_seq_monkey_general_open_corpus_cleaned.jsonl', 'r', encoding='utf-8') as f:
        total_lines = sum(1 for _ in f)

    # 打开jsonlines文件逐行读取
    with jsonlines.open('./dataset/mobvoi_seq_monkey_general_open_corpus_cleaned.jsonl') as reader:
        # 使用 tqdm 进度条显示进度
        with tqdm(total=total_lines, desc=”Processing lines”) as pbar:
            while True:
                try:
                    # 使用 itertools.islice 按块读取文件,每次读取 chunk_size 行数据
                    chunk = list(itertools.islice(reader, chunk_size))
                except jsonlines.InvalidLineError as e:
                    print(f”Skipping invalid chunk at chunk {chunk_idx}: {e}”)
                    continue

                if not chunk:  # 如果读取到文件末尾,则停止
                    break

                # 遍历块中的每一行数据
                # 逐行对数据进行编码(按token进行编码)
                for idx, obj in enumerate(chunk):
                    try:
                        # 从每一行数据中提取'text'字段(即文本内容)
                        content = obj.get('text', '')
                       
                        # 跳过长度超过512的文本
                        if len(content) > 512:
                            continue

                        # 对文本进行分词,将其转为 token ids 序列,并加上BOS和EOS标记
                        text_id = tokenizer(f'{bos_token}{content}{eos_token}').data['input_ids']
                       
                        # 将分词结果添加到 doc_ids 列表中
                        doc_ids += text_id

                    except UnicodeDecodeError as e:
                        # 如果遇到编码错误,跳过该行,并打印错误信息
                        print(f”Skipping invalid line {chunk_idx * chunk_size + idx + 1}: {e}”)
                        continue

                # 每处理完一块数据,更新 chunk_idx 并打印进度信息
                chunk_idx += 1
                pbar.update(len(chunk))  # 更新进度条

                # 如果累积的 token ids 超过 1,000,000 个,保存到文件中
                if len(doc_ids) > 1000000:
  

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容