数据预处理是自然语言处理(NLP)任务中至关重要的一步,它直接影响到模型训练的效果和最终结果的质量。预处理步骤的目的是将原始文本转换成一种更易于计算机理解和处理的格式。以下是数据预处理中常见的几个步骤:
-
文本清洗:
移除无关内容(如HTML标签)、标点符号、数字等,或者将它们转换成有意义的代替文本。- 去除噪声:移除文本中的无关信息,如HTML标签、非文本内容(图片链接、JavaScript代码等)、格式符号等。
- 规范化文本:将文本统一为标准格式,例如,将所有字母转换为小写(或大写),以减少词汇的变体数量。
- 去除特殊字符和标点:根据任务需求,移除或替换文本中的特殊字符和标点符号,有时标点可以保留,因为它可能含有语义信息。
-
分词 (Tokenization):
- 词级分词:将句子分割成单词或词汇单元,如短语。这是英文等西方语言中最常见的分词方式。
- 子词级分词:将单词进一步分割成更小的单位(如词根、词缀)。这对于处理一些复合词或未见过的词特别有用。
- 字符级分词:将文本分割成字符。这种方法对于某些任务或语言(如中文)可能更合适。
-
停用词去除:
- 停用词是指在文本中频繁出现但对于理解文本意义贡献不大的词,如“的”、“是”、“在”等。去除这些词可以帮助减少数据噪声和特征维度。
-
词干提取 (Stemming) 和词形还原 (Lemmatization):
- 词干提取:通过去除词缀来将词汇还原到基本形式(可能不是真正的词)。例如,“running”、“runs”词干提取后都变为“run”。
- 词形还原:将词汇还原到其词典形式(lemma),考虑了词汇的词性。比如,“better”的词形还原结果是“good”。
-
数据增强:
- 通过词替换、句子重排等方法人为增加训练数据的多样性,有助于改善模型的泛化能力。
-
向量化 (Vectorization):
- 构建词汇表:统计词频,小于某个词频的词将不会被加入词汇表
- Token 编码:在构建了词汇表之后,每个唯一的token都会被分配一个唯一的数字ID。向量化的这一阶段涉及将文本中的每个token替换成对应的数字ID。这个过程实际上是一种编码,将文本数据转换为模型可以处理的数值形式。
- 句子/文本向量化(tokenize):完成token的数字编码后,整个句子或文本片段可以表示为一个数字序列。
- 序列填充 (Padding) 和截断:对于需要固定长度输入的模型(如很多深度学习模型),需要通过填充(通常用0或特殊标记
<PAD>
)或截断来使所有文本序列长度一致。 - 词袋模型 (Bag of Words, BoW):将文本转换为词频向量,但这种方法不考虑词序和上下文。
- TF-IDF (Term Frequency-Inverse Document Frequency):一种加权的词袋模型,考虑了词在文档集中的稀有程度。
- 词嵌入 (Word Embeddings):将词汇token映射到连续的向量空间中,这些向量捕获了词汇之间的语义关系。常见的词嵌入模型包括Word2Vec、GloVe和BERT等。
分词工具
中文:jieba,hanlp
英文:keria,spacy,nltk
每个步骤的具体实现和必要性可能会根据具体的任务和语言而有所不同。例如,对于某些任务,保留标点符号可能是有意义的,因为它们可以携带情感或语法信息。而对于一些语言(如中文、日文),分词步骤会比英文复杂得多,可能需要特定的算法和词库。预处理的目的是清洗和转换数据,以提高模型训练的效率和效果。