【深度学习&NLP】数据预处理的详细说明(含数据清洗、分词、过滤停用词、实体识别、词性标注、向量化、划分数据集等详细的处理步骤以及一些常用的方法)

目录

一、数据预处理简介

二、进行数据预处理的原因

1、文本中含有不必要的信息和噪声

2、数据可能不一致或者不太规范

3、文本需要标记和分词

4、可能需要词形还原和词干提取 ( 词性标注 )

5、需要将文本向量化处理

三、数据预处理方法介绍及使用样例

1、数据清洗

2、分词

3、停用词过滤

4、词性标注

5、实体识别

6、词向量化


一、数据预处理简介

        在深度学习中,数据预处理是一个重要的步骤。原始训练数据中,由于每一维特征的来源以及度量单位不同,会造成特征值的分布范围差异很大。当计算不同样本之间的欧氏距离时,取值范围大的特征会起到主导作用。因此,对于基于相似度比较的机器学习方法,必须先对样本进行预处理,将各维度特征归一化到同一取值区间,并且消除不同特征之间的相关性,才能获得理想的结果。

        数据预处理还可以通过数据增强来增加训练样本的多样性,提高模型鲁棒性,避免过拟合,例如, 翻转、旋转、平移、缩放、随机裁剪或补零,色彩抖动等 ( 这些都是在CV当中的一些情况 );在NLP的任务中,数据预处理又可以通过以下方式来有效地增加训练数据的多样性,避免模型对训练数据的过拟合,提高模型的泛化能力和鲁棒性,例如,同义词替换、随即插入、随即删除、随即交换、随机扰动等,这些方法还可以缓解NLP中数据量不足的问题,提高模型的性能。

二、进行数据预处理的原因

1、文本中含有不必要的信息和噪声

        文本数据通常包含大量的无关信息和噪声,如标点符号、HTML标记、停用词、缩写、拼写错误、语法错误等。这些信息和噪声会干扰模型的学习和性能,导致模型预测不准确或低效。通过数据预处理,可以去除这些不必要的信息和噪声,使文本数据更加干净和有用。

2、数据可能不一致或者不太规范

        文本数据通常具有多种表现形式和写作风格,如大小写、缩写、单复数、变体词等,在中文中可能存在语义分割的问题,有些词与词之间的界限不清晰、有些词语的多义性和歧义性、还有语法和语义的变化、简体字和繁体字、以及不同民族的文字,所以中文的数据在处理起来可能更加的困难、需要我们更加的小心和细心。这些差异会导致数据不一致和不规范,从而使模型学习变得更加困难。通过数据预处理,可以将文本数据转换为一致和规范的形式,使模型更容易学习和理解。

3、文本需要标记和分词

        在NLP中,将文本数据划分为单个标记或单词是很重要的。这可以帮助我们理解文本的含义和结构,以及构建词汇表和语料库。标记化和分词可以将文本数据转换为可操作的形式,从而为模型学习提供基础。这一步中,对中文的处理也比英文要困难,英文的词都是用空格隔开的,而中文的一句话很多时候都是连起来的,所以在分词、词性标注的时候就更加的不容易,不过现在也有像 jieba 这样的比较优秀的中文分词的工具。

4、可能需要词形还原和词干提取 ( 词性标注 )

        在NLP中,有时候我们需要将单词转换为它们的基本形式,这被称为词形还原和词干提取,在中文的NLP中其实词形还原和词干提取用的比较少 ( 在机器翻译和信息检索需要形态学分析的时候可能会用到 ),一般来说中文更多的是使用分词技术和词性标注技术来处理。这可以帮助我们理解单词的含义和关系,以及减少词汇量。通过数据预处理,可以将文本数据中的单词转换为它们的基本形式,从而提高模型的性能和效果

### BERT实现词向量化与文本向量化方法 #### 方法概述 BERT(Bidirectional Encoder Representations from Transformers)是一种强大的预训练语言模型,能够生成高质量的词向量和文本向量。通过微调或直接使用其隐藏层输出,可以有效捕捉语义信息并用于各种自然语言处理任务。 #### 词向量化过程 在BERT中,每个输入token会被映射为其对应的嵌入表示。具体来说,BERT会将输入序列转换为一系列固定维度的向量[^1]。这些向量可以通过以下方式获得: - **Token Embeddings**: 输入中的每一个单词都会被转化为一个固定的embedding。 - **Positional Encodings**: 添加位置编码以保留顺序信息。 - **Segment Embeddings**: 如果存在多个句子,则标记它们属于哪个部分。 最终得到的是每一层Transformer后的隐状态矩阵 \( H \in R^{T \times D} \),其中\( T \) 是tokens数量,而\( D \) 则是hidden size大小。通常可以选择最后一层作为词语级别的特征表示[^2]。 ```python from transformers import BertTokenizer, BertModel import torch tokenizer = BertTokenizer.from_pretrained('bert-base-chinese') model = BertModel.from_pretrained('bert-base-chinese') text = "我喜欢学习人工智能" encoded_input = tokenizer(text, return_tensors='pt', padding=True, truncation=True) with torch.no_grad(): output = model(**encoded_input) word_embeddings = output.last_hidden_state # 获取最后一个隐藏层的状态 print(word_embeddings.shape) # 输出形状应类似于(batch_size, sequence_length, hidden_dim) ``` 上述代码展示了如何加载预训练好的`bert-base-chinese`模型,并提取给定中文字符串各token的最后一层隐藏态作为词向量。 #### 文本向量化过程 对于整个文档或者较长片段而言,可以直接取特殊分类符 `[CLS]` 对应的位置处的向量当作整体文本表征;然而这种方法可能不够精确因为仅依赖单个点不足以概括全文义。另一种更优的方式是对所有token的结果求平均值得到全局描述子: \[ \text{Text Vector} = mean(H_{i}) , i=0,...,N-1\] 这里 N 表示实际有效的 token 数目(不包括填充的部分). 另外还有专门针对句间关系建模优化过的版本如Sentence-BERT(SBERT), 它通过对偶样本对比学习调整原始BERT内部机制从而更适合做短文本匹配类工作. ```python sentence_embedding = word_embeddings.mean(dim=1).squeeze() print(sentence_embedding.shape) # 应该返回(hidden_dim,) ``` 以上脚本演示了怎样计算一段话的整体表达形式. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云日松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值