NLP 文本清理

2024年9月19日 | 阅读 14 分钟

文本清理在 NLP 中的重要性

文本清理是自然语言处理 (NLP) 流水线中的一个重要步骤。当从文章、社交媒体或文档等不同来源收集时,原始数据集通常包含噪声、不一致和无关信息。由于 NLP 模型需要流畅、结构化和有意义的文本才能准确执行,因此这些原始数据不适合直接分析。清理文本有助于降低数据复杂性,确保模型不会将噪声误认为是重要信息,从而避免预测或分析错误。适当的文本清理可以提高文本质量,从而提高情感分析、机器翻译和信息检索等 NLP 项目的性能。

常用文本清理方法总结

文本清理中使用了许多技术来准备和组织数据以供分析。以下是一些常用方法:

  • 分词 (Tokenization): 将文本分解为词元或单词。这使得更轻松地详细分析文本。
  • 转小写 (Lowercase): 将句子中的所有字符转换为小写,以确保一致性并减少重复。
  • 去除标点符号 (Taking Out Punctuation): 删除标点符号,这些符号通常与文本内容分析无关。
  • 去除停用词 (Removal of Stopwords): 从文本中删除意义有限的词,如“and”、“the”和“is”。
  • 词形还原和词干提取 (Lemmatization and Stemming): 将词语简化为其最基本的形式或词根,以帮助标准化相似的句子。
  • 处理数字和特殊字符 (Managing Numerical and Special Characters): 删除或替换对文本分析没有价值的特殊字符和数字。
  • 拼写纠正 (Correcting Spelling): 修复拼写错误,以提高文本的质量和一致性。

分词

解释和重要性

分词是将文本内容划分为称为词元的较小单元的过程,这些单元可以是单个词、短语或整个字符。由于它将未经处理的文本转换为算法可以快速处理和分析的格式,因此分词对于自然语言处理 (NLP) 至关重要。这一关键阶段有助于识别文本中的重要单元,为情感分析、文本内容分类和解析等后续过程打开了大门。正确的分词可确保文本被恰当地细分,这对于在整个分析过程中保持文本的含义和上下文至关重要。

各种分词技术

  • 词语分词 (Tokenization of Words): 此方法将文本内容划分为词语。它是 NLP 活动中最常用的分词形式。
    例如,“Natural Language Processing is fascinating.”将被分解为 [“Natural”, “Language”, “Processing”, “is”, “fascinating”。]
  • 句子分词 (Tokenization of sentences): 此技术将内容划分为单独的句子。它适用于需要句子级分析的任务。
    例如:“NLP is endearing. It offers a wide range of applications.”将变为 [“NLP is endearing.”, “It offers a wide range of applications.”]
  • 子词分词 (Subword Tokenization): 使用此方法,句子被分解为更小的单元,如词缀或子词。它在形态学复杂的国家以及词典中不存在的单词上特别有效。
    例如,“Unhappiness”将被分解为 [“un”, “happiness”]
  • 字符分词 (Tokenization of characters): 使用此方法,文本内容被分解为单独的字符。虽然不那么普遍,但对于某些任务(如个体级别的语言建模)可能很有用。
    例如,“hello”将被分解为 [“h”, “e”, “l”, “l”, “o”]
  • 空格分词 (Tokenization of Whitespace): 这种简单的技术主要根据空格来分割文本。虽然它很方便,但它不能很好地处理标点符号或特殊字符。
    例如,“Hello world!”将变为 [“Hello”, “world!”]

分词工具

有多种工具和库可用于分词,每种工具都具有独特的功能。以下是一些广为人知的工具:

  • 自然语言工具包 (NLTK): 提供强大的词语和短语分词技术。nltk.
    例如,word_tokenize("Hello world!")
  • SpaCy: 以其出色的分词性能和准确性而闻名。
    例如,nlp = spacy.load("en_core_web_sm"); doc = nlp("Hello world!"); tokens = [token.text for token in doc];
  • TextBlob: 易于使用并与 NLTK 集成。
    例如,from textblob import TextBlob; blob = TextBlob("Hello world!"); tokens = blob.words
  • BERT Tokenizer: 用于对 BERT 模型进行文本分词,支持子词分词。
    例如,from transformers import BertTokenizer; tokenizer = BertTokenizer.from_pretrained('bert-base-uncased'); tokens = tokenizer.tokenize("Hello world!")
  • Gensim: 主要用于主题建模,但也提供分词功能。
    例如,from gensim.utils import simple_preprocess; tokens = simple_preprocess("Hello world!")

转换为小写

为何要将文本转换为小写?

在 NLP 中,将文本转换为小写是一种常见的预处理步骤,原因如下:

  • 一致性: 它确保了文本数据的一致性。通过将相同单词的不同大写形式(例如,“Apple”与“apple”)视为同一个词,从而减少了冗余和复杂性。
  • 词汇量减小: 通过将不同大写形式的单词视为相同,词汇量减小。这种简化有助于构建更高效、更快速的模型。
  • 改进模型性能: 在许多 NLP 任务中,将文本转换为小写可以提高模型性能,避免不重要的大小写差异。例如,在情感分析中,“Great”和“great”很可能传达相同的情感,应该被同等对待。
  • 一致性: 将文本转换为小写可确保文本数据的一致性。不一致的大写可能源于用户输入、不同的文本来源或格式错误。统一的大小写处理使数据更干净、更可靠,便于分析。
  • 简化处理: 它简化了各种文本处理任务,如分词和词干提取,否则这些任务可能会因大小写变化而变得复杂。

对文本数据的影响

  • 信息丢失: 在某些情况下,大小写本身包含有意义的信息。例如,专有名词(姓名、地点)和缩略语在转换为小写后可能会丢失其独特性。这种丢失可能会影响对这些差异至关重要的任务。
  • 减少噪声: 将文本转换为小写可以减少由于大小写差异引起的变异,在许多应用中,这些差异被视为噪声。这可以得到更干净的数据集,并通过将重点放在实际内容而不是格式变化来提高模型的准确性。
  • 简化特征空间: 特征空间(即,不同单词或词元的集合)得到简化。这对于神经网络等模型特别有益,因为大型且复杂的特征空间可能导致过拟合和更长的训练时间。
  • 对命名实体识别 (NER) 的影响: 在 NER 等任务中,转换为小写可能会降低性能,因为大写有助于识别专有名词。先进的 NER 模型通常使用区分大小写的文本或选择性地应用小写。
  • 词嵌入的一致性: 预训练的词嵌入(如 Word2Vec 或 GloVe)通常需要小写输入。统一的小写文本可确保与这些嵌入的兼容性,并避免因大小写差异而导致的匹配错误。

标点符号在文本数据中的作用

标点符号在文本数据中起着多种作用:

  • 句子结构和含义: 标点符号有助于界定句子边界并阐明句子的含义。逗号、句号和其他符号引导读者理解文本的结构和流畅性。
  • 消歧: 标点符号可以消歧。例如,“Let's eat, Grandma”与“Let's eat Grandma”由于逗号的存在而具有完全不同的含义。
  • 强调和语气: 感叹号和问号等符号传达强调、语气和情感。它们可以表示兴奋、惊讶或疑问,这对于理解情感和上下文至关重要。
  • 缩略语和首字母缩略词: 标点符号出现在许多缩略语和首字母缩略词中(例如,U.S.A.、e.g.、i.e.)。粗心地删除标点符号可能会改变或隐藏这些文档。
  • 数字和 URL 分隔符: 在技术写作中,标点符号用于分隔大数字中的数字(如一百万)和文件路径或 URL 附加项(如 https://example.com)。

去除标点符号的技术

  • 使用字符串方法手动删除: 手动删除包括使用编程语言提供的基本字符串操作技术。例如,Python 的 str.translate() 和 str.maketrans() 方法用于从文本中删除标点符号。
    原理:通过创建一个将每个标点符号映射到 None 的翻译表,我们可以有效地从文本中去除标点符号。此技术对于简单的文本预处理任务既简单又有效。
  • 正则表达式 (Regex): 正则表达式是用于在字符串中匹配字符组合的模式。它们在文本处理方面非常灵活且功能强大。
    原理:可以定义一个正则表达式模式来匹配除单词字符或空格之外的任何字符。通过将这些匹配项替换为空字符串,可以删除标点符号。正则表达式允许对要删除的字符进行精确控制,并且可以处理复杂的文本模式。
  • 分词后过滤: 分词是将文本分割成更小单元(如单词或词语)的过程。分词后,可以过滤掉仅包含标点符号的词元。
    原理:分词将文本分解为潜在的单元。然后可以检查每个词元,并删除被识别为标点符号的词元。此技术利用分词的优势,确保在过滤标点符号的同时保留重要的文本单元。
  • 文本清理库: SpaCy 和 TextBlob 等库提供了完整的文本处理流水线,其中包括标点符号删除作为众多预处理步骤之一。
    原理:这些库使用先进的 NLP 技术来预处理文本数据。例如,SpaCy 使用词元属性来识别和排除标点符号词元。通过利用这些库,复杂的文本清理任务得到了简化,开发人员可以利用针对性能和准确性进行了优化的预建功能。
  • 自定义函数: 自定义函数允许根据特定需求进行定制的文本处理。可以设计这些函数以根据上下文的要求删除或保留特定的标点符号。
    原理:通过迭代文本中的每个字符并检查它是否属于预定义的标点符号集,自定义函数提供了对文本清理的精细控制。这种方法非常灵活,并且可以进行微调以解决边缘情况和特定要求。
  • 使用预处理流水线: Gensim 库提供的预处理流水线等将多个文本清理步骤结合到一个连贯的系统中。
    原理:预处理流水线旨在以标准化的方式处理一系列文本清理操作,包括标点符号删除。通过将标点符号删除整合到更广泛的流水线中,可以实现文本预处理的一致性和效率。这些流水线在准备机器学习模型的文本数据方面特别有用,可确保应用所有必要的预处理步骤。

停用词移除

什么是停用词?

停用词是常见的词语,在文本分析和 NLP 任务的上下文中通常携带的信息量很小。在预处理过程中,通常会过滤掉这些词语,以提高 NLP 模型的性能。停用词的例子包括“and”、“the”、“is”、“in”、“at”和“of”。

特性

  • 高频:它们在文本中频繁出现。
  • 低语义价值:它们对文本的含义贡献不大。

移除停用词的重要性

  • 减少噪声:停用词会给文本数据增加噪声,使得识别重要模式和特征更加困难。移除它们有助于清理文本并专注于更重要的词语。
  • 提高模型效率:通过移除停用词,文本数据的维度降低。这导致更小的特征空间,从而使 NLP 模型能够进行更快、更高效的处理。
  • 提高精度:移除停用词可以通过降低非信息性词语的重要性来提高模型性能。这有可能提高主题建模、情感分析和文本分类等任务的准确性。
  • 资源优化:减少的处理词元需要更少的处理能力和内存消耗。这对于处理大型数据集非常有帮助。
  • 关注内容词:形容词、副词、动词和其他内容词通常对于理解文本的实质内容更具指示性。移除停用词可以让模型专注于这些更重要的词语。

常用停用词列表

NLTK(自然语言工具包)的停用词列表

  • 概述: NLTK 为多种语言提供了一个全面的停用词集合。它在学术和专业环境中广泛用于各种 NLP 需求。
  • 特征:该列表包含连词、冠词、介词和其他常用词。
  • 示例:这些词包括“the”、“was”、“in”、“as”、“to”等等。
  • 用法: NLTK 停用词列表广泛用于文本分类、情感分析和信息检索等任务。

SpaCy 停用词列表

  • 概述:流行的 NLP 库 SpaCy 包含多种语言的内置停用词列表。
  • 特征: SpaCy 的停用词列表经过定制,可以与它强大的 NLP 流水线配合使用,使其成为复杂 NLP 应用的绝佳工具。
  • 其中包含“a”、“an”、“the”、“of”和“to”。由于它由常用词组成,因此与 NLTK 相似。
  • 用法:命名实体识别、依存关系解析和文本分类等各种语言处理应用程序都使用 SpaCy 的停用词列表。

Gensim 停用词列表

  • 概述: Gensim 有自己的停用词集,通常用于文档相似性分析和主题建模。
  • 特征: Gensim 的停用词列表特别适合于从大量文本数据中建模和提取主题的任务。
  • 示例:包含常用的停用词,如“the”、“as”、“for”、“on”和“in”。
  • 用法:主题建模、文档聚类和潜在语义分析都广泛使用 Gensim 的停用词列表。

自定义停用词列表

  • 概述:为了适应特定的应用程序或领域,会创建自定义停用词序列。它们还可能包含行业特定术语或在上下文中无意义的常用短语。
  • 特征:针对特定数据集或领域进行调整,确保删除所有不必要的词语,同时保留重要的词语。
  • 示例:在临床文本分析中,如果“Influencer”、“Doctor”和“Hospital”等词语对特定研究不再有价值,则很可能应将其视为停用词。
  • 用法:定制的停用词列表对于领域特定应用至关重要,例如专业行业分析、科学文本挖掘和法律文件评估。

使用词形还原和词干提取

词形还原和词干提取之间的区别

词形还原和词干提取是两种将词语分解为其最基本或词根形式的方法,但它们在执行方式和结果方面有所不同。

词干提取

  • 定义:将词语还原为其基本或词根形式的过程称为词干提取。它通常会产生一个不是完整单词的缩写。
  • 方法:它使用简单的启发式规则,例如删除常用的后缀,如“ing”、“ly”、“es”以及“s”。有可能将“running”、“walking”和“run”压缩成一个词。

词形还原

  • 词形还原被定义为将词语压缩为其词典或基本形式的最常用方法。它考虑了词语形态学的研究。
  • 方法:它通过使用形态分析和词典来删除屈折词尾并返回单词的词典或基本形式。
  • 示例:“better”可以还原为“good”,“walking”、“runner”和“ran”都可以还原为“run”。

流行的词形还原和词干提取算法

词干提取算法

1. Porter Stemmer

  • 描述:最常用的词干提取算法之一。由 Martin Porter 于 1980 年开发。
  • 方法:应用一系列规则迭代地从词语中删除后缀。
  • 示例:“running”→“run”,“happiness”→“happi”。

2. Snowball Stemmer (Porter's 2 Algorithm)

  • 概述:对原始 Porter Stemmer 的改进,同样由 Martin Porter 开发。
  • 方法:提供一组更一致、更全面的规则。
  • 示例:结果与 Porter 类似,但处理更稳定。

3. Lancaster Stemmer

  • 概述:与 Porter 相比,一种更具侵略性的词干提取算法。
  • 方法:应用一组广泛的规则进行词干提取。
  • 示例:“running”→“run”,“happiness”→“happy”。

词形还原算法

WordNet Lemmatizer

  • 概述:使用 WordNet 词汇数据库查找词语的词元。
  • 方法:需要词性 (POS) 标签来正确确定词元。
  • 示例:“walking”(动词)→“walk”,“better”(形容词)→“good”。

SpaCy Lemmatizer

  • 概述:集成到 SpaCy NLP 库中的强大词形还原工具。
  • 方法:使用基于规则和基于词典的方法的组合。
  • 示例:“walking”(动词)→“walk”,“better”(形容词)→“good”。

Stanford Lemmatizer

  • 概述:作为 Stanford NLP 套件的一部分,使用复杂的算法进行词形还原。
  • 方法:需要 POS 标记才能进行准确的词形还原。
  • 示例:“walking”(动词)→“walk”,“better”(形容词)→“good”。

每种方法的优缺点

词干提取

优点

速度:由于它使用简单的启发式规则,因此速度更快。

简便性:易于理解和实现。

缺点

准确性:准确性较低,因为它可能生成不存在的单词。

过度词干提取:可能会删除不必要的字母,使文本无意义。

词干提取不足:需要进一步缩短的词可能无法删除足够的字母。

词形还原

优点

由于它生成有效的词语,因此准确性更高。理解上下文和词语的词性被称为上下文感知。

缺点

速度:由于需要形态分析和词典使用,速度较慢。

复杂性:需要更多资源,实现起来更复杂(例如,POS 标记)。

文本清理的未来方向和高级方法

使用机器学习进行文本清理

传统的文本内容清理方法通常依赖于基于规则的方法来执行分词、停用词移除和词干提取等任务。另一方面,近期机器学习 (ML) 的发展使得先进的文本清理技术成为可能。这些技术利用机器学习的力量,可以进行更智能的、上下文感知的自适应清理操作。

使用监督学习进行文本规范化

  • 概述:通过训练监督学习算法,可以识别和更正文本规范化问题,如拼写错误、俚语和缩略语。
  • 技术:可以使用 Transformer、条件随机场 (CRF) 和序列到序列模型等模型来预测单词或短语的规范化形式。
  • 示例:使用一组正确和错误拼写的单词的数据集,模型可以学习根据上下文预测正确的拼写。

无监督文本清理学习

  • 概述:可以使用无监督学习技术(如主题建模和聚类)来分析文本数据,以识别可用于清理文本的模式和异常。
  • 方法:可以使用 K-means 聚类、潜在狄利克雷分配 (LDA) 和句子嵌入等算法来识别相似的短语并发现异常值。
  • 例如,将相关的词语分组在一起有助于识别和解决跨多个文档的术语冲突。

深度学习方法

  • 概述:深度学习模型,主要是神经网络,能够学习文本数据中的复杂模式,这使它们能够胜任更复杂的文本清理任务。
  • 技术:可以使用循环神经网络 (RNN) 模型、长短期记忆 (LSTM) 网络和基于 Transformer 的模型(例如 BERT、GPT)来执行上下文单词替换、拼写更正和文本规范化等任务。
  • 示例:可以使用数据集对 Transformer 模型进行微调,以评估句子的上下文并提供语法或不一致的更正。

新兴趋势和研究方向

自然语言处理 (NLP) 文本清理领域正在由于一些新兴趋势和研究方向而不断发展。

上下文感知的情感分析

  • 趋势:从简单的基于规则的文本清理转向对语言细微之处敏感的上下文感知过程。
  • 研究:开发可以根据文本的上下文动态调整其清理方法的模型,以提高准确性并保持含义。

对抗性文本清理

  • 趋势:应对垃圾邮件、虚假评论和社交媒体帖子等恶意文本带来的挑战,这些文本故意混淆信息。
  • 研究:使用对抗性训练方法来增强模型抵御恶意尝试以欺骗 NLP 系统的能力。

多语言文本清理

  • 趋势:扩大文本清理方法的范围,以适应多种语言和方言,特别是对于全球应用程序。
  • 研究:开发多语言模型,它们可以在跨不同语言规范化和清理文本数据的同时,保持语言和文化细微之处。

可解释的文本清理

  • 趋势:使文本清理过程透明化和易于理解。
  • 研究:开发可解释的 AI 技术,提供对模型所做清理决策的见解,从而提高在关键应用程序中的采用和可用性。

与下游 NLP 任务的整合

  • 趋势:将信息检索、情感分析和机器翻译等下游 NLP 任务与文本清理无缝集成。
  • 研究:建立集成的流水线,其中文本清理是提高整体性能和效率的关键预处理步骤。