NLP(1):Introduction

文章目录

  • Why process text
  • Challenges
  • Text processing
    • word, sentence, document, corpus, token
    • Processing steps
      • Sentence segmentation
      • Word Tokenization
        • MaxMatch Algorithm
        • Subword Tokenization (BPE)
          • BPE 算法
      • Word Normalization
      • Stop Words Remove

Why process text

以下是进行文本处理的一些主要原因:

  • 结构化数据: 文本数据通常以非结构化的形式出现,这意味着它们不能直接用于大多数的机器学习模型。通过文本处理,我们可以将非结构化的文本转换为结构化的形式,例如词袋模型、词嵌入等。

  • 信息提取: 文本数据中包含了大量的有价值的信息,如关键词、实体、主题、情感等。通过文本处理,我们可以从文本中提取这些信息,从而更好地理解文本的内容。

  • 噪声去除: 文本数据通常包含了大量的噪声,如标点符号、停用词、语法错误等。通过文本处理,我们可以去除这些噪声,使得文本数据更加清晰。

  • 特征工程: 在机器学习中,特征工程是一个重要的步骤,它可以大大提高模型的性能。文本处理提供了一种有效的方法来进行特征工程,如n-gram特征、TF-IDF特征等。

  • 语义理解: 文本处理还可以帮助我们理解文本的语义,这对于许多任务是非常重要的,如情感分析、文本摘要、聊天机器人等。

Challenges

NLP具有很高的复杂性,主要面临以下挑战:

  • **歧义性:**人类语言天生具有高度的歧义性,同样的词或短语在不同的上下文中可能具有不同的含义。例如,“苹果”既可以表示一种水果,也可以表示一家科技公司。这种歧义性使得理解语言的真实意图成为了一项非常复杂的任务。

  • 语言的多样性: 世界上存在着数千种语言,每一种语言都有其独特的语法、词汇和语义规则。即使是同一种语言,也可能存在着多种方言和口音。这使得为每一种语言开发特定的NLP系统成为了一项非常大的挑战。

  • 上下文理解: 理解语言通常需要对上下文有深入的理解。这包括了理解前后文,理解文本的背景知识,甚至理解说话者的意图和感情。这种上下文理解对于人类来说可能是直观的,但对于机器来说却是非常困难的。

  • 语言的变化: 语言是一种动态的现象,随着时间和社会的变化,新的词汇、短语和语法规则会不断出现。这使得NLP系统需要不断地学习和适应语言的变化。

  • 缺乏标注数据: 许多NLP任务(如情感分析、命名实体识别等)需要大量的标注数据来训练模型。然而,收集这些标注数据通常是非常耗时和昂贵的,这使得许多NLP任务变得非常困难。

  • 讽刺和细微的情感: 人类语言中充满了讽刺、暗示和细微的情感变化,这些往往是机器很难捕捉和理解的。

Text processing

word, sentence, document, corpus, token

NLP(1):Introduction_第1张图片

  • word token 和 word type 不同,word token 可以重复,句子中的每个 word 都可以看做一个 token;而 word type 则是只关注不同的 word
    NLP(1):Introduction_第2张图片
  • 在任何一种语言中, word tokens 的数量都远大于 word type

Processing steps

NLP(1):Introduction_第3张图片

Sentence segmentation

下面是常见的几种句子分割方法:

  • 基于规则的分割:这是最简单和最直观的方法,它主要通过检查句子的结束标志(如句号、问号、感叹号)来进行分割。虽然这种方法在许多情况下都能工作得很好,但它可能无法处理那些具有复杂结构或包含缩略语、引号等元素的文本。

  • 基于机器学习的分割:这种方法使用机器学习算法(如决策树、支持向量机、隐马尔可夫模型等)来进行句子分割。首先,我们需要准备一个带有标注的句子分割数据集,然后用这个数据集来训练模型。这种方法通常能得到比基于规则的方法更好的结果,但它需要大量的标注数据,并且训练过程可能会比较耗时。

  • 基于深度学习的分割:近年来,深度学习在NLP中得到了广泛的应用,其中也包括句子分割。深度学习模型(如RNN、LSTM、Transformer等)能够处理长距离的依赖关系,并自动学习出复杂的句子结构。这使得它们在句子分割任务上通常能得到最好的结果。但是,深度学习模型的训练需要大量的计算资源,并且需要调整的参数也比较多。

  • 预训练模型:如 BERT, GPT-3, RoBERTa 等预训练模型也可以用于句子分割。这些模型在大规模的无标注文本上进行预训练,从而学习出丰富的语义和语法信息。然后,它们可以通过一个简单的微调过程被应用到句子分割任务上。这种方法通常能得到最好的结果,但它的计算成本是最高的。

Word Tokenization

以下是几种常见的词汇化方法:

  • 空格分隔: 这是最简单的方法,它将文本按照空格划分。这种方法在许多情况下都有效,但它无法处理复杂的情况,比如"New York"或者"rock’n’roll"。

  • 基于规则的方法: 这种方法使用预定义的规则或模式来进行分词。例如,可以使用正则表达式来捕获特定的词汇结构,或者使用自定义的规则来处理特定的情况(如缩略词、电子邮件地址等)。

  • 统计方法: 这种方法使用统计模型来预测哪些字符应该被分割。一个典型的例子是最大匹配法(Maximum Matching Method),它尝试找出最长的能在词汇表中找到的词汇。

  • 基于机器学习的方法: 这种方法使用机器学习模型来进行分词。首先,需要收集一个带有分词注释的语料库,然后使用这个语料库来训练模型。这种方法可以处理更复杂的情况,并且可以自动学习和适应语言的变化。

  • 字节对编码(Byte Pair Encoding, BPE)和其变体(如SentencePiece): 这种方法是为了更好地处理未知词汇或稀有词汇,它会将常见的字符序列合并为一个单独的令牌。这种方法已经被广泛用于许多现代的 NLP 模型中,如 BERT 和 GPT-3。

MaxMatch Algorithm

MaxMatch是一种基于贪心策略的词汇化算法,主要用于分词,特别是对于亚洲语言如中文、日语、韩语等,由于这些语言在写作时并不总是使用空格来分隔单词。然而,其同样可以用于处理英文等其他语言。

以下是MaxMatch算法的基本步骤:

  • 建立词典:首先需要一个预先定义的词典,包含了所有可能的单词。在实际应用中,这个词典可能非常大,包含数十万甚至上百万个词汇。

  • 从左到右扫描:算法开始于句子的最左边,尝试找到最长的匹配单词。如果找到了,就把这个单词作为一个 token,然后从当前位置开始继续处理剩下的部分。如果没有找到,就把当前的字符作为一个单独的令牌,然后继续处理剩下的部分。

  • 重复直到完成:这个过程一直持续到整个句子都被处理完。

虽然MaxMatch算法相对简单,并且在许多情况下都能工作得很好,但是它也有一些局限性。例如,如果 词典不完整或者存在歧义 ,MaxMatch可能无法得到正确的结果。此外,由于它是基于贪心策略的,所以可能无法找到全局最优的分词结果。 因此,在实践中,MaxMatch通常会和其他方法一起使用,例如可以将其作为更复杂的机器学习模型的一部分,或者将其用于生成候选结果,然后使用其他方法进行打分和选择。
NLP(1):Introduction_第4张图片

Subword Tokenization (BPE)

NLP(1):Introduction_第5张图片
子词分词(Subword Tokenization)是一种处理文本数据的方法,它将单词进一步分割为更小的部分,或称为子词。这种方法在处理未知单词、专有名词、新颖单词、复合词、以及非结构化文本(如社交媒体帖子)等场景时特别有用。

以下是常见的子词分词方法:

  • 字节对编码(Byte Pair Encoding,BPE): BPE 是一种用于自然语言处理的子词分词算法。它首先将文本分解为字符,然后通过迭代地将最常见的字符对合并为单个符号来创建一个更大的词汇表。

  • Unigram Language Model Tokenization:这种方法使用一个概率语言模型来确定可能的子词分割方式。具体地,它将尝试找到最大化整体文本概率的分割方式。

  • SentencePiece:SentencePiece 是一个用于神经网络文本生成任务的文本处理库,它支持 BPE 和 Unigram 语言模型分词。它是在单词级别上下文无关的,这意味着它不需要预训练的语言模型或词汇表,因此可以很容易地用于任何语言的文本。

子词分词可以更好地处理语料库中未见过的单词(OOV,Out-of-Vocabulary)问题,因为即使一个单词在训练集中未出现过,模型也可以通过它的子词来理解它。此外,子词分词也可以有效处理非结构化和不规则的文本,这在许多现实世界的应用中是非常重要的。

BPE 算法

NLP(1):Introduction_第6张图片

以下是BPE算法的基本步骤和原理:

  • 建立初始词汇表: BPE首先会建立一个基本的词汇表,通常这个词汇表包含了所有的字符或者字节。每个单词都是由这些字符或字节构成的。

  • 统计字符对频率: 然后,BPE会遍历所有的单词,统计每个连续的字符对(即两个字符组成的序列)出现的频率。

  • 合并最常见的字符对: BPE接着会找到最常见的字符对,然后将其合并为一个新的字符。这个新的字符会被添加到词汇表中。

  • 重复合并过程: 以上面的步骤会重复执行多次。在每一次迭代中,BPE都会找到当前最常见的字符对,然后将其合并。重复这个过程的次数是一个超参数,需要根据具体的任务来设定。

  • 结束和使用词汇表: 当达到设定的迭代次数后,BPE算法就会结束。此时,我们就得到了一个包含了许多子词单元的词汇表。在之后的文本处理中,我们可以用这个词汇表来将单词切分为子词单元。

BPE算法的主要优点是:

  • 它可以将未在词汇表中见过的单词分割为在词汇表中的子词单元。这使得模型能够处理和理解未在训练集中见过的单词。
  • 此外,由于BPE算法是无损的,所以原始的单词可以通过简单地将其子词单元拼接在一起来完全恢复。
    NLP(1):Introduction_第7张图片

Word Normalization

NLP(1):Introduction_第8张图片

词汇规范化(Word Normalization)是自然语言处理(NLP)中的一个重要步骤,它主要用来处理文本数据中的变化形式。在许多NLP任务中,不同形式的同一词(如大小写变化,不同的词形变化等)通常会被视为同一词。以下是一些常用的词汇规范化方法:

  • 大小写转换(Case Normalization): 这是最常见的规范化形式,通常将所有的文本转换为小写。这是因为在许多情况下,单词的大小写并不影响其含义(如 “apple” 和 “Apple” 通常被视为同一词),而且这也能帮助减小词汇表的大小。

  • 词形还原(Lemmatization): 词形还原是将词汇转化为其基本形式(或词元)的过程。例如,“cars” 的词元是 “car”,“better” 的词元是 “good”。这通常需要利用词典和词形分析。

  • 词干提取(Stemming): 词干提取是尝试通过去掉词尾或者词缀来将词转化为其基本形式。与词形还原不同,词干提取可能不会产生实际的单词。例如,“running”经过词干提取可能会得到“run”。

  • 停用词删除(Stopword Removal): 停用词通常指在文本中频繁出现但是对于理解文本内容贡献不大的词,如 “the”、“is”、“at” 等。在一些NLP任务中,人们可能会选择删除这些词来减少处理的复杂性。

词汇规范化可以帮助统一不同形式的单词,减小词汇表的大小,从而提高NLP模型的性能。不过在进行词汇规范化时,需要注意保留原始文本的重要信息。例如,在一些情况下,单词的大小写可能是有意义的,如 “US”(指美国)和 “us”(指我们)。

在语言学中,形态学(Morphology)是研究词的内部结构和构词法的学科。它主要有两个子分支:屈折形态学(Inflectional Morphology)和派生形态学(Derivational Morphology)。

  • 屈折形态学(Inflectional Morphology): 屈折形态学研究的是如何通过添加屈折词缀(例如复数的“-s”,过去式的“-ed”)来改变词的语法功能,而不改变词的词性或基本含义。例如,通过添加“-s”,我们可以将名词从单数变为复数(如 “cat” 变为 “cats”)。通过添加“-ed”,我们可以将动词从现在时变为过去时(如 “walk” 变为 “walked”)。这些变化不会改变词的基本词性或含义。
  • 派生形态学(Derivational Morphology): 派生形态学研究的是如何通过添加派生词缀来创建新的词或改变词的词性。例如,通过添加“-ness”,我们可以将形容词变为名词(如 “happy” 变为 “happiness”)。通过添加“-ly”,我们可以将形容词变为副词(如 “quick” 变为 “quickly”)。这些变化可能会改变词的词性和含义。

Porter Stemmer 是一种非常流行的词干提取算法,由 Martin Porter 在 1980 年提出。它使用了一系列的规则来进行词干提取,这些规则都试图去除常见的英语词缀,如 “-ing”, “-ed”, “-ness” 等。
以下是一些 Porter Stemmer 的基本规则:

  • SSES -> SS (例如,processes -> process)
  • IES -> I (例如,ponies -> poni)
  • SS -> SS (例如,caress -> caress)
  • S -> (例如,cats -> cat)
    Porter Stemmer 具有 5 个阶段,每个阶段都包含一系列的规则。每个阶段的规则会按照从最长到最短的顺序应用,每个词只应用最长的匹配规则。这些规则通常会涉及判断词干的长度,以及是否包含特定的元音或辅音序列。
    值得注意的是,Porter Stemmer 可能不总是提供完美的结果。由于它主要依赖规则,而不是词典或者语言学知识,因此在某些情况下,它可能会产生不存在的单词,或者无法正确处理不规则变形。然而,由于它的效率和简单性,Porter Stemmer 仍然在许多场景中得到广泛的使用。

Stop Words Remove

NLP(1):Introduction_第9张图片

你可能感兴趣的:(机器学习与深度学习,自然语言处理,人工智能,机器学习)