AI学习笔记整理(36)——自然语言处理

NLP的全称是Natuarl Language Processing,中文意思是自然语言处理,是人工智能领域的一个重要方向。

自然语言处理(NLP)是一个涵盖人类语言全场景处理的技术领域,其范畴包括所有用于理解、分析、生成人类语言的模型与技术,小到简单的关键词提取,大到复杂的对话系统构建,均属于NLP的研究与应用范畴。而大型语言模型(LLM)则是NLP领域内的一类特定模型,是近年来NLP技术发展的重要成果之一。

NLP的任务类型,如下主要划分为了四大类:

  • 类别到序列
  • 序列到类别
  • 同步的序列到序列
  • 异步的序列到序列

其中"类别"可以理解为是标签或者分类,而"序列"可以理解为是一段文本或者一个数组。简单概况NLP的任务就是从一种数据类型转换成另一种数据类型的过程,这与绝大多数的机器学习模型相同或者类似,所以掌握了NLP的技术栈就等于掌握了机器学习的技术栈。

自然语言处理流程

参考链接:https://zhuanlan.zhihu.com/p/558937267

自然语言处理(NLP)的流程通常包括‌问题定义、数据获取、预处理、特征提取、模型训练、评估和部署‌等关键步骤。

问题定义 (Problem Define)

首先需明确NLP任务目标(如文本分类、机器翻译),并据此收集相关语料库。数据来源包括公开数据集(如维基百科)、网络爬虫抓取或业务数据。数据需与任务分布匹配,避免偏差。‌‌

数据获取与处理

1)数据获取与数据集

据获取工作可以说是在整个 Machine Learning 的过程中,最为核心的工作。

  • 首先我们要判断,当前是否有不够的数据,如果有充足的数据,那我们就可以直接进行机器学习的建模过程。
  • 如果没有充足的数据,则我们要向右走,看看是否有什么额外的数据。但是这里大家要注意,到底多少数据才叫充足,这个是没有一个确定的值的,并且在现实的工作中,往往我们并不具备获取充足数据的条件,比如说工期的限制、资源的限制、基础架构的限制等等。所以,在这里我们一定要建立一种意识,就是我们的数据要和算法模型协同的往前走,而不是追求一步就到最终点。
  • 额外数据往往是我们通过其他的渠道获取到的数据,由于自然语言数据相对来说是比较好获得的数据,我们可以从其他的网站上去进行抓取,补充进我们自己的数据中。但是,这里我们一定要选择好额外的数据,这些数据要尽可能的接近于我们想要解决任务的分布,或者说要接近我们"目标用户"所产生的的数据。
  • 当我们没有额外数据的补充,或者当我们补充了额外数据之后依然觉得不够,接下来我们就要考虑,使用一些生成的方法或者增强的方法,来生产新的数据了,这个我们也在后面详细的说。
  • 在上面我们说使用额外数据的时候,有一种经验的方法是我们经常使用的,就是如果我们所做的任务,之前有相关的学术的数据集的话,那我们就可以快速的使用学术数据来快速的验证我们的算法。这个过程可以大大的加快我们从需求产生到业务落地的速度,但是比较遗憾的是,目前学术界的数据实在太少,能和我们场景匹配的可能性相对比较少。下面也给大家提供一些寻找这些数据集的地方:
    • Google Dataset Search 谷歌出品的数据集搜索引擎
    • Paper with Code一个 benchmark 和对应代码寻找的地方,除了找数据集也可以找论文和代码看
    • Kaggle 比赛平台,上面有很多公司和网友贡献的数据集
    • Open Data on AWS 亚马逊的开放数据平台

2)数据抓取

从各种来源收集文本数据的过程,旨在获取大规模、多样化的文本数据,以支持后续的处理和分析。

‌常见的数据抓取方法包括网络爬虫、API接口和直接文本加载。‌ 网络爬虫通过自动化规则遍历网页抓取数据,适用于收集新闻、社交媒体内容等公开信息;API接口允许通过认证访问结构化数据,如从Twitter提取实时帖子;直接文本加载则依赖现有库或文件,但数据范围可能有限。‌

这些方法各有优劣,例如爬虫灵活性高但需处理动态内容,API数据质量较好但受频率限制。

‌数据抓取需重点关注数据质量、法律合规性和技术挑战。‌ 互联网数据常混杂噪声,需进行去噪和清洗以提升可用性;同时必须遵守robots.txt协议和版权法规,避免反爬虫机制;技术难点包括处理动态页面、防止IP封禁以及确保抓取效率。‌ 例如,使用Python的Requests库模拟浏览器行为可增强抓取稳定性。

‌抓取的数据需经过预处理才能用于NLP模型训练。‌ 预处理步骤包括清洗(如去除HTML标签)、分词、去重和标准化,以减少歧义并提高模型性能;高质量数据还能辅助信息抽取、情感分析等下游任务。‌ 例如,在舆情监控中,抓取的社交媒体数据经清洗后可用于趋势预测。

3)数据增强

这是一种利用语言相似性来生产新数据的技术。常见的策略包括:

  • 同义词替换 (synonym replacement)
  • 相关词替换 (based on association metrics)
  • 回译 (Back translation)
  • 替换实体 (Replacing entities)
  • 增加噪音 (e.g. spelling errors, random words)

4)数据标注

指为原始文本数据添加标签或注释的过程,将非结构化文本转化为机器学习模型可识别的结构化信息,是训练AI模型的基础环节。‌

在NLP中,数据标注的核心作用是提供训练样本,使模型能够学习语言特征和模式。‌ 例如,通过标注文本的情感倾向或实体类别,模型可以学会理解人类语言的含义和结构。‌常见的标注类型包括:

  • 分词与词性标注‌:将文本切分为词汇单元并标注其语法类别(如名词、动词),用于分析句子结构。‌
  • 命名实体识别(NER)‌:识别文本中的人名、地点、组织等特定实体并分类,支持信息抽取和知识图谱构建。
  • 情感分析‌:为文本打上情感标签(如积极、消极),帮助模型判断观点和态度。
  • 意图识别‌:标注用户文本背后的意图(如查询、预订),常用于对话系统和智能助手。
  • 语法分析与语义标注‌:涉及句子成分解析和语义角色标注,以捕捉深层语言含义。‌

‌高质量的数据标注直接影响NLP模型的性能,‌ 因为模型依赖这些 labeled samples 来建立输入与输出之间的映射关系。在监督学习范式下,未标注的原始文本无法直接用于训练,必须通过人工或半自动方法转化为结构化数据。‌随着大语言模型的发展,数据标注正向自动化和精细化方向演进,但人类标注者在处理歧义和细微语境方面仍发挥关键作用。‌

5)数据探索方法与工具

有了充足的数据,接下来要对数据进行探索和分析。在这个过程中,要对已有的数据有更加科学的了解。这个部分主要会做两件事情:

  • 使用统计学方法,统计数据中的统计指标
  • 使用可视化方法,绘制各种数据观测图

6)统计类数据探索

自然语言处理(NLP)与统计类数据探索的结合,正通过自然语言查询(NLQ)等技术,将数据分析从专业工具推向业务人员,实现"无门槛"探索。‌

自然语言查询的核心在于将用户口语化问题转化为结构化数据操作,其流程包括:

  • 语义识别‌:通过分词、词性标注和实体识别解析问题中的关键元素(如指标、维度、时间)。‌
  • 意图解析‌:结合上下文和业务规则确定查询逻辑(如"同比增长"需匹配同比计算规则)。
  • 数据映射与查询生成‌:将解析结果自动映射到数据模型字段,生成SQL等查询语句。‌
  • 报表呈现‌:动态生成可视化图表或统计报表。例如,用户输入"今年销售额同比去年增长多少?",系统可自动识别时间范围、指标和计算逻辑,输出趋势图表。‌

NLP在统计探索中依赖多种统计技术,包括:

  • 朴素贝叶斯‌:用于文本分类任务,如自动标记数据报告主题。
  • 术语频率-逆文档频率(TF-IDF)‌:衡量词汇在文档中的重要性,辅助语义相关性计算。
  • 概率模型‌:从数据中学习语言模式,提升对模糊表达(如"最近一周")的解析准确性。

这些方法使系统能处理自然语言的歧义性,例如通过停用词移除和词干提取优化查询效率。‌

7)数据清洗和预处理

为了能够完成上述的NLP任务,需要一些预处理,是NLP任务的基本流程。预处理包括:收集语料库、文本清洗、分词、去掉停用词(可选)、标准化和特征提取等。

预处理是NLP的基础,约占50%-70%工作量,主要包括:

  • 数据清洗‌:去除无关字符、HTML标签、广告等噪音,统一文本格式(如全角转半角)。‌‌我们通过不同的途径获取到了想要的语料库之后,接下来就需要对其进行清洗。因为很多的语料数据是无法直接使用的,其中包含了大量的无用符号、特殊的文本结构。数据类型分为:

    • 结构化数据:关系型数据、json等
    • 半结构化数据:XML、HTML等
    • 非结构化数据:Word、PDF、文本、日志等

    需要将原始的语料数据转化成易于处理的格式,一般在处理HTML、XML时,会使用Python的lxml库,功能非常丰富且易于使用。对一些日志或者纯文本的数据,我们可以使用正则表达式进行处理。

  • 分词‌:将连续文本切分为词或短语。中文需处理歧义(如"南京市长江大桥"),英文则基于空格或标点分割。‌‌

  • 词形还原:将单词还原为基本形式(如"running"→"run",does,done,doing,did 需要通过词性还原恢复成 do)。‌‌中文分词需要考虑粒度问题。粒度越大,表达的意思就越准确,但是也会导致召回比较少。所以中文需要不同的场景和要求选择不同的粒度。这个在英文中是没有的。中文分词是一个比较大的课题,相关的知识点和技术栈非常丰富,可以说搞懂了中文分词就等于搞懂了大半个NLP。

  • 词干提取:cities,children,teeth 这些词,需要转换为 city,child,tooth"这些基本形态

  • 标准化‌:统一大小写、拼写变体,处理数字和标点符号。‌‌标准化是为了给后续的处理提供一些必要的基础数据,包括:去掉停用词、词汇表、训练数据等等。当我们完成了分词之后,可以去掉停用词,如:"其中"、"况且"、"什么","的"、"a"等等,但这一步不是必须的,要根据实际业务进行选择,像关键词挖掘就需要去掉停用词,而像训练词向量就不需要。

    词汇表是为语料库建立一个所有不重复词的列表,每个词对应一个索引值,并索引值不可以改变。词汇表的最大作用就是可以将词转化成一个向量,即One-Hot编码。这样我们就可以简单的将词转化成了计算机可以直接处理的数值化数据了。虽然One-Hot编码可以较好的完成部分NLP任务,但它的问题还是不少的。

  • 特征提取

    为了能够更好的训练模型,我们需要将文本的原始特征转化成具体特征,转化的方式主要有两种:统计和Embedding。

    原始特征:需要人类或者机器进行转化,如:文本、图像。

    具体特征:已经被人类进行整理和分析,可以直接使用,如:物体的重要、大小。

模型建模与评估

1)数据建模

目前常用的文本表示方式分为:
离散式表示(Discrete Representation)

  • One-Hot 编码又称为"独热编码"或"哑编码",是最传统、最基础的词(或字)特征表示方法。这种编码将词(或字)表示成一个向量,该向量的维度是词典(或字典)的长度(该词典是通过语料库生成的),该向量中,当前词的位置的值为1,其余的位置为0。

  • 词袋模型(Bag Of Word,BOW),在词袋模型中不考虑语序和词法的信息,每个单词都是相互独立的,将词语放入一个"袋子"里,统计每个单词出现的频率。

  • TF-IDF(词频-逆文档频率),为了解决词袋模型无法区分常用词(如:"是"、"的"等)和专有名词(如:"自然语言处理"、"NLP "等)对文本的重要性的问题,TF-IDF 算法应运而生。TF-IDF 全称是:term frequency--inverse document frequency 又称 词频-逆文本频率。其中:统计的方式主要是计算词的词频(TF)和逆向文件频率(IDF):

    • TF (Term Frequency ):某个词在当前文本中出现的频率,频率高的词语或者是重要的词(如:"自然语言处理")或者是常用词(如:"我"、"是"、"的"等);
    • IDF (Inverse Document frequency ):逆文本频率。文本频率是指:含有某个词的文本在整个语料库中所占的比例。逆文本频率是文本频率的倒数;
      TF-IDF 严重依赖于语料库(尤其在训练同类语料库时,往往会掩盖一些同类型的关键词;如:在进行TF-IDF 训练时,语料库中的 娱乐 新闻较多,则与 娱乐 相关的关键词的权重就会偏低 ),因此需要选取质量高的语料库进行训练;

分布式表示(Distributed Representation)

  • n-gram 是一种 语言模型(Language Model, LM)。语言模型是一种基于概率的判别式模型,该模型的输入是一句话(单词的序列),输出的是这句话的概率,也就是这些单词的联合概率(joint probability)。(备注:语言模型就是判断一句话是不是正常人说的。)

  • 共现矩阵(Co-Occurrence Matrix),首先指定窗口大小,然后统计窗口(和对称窗口)内词语共同出现的次数作为词的向量(vector)。考虑了句子中词的顺序;词表的长度很大,导致词的向量长度也很大;共现矩阵也是稀疏矩阵(可以使用 SVD、PCA 等算法进行降维,但是计算量很大);

  • Word2Vec模型是Google团队在2013年发布的 word representation 方法。该方法一出让 预训练词向量 的使用在NLP 领域遍地开花。word2vec有两种模型:CBOW 和 SKIP-GRAM;

    • CBOW:利用上下文的词预测中心词;
    • SKIP-GRAM:利用中心词预测上下文的词;
  • GloVe 是斯坦福大学Jeffrey、Richard 等提供的一种词向量表示算法,GloVe 的全称是Global Vectors for Word Representation,是一个基于全局词频统计(count-based & overall staticstics)的词表征(word representation)算法。该算法综合了global matrix factorization(全局矩阵分解) 和 local context window(局部上下文窗口) 两种方法的优点。

    备注:Glove模型的推导公式比较复杂,在这里不做详细推导,具体可以查看官网(https://nlp.stanford.edu/projects/glove/)。

  • ELMO,word2vec 和 glove 算法得到的词向量都是静态词向量(静态词向量会把多义词的语义进行融合,训练结束之后不会根据上下文进行改变),静态词向量无法解决多义词的问题(如:"我今天买了7斤苹果" 和 "我今天买了苹果7" 中的 苹果 就是一个多义词)。而ELMO模型进行训练的词向量可以解决多义词的问题。该算法的精髓是:用语言模型训练神经网络,在使用word embedding 时,单词已经具备上下文信息,这个时候神经网络可以根据上下文信息对word embedding 进行调整,这样经过调整之后的word embedding 更能表达在这个上下文中的具体含义,这就解决了静态词向量无法表示多义词的问题。

2)‌模型训练‌

根据任务选择算法,如随机森林用于分类,深度学习模型(如LSTM、Transformer)用于复杂任务(如情感分析、机器翻译)。‌‌

3)评估模型

评估与优化‌:通过精度、召回率等指标测试模型,结合业务需求调整参数。‌‌

评估方法需根据具体任务类型(如分类、生成、理解)选择,并综合考虑数据分布、任务需求和实际应用场景。

评估指标是量化模型性能的基础,‌ 常见指标包括:‌

  • 准确率(Accuracy)‌:分类正确的样本数占总样本数的比例,适用于样本均衡场景,但高准确率在不平衡数据中可能具有误导性。
  • 精确率(Precision)‌:预测为正类的样本中实际为正类的比例,关注预测结果的可靠性。
  • 召回率(Recall)‌:实际正类样本中被正确预测的比例,衡量覆盖全面性。
  • F1分数‌:精确率和召回率的调和平均值,平衡两者在不平衡数据中更稳健。
    对于生成任务,如机器翻译或摘要,使用BLEU、ROUGE等指标通过N-gram匹配度评估生成文本质量;回归任务则常用均方误差(MSE)等连续值误差指标。‌

4)推理新数据

自然语言处理(NLP)中的推理是指模型基于已学习的知识对新输入数据进行推断,以得出未知信息。这一过程通常依赖于预训练模型、外部知识和特定算法,核心目标是从文本中捕捉语义关系并进行逻辑推断。‌

相关推荐
ar01232 小时前
AR+AI:人工智能驱动增强现实的无限可能
人工智能·ar
wenzhangli72 小时前
如何评价钉钉AI1.1新品发布会?垂直战略背后的内耗与垄断隐忧
大数据·人工智能
————A2 小时前
从 RAG 到故障链图谱:一次设备运维诊断系统的工程反思
人工智能
天一生水water2 小时前
DeepLabv3+ 深入浅出教程
人工智能
爱编程的鱼2 小时前
Tokens是什么意思?Token在AI大模型中的含义
人工智能
小徐Chao努力2 小时前
【Langchain4j-Java AI开发】10-框架集成(Spring Boot & Quarkus)
java·人工智能·spring boot
好奇龙猫2 小时前
【AI学习-comfyUI学习-第二十二-DepthAnythingV2深度图工作流-各个部分学习】
人工智能·学习
小妖同学学AI2 小时前
告别无效提问:开源工具Prompt Optimizer让AI真正懂你心意
人工智能·prompt
94621931zyn62 小时前
观影统计 - Cordova 与 OpenHarmony 混合开发实战
笔记