news 2026/4/30 1:42:32

6.AI入门:从机器学习到生成式AI,普通人也能看懂(六)—— 自然语言处理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
6.AI入门:从机器学习到生成式AI,普通人也能看懂(六)—— 自然语言处理

系列导读:上一篇我们了解了深度学习,今天聚焦AI的一个重要应用领域——自然语言处理(NLP),看看机器是如何理解人类语言的。


一、什么是自然语言处理?

1.1 定义

自然语言处理(Natural Language Processing,简称NLP)= 让计算机理解、生成和处理人类语言的技术。

1.2 为什么NLP难?

人类语言的特点:

1. 歧义性 "我借给他一本书" → 是我借给他?还是他借给我? 2. 上下文依赖 "苹果" → 水果?还是公司? 3. 隐喻和比喻 "他是一头狮子" → 不是真的狮子,是形容勇敢 4. 语法灵活 "吃了吗你?" vs "你吃了吗?" → 意思相同,表达不同 5. 新词和俚语 "yyds"、"绝绝子"、"emo了" → 词典里查不到

1.3 NLP的任务

任务说明例子
文本分类判断文本类别垃圾邮件识别、情感分析
命名实体识别识别专有名词人名、地名、机构名
关系抽取识别实体间关系“乔布斯创立苹果公司”
文本生成生成新文本写文章、对话生成
机器翻译语言间翻译中译英、英译中
问答系统回答问题智能客服、搜索引擎
文本摘要生成摘要新闻摘要、论文摘要

二、文本表示方法

2.1 词的表示

计算机只能处理数字,需要将文本转换为数字表示。

独热编码(One-Hot)
词典:["苹果", "香蕉", "橙子"] 苹果 → [1, 0, 0] 香蕉 → [0, 1, 0] 橙子 → [0, 0, 1]

缺点:

  • 维度等于词典大小,稀疏
  • 无法表达词的相似性
  • "苹果"和"香蕉"的距离 = "苹果"和"汽车"的距离
词向量(Word Embedding)

将词映射到低维稠密向量,相似词距离近。

苹果 → [0.8, 0.2, 0.5, ...] 香蕉 → [0.7, 0.3, 0.4, ...] 汽车 → [0.1, 0.9, 0.2, ...] "苹果"和"香蕉"距离近(都是水果) "苹果"和"汽车"距离远

2.2 Word2Vec

经典的词向量训练方法。

两种模型

CBOW(连续词袋模型):

用上下文预测中心词 输入:今天 天气 很好 输出:不错 "今天天气很(?)好" → 预测"不错"

Skip-gram:

用中心词预测上下文 输入:不错 输出:今天 天气 很好 "今天天气很(不错)好" → 预测上下文

2.3 GloVe

结合全局统计信息的词向量方法。

利用词共现矩阵: 苹果 香蕉 吃 苹果 - 50 100 香蕉 50 - 80 吃 100 80 - "苹果"和"吃"共现多 → 相关性强

三、经典NLP任务详解

3.1 文本分类

判断文本属于哪个类别。

情感分析
输入:"这部电影太精彩了!" 处理:提取特征 → 模型预测 输出:正面情感(置信度:0.95) 应用: - 商品评论分析 - 舆情监控 - 用户反馈分析
新闻分类
输入:新闻正文 输出:体育/财经/娱乐/科技/... 方法: - 传统:TF-IDF + 机器学习 - 现代:BERT微调

3.2 命名实体识别(NER)

识别文本中的专有名词及其类型。

输入:"乔布斯在加州创立了苹果公司" 输出: 乔布斯 → 人名(PER) 加州 → 地名(LOC) 苹果公司 → 机构名(ORG) 应用: - 信息抽取 - 知识图谱构建 - 智能问答

3.3 词性标注

标注每个词的词性。

输入:"我爱自然语言处理" 输出: 我/r(代词) 爱/v(动词) 自然语言处理/n(名词) 应用: - 句法分析 - 机器翻译 - 信息检索

3.4 文本生成

生成符合语法和语义的新文本。

输入:"很久很久以前," 输出:"有一个美丽的王国,国王和王后过着幸福的生活..." 应用: - 写作辅助 - 对话生成 - 故事创作

四、NLP技术的发展

4.1 传统方法时代

基于规则和统计的方法。

规则方法: - 人工编写语法规则 - 适合特定领域,难以扩展 统计方法: - 隐马尔可夫模型(HMM) - 条件随机场(CRF) - N-gram语言模型

4.2 深度学习时代

使用神经网络处理NLP任务。

RNN/LSTM
处理序列数据,具有记忆能力 "今天天气很好" → 逐词处理,理解上下文 问题:长序列时梯度消失/爆炸
Seq2Seq
序列到序列模型,用于翻译、摘要等 编码器:将输入序列编码为向量 解码器:从向量生成输出序列 输入:"How are you" 编码器 → [向量表示] 解码器 → "你好吗"
Attention机制
让模型关注输入的重要部分 翻译:"I love you" → "我爱你" "I" 关注 "我" "love" 关注 "爱" "you" 关注 "你"

4.3 预训练模型时代

在大规模语料上预训练,在具体任务上微调。

ELMo
动态词向量,根据上下文调整词的表示 "苹果手机" 中的 "苹果" → 公司 "吃苹果" 中的 "苹果" → 水果
BERT
双向编码器,同时利用左右上下文 预训练任务: 1. Masked Language Model:随机遮盖词,预测原词 2. Next Sentence Prediction:判断两句是否连续 效果:在多项NLP任务上达到SOTA
GPT
生成式预训练模型,自回归生成 GPT-1 → GPT-2 → GPT-3 → GPT-4 参数量:117M → 1.5B → 175B → ? 能力:文本生成、对话、编程...

五、BERT详解

5.1 架构

输入层: [CLS] 我 爱 你 [SEP] Transformer编码器 × 12层 输出层: 各位置的隐藏状态

5.2 输入表示

Token Embedding:词向量 Position Embedding:位置向量 Segment Embedding:句子向量(区分两句) 总输入 = Token + Position + Segment

5.3 预训练任务

Masked Language Model(MLM):

输入:我 [MASK] 你 目标:预测被遮盖的词是"爱" 随机遮盖15%的词进行预测

Next Sentence Prediction(NSP):

输入:[CLS] 句子A [SEP] 句子B [SEP] 目标:判断B是否是A的下一句 正例:连续的句子 负例:随机采样的句子

5.4 微调

在具体任务上微调BERT: 分类任务:用[CLS]的输出做分类 NER任务:每个token输出预测标签 问答任务:预测答案的起止位置

六、大语言模型(LLM)

6.1 什么是大语言模型?

参数量巨大、在大规模语料上训练的语言模型。

模型演进: BERT(2018):340M参数 GPT-2(2019):1.5B参数 GPT-3(2020):175B参数 GPT-4(2023):参数量未公开,估计万亿级

6.2 涌现能力

模型规模大到一定程度后,突然出现的新能力。

小模型:只能完成训练过的任务 大模型:能完成未见过的任务 涌现能力: - 少样本学习(Few-shot) - 思维链推理(Chain-of-Thought) - 指令遵循(Instruction Following)

6.3 提示工程(Prompt Engineering)

通过设计提示词引导模型输出。

简单提示: "翻译:Hello World" → "你好世界" 思维链提示: "请一步步思考: 1. 分析问题 2. 列出步骤 3. 得出答案 问题:..."

七、NLP应用案例

7.1 智能客服

用户:"我想退货" ↓ 意图识别:退货申请 ↓ 槽位填充:订单号、退货原因 ↓ 回复:"请提供订单号,我来帮您处理"

7.2 机器翻译

输入:"The quick brown fox jumps over the lazy dog" ↓ 编码:理解源语言语义 ↓ 解码:生成目标语言 ↓ 输出:"敏捷的棕色狐狸跳过了懒惰的狗"

7.3 文本摘要

输入:长篇新闻文章 ↓ 抽取式:选取重要句子 生成式:生成新的摘要 ↓ 输出:简洁的新闻摘要

7.4 智能问答

用户:"姚明的身高是多少?" ↓ 问题理解:查询姚明身高 ↓ 知识检索:搜索相关信息 ↓ 答案生成:"姚明的身高是2.26米"

八、NLP工具和资源

8.1 开源库

语言特点
NLTKPython经典NLP库,教学首选
spaCyPython工业级,速度快
TransformersPythonHugging Face,预训练模型
jiebaPython中文分词
HanLPJava/Python中文NLP工具包

8.2 预训练模型

Hugging Face Model Hub: - BERT、RoBERTa、ALBERT - GPT-2、GPT-Neo - T5、BART - 中文模型:BERT-wwm、RoBERTa-wwm

8.3 数据集

英文: - GLUE:通用语言理解评估 - SQuAD:问答数据集 - CoNLL:NER数据集 中文: - CMRC:中文阅读理解 - LCQMC:中文问题匹配 - CNER:中文NER

九、动手实践:NLP任务完整示例

9.1 环境准备

pipinstalltransformers torch jieba pandas scikit-learn

9.2 中文文本分类

""" NLP实战:中文新闻分类 使用传统机器学习方法 """importjiebaimportpandasaspdfromsklearn.feature_extraction.textimportTfidfVectorizerfromsklearn.model_selectionimporttrain_test_splitfromsklearn.naive_bayesimportMultinomialNBfromsklearn.metricsimportclassification_report# 1. 模拟新闻数据news_data=[("苹果公司发布新款iPhone,搭载最新A17芯片","科技"),("今日股市大涨,沪指突破3500点","财经"),("某明星主演新电影票房破10亿","娱乐"),("国足世预赛战胜对手,晋级希望大增","体育"),("人工智能技术突破,GPT-5即将发布","科技"),("央行宣布降准,释放流动性","财经"),("热门综艺节目收视率创新高","娱乐"),("NBA总决赛勇士队夺冠","体育"),]df=pd.DataFrame(news_data,columns=['text','category'])print("新闻数据:")print(df)# 2. 中文分词defchinese_tokenize(text):"""中文分词"""return' '.join(jieba.cut(text))df['tokenized']=df['text'].apply(chinese_tokenize)print("\n分词结果:")print(df[['text','tokenized']])# 3. TF-IDF特征提取vectorizer=TfidfVectorizer()X=vectorizer.fit_transform(df['tokenized'])y=df['category']print(f"\n特征维度:{X.shape}")print(f"类别:{y.unique()}")# 4. 训练分类器X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)clf=MultinomialNB()clf.fit(X_train,y_train)# 5. 预测新文本new_texts=["华为发布新款折叠屏手机","A股今日大跌,投资者恐慌","某导演新片即将上映"]print("\n新文本预测:")fortextinnew_texts:tokenized=chinese_tokenize(text)features=vectorizer.transform([tokenized])pred=clf.predict(features)[0]print(f"「{text}」→{pred}")

9.3 使用预训练模型(BERT)

""" 使用Hugging Face Transformers进行文本分类 """fromtransformersimportBertTokenizer,BertForSequenceClassificationimporttorch# 1. 加载预训练模型(使用中文BERT)model_name="bert-base-chinese"tokenizer=BertTokenizer.from_pretrained(model_name)model=BertForSequenceClassification.from_pretrained(model_name,num_labels=4# 4个类别)# 2. 文本编码texts=["苹果公司发布新款iPhone","今日股市大涨","某明星新电影上映","国足世预赛获胜"]# Tokenizeinputs=tokenizer(texts,padding=True,truncation=True,max_length=128,return_tensors="pt")print("Token IDs shape:",inputs['input_ids'].shape)# 3. 模型推理withtorch.no_grad():outputs=model(**inputs)predictions=torch.argmax(outputs.logits,dim=-1)print(f"预测结果:{predictions}")

9.4 情感分析示例

""" 情感分析:判断文本情感倾向 """fromtransformersimportpipeline# 使用预训练的情感分析模型sentiment_analyzer=pipeline("sentiment-analysis",model="lxyuan/distilbert-base-multilingual-cased-sentiments-student")# 分析中文文本情感texts=["这部电影太精彩了,强烈推荐!","服务态度很差,再也不会来了","产品质量还行,价格略贵"]print("情感分析结果:")fortextintexts:result=sentiment_analyzer(text)[0]print(f"「{text}」")print(f" → 情感:{result['label']}, 置信度:{result['score']:.2%}\n")

输出示例:

情感分析结果: 「这部电影太精彩了,强烈推荐!」 → 情感: positive, 置信度: 98.52% 「服务态度很差,再也不会来了」 → 情感: negative, 置信度: 96.78% 「产品质量还行,价格略贵」 → 情感: neutral, 置信度: 72.34%

9.5 命名实体识别

""" 命名实体识别:识别文本中的人名、地名、机构名 """fromtransformersimportpipeline# 加载中文NER模型ner=pipeline("ner",model="ckiplab/bert-base-chinese-ner",aggregation_strategy="simple")text="乔布斯在加州创立了苹果公司,库克现任CEO"print(f"原文:{text}")print("\n识别到的实体:")entities=ner(text)forentinentities:print(f"{ent['word']}:{ent['entity_group']}(置信度:{ent['score']:.2%})")

十、小结

  • NLP = 让计算机理解和处理人类语言
  • 核心挑战:歧义、上下文、隐喻、新词
  • 文本表示:从One-Hot到词向量
  • 技术演进:规则→统计→深度学习→预训练模型
  • BERT:双向编码,理解任务
  • GPT:自回归生成,生成任务
  • 大语言模型:涌现能力,提示工程

十一、思考题

  1. 为什么人类语言对计算机来说很难理解?举例说明。

  2. 词向量相比One-Hot编码有什么优势?

  3. BERT和GPT有什么区别?各适合什么任务?


下一篇预告:我们将探讨计算机视觉——让机器"看懂"图像和视频的技术。


标签自然语言处理NLPBERTGPT词向量AI入门

版权声明:本文为原创内容,转载请注明出处。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 1:40:17

RSS 实例详解

RSS 实例详解 引言 RSS(Really Simple Syndication,简易信息聚合)是一种用于内容发布和订阅的技术,它允许用户获取他们感兴趣网站的最新内容,而不必每次都访问该网站。本文将详细介绍RSS的基本概念、工作原理、实例应用以及如何利用RSS进行内容订阅。 一、RSS的基本概念…

作者头像 李华
网站建设 2026/4/30 1:39:02

山西GEO搜索优化:哪家技术更领先?

当“AI搜索”逐渐取代传统搜索引擎成为用户获取信息的第一入口,一场围绕“企业认知资产”的无声战役已经打响。在山西,越来越多的企业主开始意识到:客户在用豆包、文心一言、DeepSeek等AI工具提问时,如果搜不到自家品牌&#xff0…

作者头像 李华
网站建设 2026/4/30 1:39:02

Cursor AI开发工具试用限制深度解析与技术重置方案

Cursor AI开发工具试用限制深度解析与技术重置方案 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Your request has been blocked as our system has detected suspicious activity / Youve reached your trial request limit. / Too many fre…

作者头像 李华
网站建设 2026/4/30 1:35:53

LLM 数据采集指南:提高AI数据采集成功率的4个技巧

在2026年,AI模型的竞争早已从“算法比拼”演变为“数据主权”的争夺。无论是训练垂直领域的大语言模型(LLM),还是开发精准的行业AI助手,高质量、大规模的实时网页数据都是不可或缺的“燃料”。 但问题往往不在“不会爬…

作者头像 李华
网站建设 2026/4/30 1:34:24

golang如何实现消息过滤路由_golang消息过滤路由实现要点

最可靠方式是用std::transform将待查文本和搜索词均转为小写后再调string::find;需对两字符串都转换,用unsigned char避免负值问题,禁用locale防止跨平台不一致。用 std::transform 预处理字符串再调 string::find 最可靠大小写不敏感搜索不能…

作者头像 李华