大数跨境

NLP 基础(上):详解自然语言处理原理与常用算法

NLP 基础(上):详解自然语言处理原理与常用算法 知识代码AI
2026-09-09
1
导读:NLP 基础(上):详解自然语言处理原理与常用算法一、课程背景从这节课开始,我们正式进入自然语言处理(NLP)

NLP 基础(上):详解自然语言处理原理与常用算法


一、课程背景

从这节课开始,我们正式进入自然语言处理(NLP)的学习,这是继计算机视觉之后的第二个实战方向。NLP 的应用深入到了互联网业务的方方面面,掌握 NLP 相关算法将使我们的竞争力大大增强。[pdf_21]


二、NLP 应用场景

1. 语言学方向(研究类)

研究方向
说明
词干提取、词形还原
将单词还原为基本形式
分词
将文本切分为词语
词性标注
标注每个词的词性(名词、动词等)
命名实体识别
识别人名、地名、组织名等实体
语义消歧
消除一词多义的问题
句法分析
分析句子的语法结构
指代消解
确定代词所指代的对象
篇章分析
分析整篇文章的结构和逻辑

2. 应用类方向(处理与应用)

应用
说明
机器翻译
Google 翻译
文本分类
如垃圾邮件过滤
问答系统
如智能客服
知识图谱
如搜索引擎的知识卡片
信息检索
如搜索引擎

3. 搜索引擎实例

以搜索"亚洲的动 wu"为例,搜索引擎后台需要完成:[pdf_21]

阶段
涉及技术
query 解析
分词、命名实体识别、语义消歧、query 纠错(将拼音"wu"改写为"物")
实体搜索与过滤
信息检索、知识图谱
扩展结果推荐
广告、新闻、视频等个性化推荐
构建准备阶段
篇章理解、文本处理、图片识别、音视频算法,构建检索库、知识库

三、NLP 三大经典基础问题

要让程序理解文本内容,需要解决三个非常基础和重要的内容:[pdf_21]

  1. 分词
  2. 文本表示
  3. 关键词提取

四、分词

为什么需要分词

中文与英文最大不同:英文单词间有空格隔断,中文单词之间除了标点符号没有别的隔断,因此需要分词程序来帮助理解文本。[pdf_21]

常用分词工具

类型
工具
开源/免费
jieba
、HanLP、THULAC
商业付费
腾讯、百度、阿里等均有相应工具

jieba 分词示例

import jieba

text = "极客时间棒呆啦"
# jieba.cut 得到的是 generator 形式的结果
seg = jieba.cut(text)
print(' '.join(seg))
# 输出:极客 时间 棒呆 啦

jieba 词性标注示例

import jieba.posseg as posseg

text = "一天不看极客时间我就浑身难受"
seg = posseg.cut(text)
print([se for se in seg])
# 输出:[pair('一天', 'm'), pair('不', 'd'), pair('看', 'v'), 
#        pair('极客', 'n'), pair('时间', 'n'), pair('我', 'r'), 
#        pair('就', 'd'), pair('浑身', 'n'), pair('难受', 'a')]

词性标注中的英文缩写:m(数词)、d(副词)、v(动词)、n(名词)、r(代词)、a(形容词)


五、文本表示方法

1. One-hot(独热)表示法

原理:假设共有 N 个单词,每个单词用一个 N 位向量表示,将该单词对应序号的位置置 1,其余置 0。[pdf_21]

示例:词典大小为 10000,"极客"的 id 为 666,则向量为第 666 位为 1,其余为 0。

缺点:中文 UTF-8 编码下有两万多个字符,词语数量更大,数据量非常庞大。

2. 文档级压缩表示

原理:用一个向量表示文章中所有单词。建立一个 N 维向量,将文章中出现过的所有单词对应位置置 1,其余为 0。[pdf_21]

优点:相比逐词表示,数据体积大幅减少。

3. Count-based 表示方法

原理:对每个出现的单词的序号 id 及出现次数进行统计,形式为 {index1: count1, index2: count2, ...}。[pdf_21]

示例:"极客时间"只需两个 k-v 对表示:{3:1, 665:1}

优点
缺点
大幅压缩空间占用
不能表述单词的语序信息
生成方便,在 SVM、树模型等算法中广泛采用
如"我/喜欢/你"和"你/喜欢/我"得到相同表示结果

4. Word Embedding(词嵌入)

  • 深度学习的应用推动了 Word Embedding 的发展,现在基本上都会采用该方法进行文本表示
  • 不意味着传统文本表示方法过时,在小规模、轻量级文本处理场景中仍作用巨大
  • 详细内容通过后续 BERT 实战课程展开讲解[pdf_21]

六、关键词提取

概述

关键词是能够表达文本中心内容的词语,在检索系统、推荐系统等应用中占有极重要地位。[pdf_21]

三种无监督方法

方法类型
代表算法
原理
基于统计特征
TF-IDF
根据单词出现次数和分布进行统计
基于词图模型
TextRank
构建文本的图结构,分析词语网络
基于主题模型
LDA
发现文档集合中抽象的"主题"

1. TF-IDF(基于统计特征)

核心思想:一个单词在文件中出现次数越多,重要性越高;但在语料库中出现的频率越高,重要性反而越小。[pdf_21]

计算公式

指标
公式
说明
TF(词频)
某一类中词条 w 出现的次数 / 该类中所有词条的数目
衡量词在文档中的重要性
IDF(逆向文件频率)
log(语料库文档总数 / (包含词条 w 的文档数 + 1))
分母 +1 防止分母为 0
TF-IDF
TF × IDF
综合权重

使用工具:NLTK(Natural Language Toolkit),pip install nltk 安装

TF-IDF 的缺点(来自课程留言区讨论):[pdf_21]

缺点
说明
文章长度偏差
长文章词出现次数必然多于短文章
简单结构局限
IDF 不能有效反映单词的重要程度和特征词分布情况
位置信息缺失
没有体现单词在文档中的位置信息(如标题中的词应更重要)
需预处理
不使用停用词时,常见冠词和谓语动词出现次数会非常高

2. TextRank(基于词图模型)

原理:构建文本的图结构表示语言的词语网络,对语言进行网络图分析,在图上寻找具有重要作用的词或短语。[pdf_21]

与 PageRank 的关系:TextRank 脱胎于 PageRank。

PageRank 核心
TextRank 区别
一个网页被很多其他网页链接 → 重要
句子代替网页
高 PageRank 的网页链接到其他网页 → 被链接网页也提高
归一化的句子相似度代替相等转移概率

jieba 集成 TextRank

jieba.analyse.textrank(sentence, topK=20, withWeight=False
                       allowPOS=('ns''n''vn''v'))
参数
说明
sentence
待处理文本
topK
选择最重要的 K 个关键词
withWeight
是否返回权重
allowPOS
筛选特定词性

3. LDA(基于主题模型)

LDA(Latent Dirichlet Allocation):文档主题生成模型,是最典型的基于主题模型的算法。它会"发现"文档集合中出现的抽象的"主题",用于挖掘文本中隐藏的语义结构。[pdf_21]

使用 gensim 实现 LDA

from gensim import corpora, models
import jieba.posseg as jp
import jieba

input_content = [line.strip() for line in open('input.txt''r')]

# 第一步:分词
words_list = []
for text in input_content:
    words = [w.word for w in jp.cut(text)]
    words_list.append(words)

# 第二步:构建文本统计信息,为每个单词分配序列id
dictionary = corpora.Dictionary(words_list)

# 第三步:构建语料,将dictionary转化为词袋(Bag of Words)
corpus = [dictionary.doc2bow(words) for words in words_list]

# 第四步:训练 LDA 模型
lda_model = models.ldamodel.LdaModel(
    corpus=corpus, 
    num_topics=8
    id2word=dictionary, 
    passes=10
)

LDA 参数说明

参数
说明
num_topics
生成的主题个数
id2word
即 dictionary,把 id 映射成字符串
passes
相当于深度学习中的 epoch,表示模型遍历语料库的次数

七、每课一练

问题:TF-IDF 有哪些缺点?建议结合其计算过程做梳理。[pdf_21]

解答要点

缺点
详细说明
文章长度偏差
长文章词出现次数必然多于短文章,需做归一化处理
边际效用递减
词出现 80 次和 100 次,不代表 100 次比 80 次有用
简单结构局限
IDF 不能有效反映单词的重要程度和特征词分布情况,精度不高
位置信息缺失
没有体现单词在文档中的位置信息,标题等位置的词应更重
需预处理
不使用停用词时,冠词和谓语动词会出现次数非常高,干扰判断

八、核心要点总结

知识点
要点
NLP 三大基础问题
分词、文本表示、关键词提取
分词工具
jieba(推荐)、HanLP、THULAC
文本表示方法
One-hot → 文档级压缩 → Count-based → Word Embedding
Count-based 缺点
不能表述单词的语序信息
关键词提取方法
TF-IDF(统计)、TextRank(词图)、LDA(主题模型)
TF-IDF 核心
TF(词频)× IDF(逆向文件频率)
TextRank 核心
脱胎于 PageRank,用归一化句子相似度替代转移概率
LDA 核心
发现文档集合中抽象的"主题",使用 gensim 实现

九、小结

  1. NLP 三大基础问题:分词、文本表示、关键词提取,已有大量集成工具可供直接使用。
  2. 分词:中文与英文结构不同,需要分词程序帮助理解,推荐使用 jieba。
  3. 文本表示:从 One-hot 到 Word Embedding,深度学习推动了词嵌入的发展,但传统方法在小规模场景中仍作用巨大。
  4. 关键词提取:三种方法各有侧重——TF-IDF 基于统计、TextRank 基于图网络、LDA 基于主题模型。
  5. 核心观点:有了工具并不意味着不需要理解其内部原理,学习要知其然,更需知其所以然,这样在实际工作中遇到问题时才能游刃有余地解决。[pdf_21]

【声明】内容源于网络
0
0
知识代码AI
技术基底 机器视觉全栈 × 光学成像 × 图像处理算法 编程栈 C++/C#工业开发 | Python智能建模 工具链 Halcon/VisionPro工业部署 | PyTorch/TensorFlow模型炼金术 | 模型压缩&嵌入式移植
内容 405
粉丝 0
知识代码AI 技术基底 机器视觉全栈 × 光学成像 × 图像处理算法 编程栈 C++/C#工业开发 | Python智能建模 工具链 Halcon/VisionPro工业部署 | PyTorch/TensorFlow模型炼金术 | 模型压缩&嵌入式移植
总阅读6.9k
粉丝0
内容405