NLP(1):Introduction

news2024/11/29 22:46:06

文章目录

  • 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

在这里插入图片描述

  • word token 和 word type 不同,word token 可以重复,句子中的每个 word 都可以看做一个 token;而 word type 则是只关注不同的 word
    在这里插入图片描述
  • 在任何一种语言中, word tokens 的数量都远大于 word type

Processing steps

在这里插入图片描述

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通常会和其他方法一起使用,例如可以将其作为更复杂的机器学习模型的一部分,或者将其用于生成候选结果,然后使用其他方法进行打分和选择。
在这里插入图片描述

Subword Tokenization (BPE)

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

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

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

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

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

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

BPE 算法

在这里插入图片描述

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

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

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

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

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

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

BPE算法的主要优点是:

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

Word Normalization

在这里插入图片描述

词汇规范化(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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/626102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据分析第17课seaborn绘图

关系型绘图 seaborn.relplot() 这个函数功能非常强大,可以用来表示多个变量之间的关联关系。默认情况下是绘制散点图(散点图是看到变量与变量之间相关性最优的一个图形),也可以绘制线性图,具体绘制什么图形是通过kind参数来决定的。实际上以下两个函数就是relplot的特例…

Vue2 事件的默认和传播行为、事件修饰符

前言 在学习vue2时,学到了 事件修饰符,但是对事件的默认行为和传播行为不太理解,所以也就是不知道为啥要使用事件修饰符,所以找了一些资料,在此记录一下。 Vue2官方文档 事件处理 — Vue.js (vuejs.org)https://v2.…

【 Python 全栈开发 - WEB开发篇 - 29 】MySQL初步

文章目录 一、MySQL介绍二、SQL语言三、MySQL安装与配置第一步:下载压缩文件第二步:解压第三步:配置第四步:登录 一、MySQL介绍 MySQL 是一个开源的关系型数据库管理系统,它使用 Structured Query Language&#xff0…

JDBC的增删改查

文章目录 前言创建数据库基础版JDBC实例添加JDBC实例删除JDBC实例修改JDBC实例查询 高级版JDBC实例添加JDBC实例删除JDBC实例修改JDBC实例查询 前言 JDBC编程步骤: 加载数据库驱动程序创建数据库连接对象创建Statement语句对象(createStatement、prepa…

谈谈聚簇索引与非聚簇索引

技术主题 聚簇索引是一种数据的存储方式,它的数据行只存放在索引(B+树)的叶子上,内部节点不存放数据。 聚簇索引 聚簇索引默认是主键,如果没有定义主键,innodb会选择一个唯一的非空索引代替。如果没有这种索引,innodb会隐式定义一个主键作为聚簇索引。 非聚簇索引 非…

百度出品,Nature重磅 -- 优化的mRNA设计算法可改善mRNA的稳定性和免疫原性

摘要 尽管mRNA疫苗已用于COVID-19的预防,但仍然面临不稳定和易降解的风险,这是mRNA疫苗存储、配送、效价等面临的重要障碍。先前的研究已表明,增加二级结构可延长mRNA的半衰期,再加上选择优化的密码子,可改善蛋白表达。…

Django实现接口自动化平台(五)httprunner(2.x)基本使用【持续更新中】

上一章: Django实现接口自动化平台(四)解决跨域问题【持续更新中】_做测试的喵酱的博客-CSDN博客 下一章: 一、参考地址: 使用说明_httprunner2.0 概述及使用说明 二、介绍 HttpRunner是一款面向 HTTP(S) 协议的通…

一文带你了解MySQL之锁

目录 一、解决并发事务带来问题的两种基本方式1.1 一致性读(Consistent Reads)1.2 锁定读(Locking Reads)1.2.1 共享锁和独占锁1.2.2 锁定读的语句 1.3 写操作 二、多粒度锁三、MySQL中的行锁和表锁3.1 其他存储引擎中的锁3.2 Inn…

高通KMD框架详解

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、概览二、核心模块解析三、模块初始化四、处理UMD CSL请求 一、概览 利用了V4L2可扩展这一特性,高通在相机驱动部分实现了自有的一套KMD…

未来3年,请善待你的工作

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) “如果不是现在环境差,下家不好找,我早TM跟那个傻X老板翻桌子走人了,这破公司我真是一天都不想待…”这是一位粉丝朋友给K哥私信中的一段话。类似同款的话&#xff…

百度推出基于大模型的代码编写助手“Comate”真的好用吗?

‍ 点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID|计算机视觉研究院 学习群|扫码在主页获取加入方式 计算机视觉研究院专栏 Column of Computer Vision Institute 6月6日,在文心大模型技术交流会(成都&…

从业务出发,K8S环境自建和非自建整体架构设计比较

新钛云服已累计为您分享751篇技术干货 随着数字化转型的大潮到来,越来越多的企业开始上云,同时也纷纷加入到微服务和K8S队伍中。但在K8S整体环境究竟应该用自建的还是非自建?以及他们需要用到的服务,究竟应该自建还是直接用PAAS服…

02.加载GDT表,进入保护模式

加载GDT表,进入保护模式 加载GDT表,实现操作系统从实模式进入保护模式 参考 操作系统学习 — 启动操作系统:进入保护模式 保护模式与实模式 GDT、GDTR、LDT、LDTR 调用门与特权级 趣谈 Linux 操作系统 在01.硬盘启动盘,加载操作系…

要能力、要稳定也要降本——百度多媒体技术回顾

摘要:多媒体技术生态进入到存量市场,客户既要又要还要成为常态。如何将能力、质量与稳定性、成本不断优化,就是各个多媒体技术平台的必修课。本文以百度智能视频云为例,纵览了其在RTC、边缘计算、视频编码等关键能力与用户体验和成…

腾讯搜索的系统架构是如何达到99.994%高可用的?

👉腾小云导读 本文主要是搜索在稳定性治理实践的经验总结,讲述了搜狗搜索在技术债治理基础上如何将可用性提升一个量级,事故级 MTTD(平均故障检测时间)、MTTR(平均响应时间)优化一个量级&#x…

chatgpt赋能python:Python的IDLE运行方式

Python的IDLE运行方式 Python是一种非常流行的编程语言,其优雅简洁的语法和丰富的库资源,使得Python在很多领域都得到广泛应用。在Python的开发过程中,IDLE是一种常用的Python集成开发环境(IDE),对于初学者…

关于操作系统调度器的三篇论文

【引子】没有忘记,目前从事的是DingOS 操作系统相关工作,没有因为LLM 而迷失。LLM 会成为基础设施,LLM 会为操作系统赋能,但是操作系统的价值是客观存在的,除非,计算机体系结构发生了翻天覆地的变化。 在任…

Java面试都只是背答案吗

Java 八股文面试当然要背,不背很难通过面试的 Java基础 Java基础面试题 Java的特点Java 与 C 的区别JDK/JRE/JVM三者的关系Java程序是编译执行还是解释执行?面向对象和面向过程的区别?面向对象有哪些特性?数组到底是不是对象&a…

编写Python程序求数组中最长的字符串

点击上方“Python爬虫与数据挖掘”,进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 移船相近邀相见,添酒回灯重开宴。 大家好,我是皮皮。 一、前言 前几天在Python白银群【王子】问了一个Python基础的问题&#x…

Ubuntu离线安装docker与nvidia-docker

Ubuntu离线安装docker与nvidia-docker 安装 docker 20.10.17安装 nvidia-docker 和 nvidia-container-toolkit docker与nvidia-docker离线安装包 安装 docker 20.10.17 查看Ubuntu操作系统版本的详细信息,不同的版本所依赖的deb不同。 lsb_release -aCodename为&a…