自然语言处理基础

自然语言处理基础文本的表示自然语言处理任务自然语言处理的基本问题自然语言处理的评价指标基础工具集与常用数据集符号表示向量表示语言模型基本任务高级任务应用任务文本分类问题文本匹配问题结构预测问题序列到序列问题准确率F依存分析评价机器翻译评价对话系统评价工具集数据集离散表示稠密表示中文分词英文分词句法分析语义分析信息抽取情感分析问答系统机器翻译对话系统NLTKspaCyTextBlobLTPPyTorch维基百科Common Crawl

文本的表示

文本表示是自然语言处理中的核心问题之一。它决定了如何将人类语言转化为计算机能够理解的形式,从而为后续任务提供基础支持。

符号表示:早期方法基于符号(字符串)表示,例如通过专家知识规则判断句子的情感倾向性。

  • 优点:符合人类直觉,具有良好的可解释性和可干预性。
  • 缺点:知识完备性不足,依赖专家构建和维护,难以扩展到复杂场景。

向量表示:向量表示将词或文本映射到高维空间中,常见的有离散表示和稠密表示两种形式。

  • 离散表示:如独热编码(One-hot Encoding),维度等于词表大小,仅有一位为1,其余为0。
    • 示例:「土豆」可以表示为 [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, ...]
    • 缺点:存在严重的数据稀疏问题,无法处理多义词或多词一义现象。
  • 稠密表示:通过低维、连续的向量表示词,称为词嵌入(Word Embedding)。
    • 常见模型包括 Word2Vec, GloVe 和 BERT 等。
    • 优势:解决了稀疏性问题,能够捕捉语义相似性。

传统的解决离散表示的方案:

  • 增加额外的特征
    • 词性特征:名词、动词、形容词等。
    • 前后缀特征
  • 语义词典
    • 如 WordNet,提供词义、同义词、反义词等信息。
    • 需解决一词多义问题
    • 收录不全且更新慢
  • 词聚类特征

分布语义假设

根据分布语义假设(Distributional Semantic Hypothesis),词的含义由其上下文词的分布决定。

You shall know a word by the company it keeps. —— Firth J.R. 1957

分布词向量:

shinning bright trees dark look
moon 38 45 2 27 12

于是语义相似度通过计算向量相似度获得。

但仍然存在高维、稀疏、离散的问题。

  • 分布表示的加权:降低高频词的权重,提高低频词的权重。
    • 降低高频但无意义词(如 the, a)的权重
    • 提升低频但重要词的显著性

采用「点互信息」(Pointwise Mutual Information, PMI)PMI(w,c)=logP(w,c)P(w)P(c)\operatorname{PMI}(w, c) = \log \frac{P(w, c)}{P(w)P(c)} 来衡量词 ww 和上下文词 cc 的相关性。

  • 分布表示的降维:避免稀疏性,反映高阶共现关系。
  • 保留主要语义特征
  • 得到稠密低维表示

采用「奇异值分解」(Singular Value Decomposition, SVD)将高维稀疏矩阵转换为低维稠密矩阵。

分布式词表示的缺点:

  • 训练速度慢,增加新语料库困难
  • 不易扩展到短语、句子表示

分布式表示直接使用低维、稠密、连续的向量表示词

  • 通过「自监督」的方法直接学习词向量
  • 也称词嵌入(Word Embedding)

自然语言处理任务

自然语言处理涵盖多种任务,从基础的语言建模到复杂的生成任务,以下是主要任务分类:

语言模型

语言模型(Language Model, LM)描述一段自然语言的概率或给定上文时下一个词出现的概率:

P(w1,,wl),P(wl+1w1,,wl)P(w_1, \dots, w_l),\, P(w_{l+1} \mid w_1, \dots, w_l)

链式法则有

P(w1wl)=i=1lP(wiw1:i1)P(w_1 \cdots w_l) = \prod_{i=1}^{l} P(w_i \mid w_{1 : i-1})

广泛应用于多种自然语言处理任务

  • 机器翻译(词排序)
    • P(the cat is small)>P(small the is cat)P(\text{the cat is small}) > P(\text{small the is cat})
  • 语音识别(词选择)
    • P(there are four cats)>P(there are for cats)P(\text{there are \textcolor{ff0099}{four} cats}) > P(\text{there are \textcolor{00ff99}{for} cats})

基本任务

  • 中文分词
    • 将汉字序列切分为独立的词语。例如:「严守一把手机关了」可以有不同的分词结果[1]
    • 挑战:歧义问题显著。
  • 英文分词
    • 英文以空格作为分隔符,但仍需考虑词形变化(如 computercomputers)。
    • 挑战:数据稀疏性和未登录词问题。

英文分词:I enjoy watching movies and reading books.

  • 空格切分:I / enjoy / watching / movies / and / reading / books
    • 优点:语义明确
    • 缺点:数据稀疏,词表过大,降低处理速度,OOV
  • 字母切分:I / e / n / j / o / y / w / a / t / c / h / …
    • 优点:词表极小,无 OOV
    • 缺点:语义信息不明确,编码解码效率低

子词切分(Subword Tokenization)是一种折中方案,将单词切分为更小的片段。

  • I /enjoy / watch / ing / movie / s / and / read / ing / book / s
  • 常用算法:使用尽量长且频次高的子词对单词进行切分
    • BPE(Byte-Pair Encoding)
    • BBPE(Byte-level BPE)
    • WordPiece
    • Unigram Language Model
  • 优势:解决未登录词(Out Of Vocabulary, OOV)问题,同时保持语义明确性和计算效率。
算法拓展

BPE(Byte Pair Encoding)

  • 核心思想: 通过迭代合并高频字符对(或子词)构建词表,从字符级逐步生成更长的子词。
  • 算法流程:
    1. 初始化词表为所有基础字符。
    2. 统计文本中所有相邻字符对的频率。
    3. 合并频率最高的字符对,将新组合加入词表。
    4. 重复步骤 2-3,直到达到预设词表大小。
  • 特点:
    • 贪心策略:每次合并当前最优的字符对。
    • 频率驱动:优先合并高频组合。
    • 应用场景:GPT系列、RoBERTa等模型。

BBPE(Byte-Level BPE)

  • 核心思想:BPE 的扩展版本,基于字节(Byte)而非 Unicode 字符进行编码,直接处理原始字节流。
  • 改进点:
    • 解决 Unicode 字符编码问题(如生僻字、多语言混合)。
    • 避免 OOV(Out-Of-Vocabulary)问题,理论上能覆盖所有字符。
  • 应用场景:GPT-4、多语言模型(XLM-R)。

WordPiece

  • 核心思想:与BPE类似,但合并策略基于概率(似然最大化),而非单纯频率。
  • 算法流程:
    1. 初始化词表为所有基础字符。
    2. 计算合并每对子词后的语言模型似然增益。
    3. 合并增益最大的子词对。
    4. 重复步骤 2-3,直到达到预设词表大小。
  • 特点:
    • 概率驱动:合并能最大提升语言模型概率的子词。
    • 应用场景:BERT 系列、DistilBERT。

Unigram Language Model

  • 核心思想:基于统计语言模型,假设每个子词独立,通过迭代剪枝生成最优词表。
  • 算法流程:
    1. 初始化一个大词表(如所有字符 + 高频 n-gram)。
    2. 训练语言模型,估计每个子词的概率。
    3. 移除对整体似然影响最小的子词。
    4. 重复步骤 2-3,直到达到预设词表大小。
  • 特点:
    • 概率剪枝:保留高概率子词,删除低贡献子词。
    • 灵活性:支持多种分词可能性(概率加权)。
    • 应用场景:ALBERT, SentencePiece 工具。
特征 BPE BBPE WordPiece Unigram
合并策略 频率驱动 频率驱动(字节级) 概率驱动 概率剪枝
训练方向 自底向上(合并) 同 BPE 自底向上(合并) 自顶向下(剪枝)
OOV 处理 依赖词表覆盖 无 OOV(字节级) 依赖词表覆盖 依赖词表覆盖
多语言支持 有限 优秀 一般 优秀
分词速度 较快 较慢(需概率计算)
典型应用 GPT, RoBERTa GPT-4, XLM-R BERT, DistilBERT ALBERT, SentencePiece

应用场景:

  1. BPE:单语言任务、资源有限场景(简单高效)。
  2. BBPE:多语言混合、需要强泛化能力(如低资源语言)。
  3. WordPiece:预训练语言模型(BERT 系列),需平衡语义和粒度。
  4. Unigram:灵活分词需求(如日韩语粘着语)、支持概率加权输出。

关键选择因素:

  • 语言特性
    • 黏着语(如日语)\to Unigram/BBPE。
    • 拉丁语系 \to BPE/WordPiece。
  • 数据规模
    • 小数据 \to BPE/WordPiece(避免过拟合)。
    • 大数据 \to BBPE/Unigram(更细粒度)。
  • 计算资源
    • 低资源 \to BPE/WordPiece。
    • 高资源 \to Unigram/BBPE。

高级任务

  • 句法分析:将线性文本转换为树状结构,识别主谓宾等成分。
  • 语义分析:包括词义消歧(WSD)、语义角色标注(SRL)和语义依存图生成。
  • 信息抽取:从非结构化文本中提取结构化信息。
    • 示例:从新闻中提取公司并购事件。
  • 情感分析:判断文本的情感倾向性(正面、负面或中性)。
    • 示例:「这款手机的屏幕很不错,性能也还可以」表达正面情感。
  • 问答系统:根据用户提问,从文档、知识库或互联网中检索答案。
    • 类型:检索式、知识库式、常问问题集式和阅读理解式。

应用任务

  • 机器翻译:将源语言文本翻译为目标语言。
  • 对话系统:包括任务型对话、聊天机器人、知识问答和推荐系统。
    • 特点:不同类型的对话系统在目的、领域和交互方式上有所区别。

自然语言处理的基本问题

自然语言处理的核心问题可以归结为以下四类:

  • 文本分类问题:将输入文本映射到预定义类别集合中。
    • 示例:垃圾邮件过滤、情感分类。
  • 文本匹配问题:判断两段文本之间的关系(如复述、蕴含)。
    • 解决方案:双塔结构或单塔结构。
  • 结构预测问题:输出类别之间具有强关联性,常见任务包括:
    • 序列标注:如词性标注、命名实体识别。
    • 序列分割:如分句、分词。
    • 图结构生成:如依存句法分析。
  • 序列到序列问题:输入和输出均为序列,不要求长度一致或词表相同。
    • 示例:机器翻译、文本摘要生成。

自然语言处理的评价指标

评价自然语言处理模型的性能需要根据任务选择合适的指标:

  • 准确率(Accuracy)
    • 最直观的指标,适用于文本分类、词性标注等任务。
  • F 值
    • 综合考虑精确率(Precision)和召回率(Recall),公式如下:

      Fβ=(1+β2)PRβ2P+RF_\beta = (1 + \beta^2) \cdot \frac{P \cdot R}{\beta^2 \cdot P + R}

    • β=1\beta = 1 时,称为 F1 值。
  • 依存分析评价
    • UAS(Unlabeled Attachment Score):父节点正确识别的准确率。
    • LAS(Labeled Attachment Score):父节点及句法关系均正确识别的准确率。
  • 机器翻译评价
    • BLEU 值:统计机器译文与参考译文中 n-gram 的匹配比例。
  • 对话系统评价
    • 主要依赖人工评价,关注流畅度、相关性和准确性。

基础工具集与常用数据集

自然语言处理领域有许多成熟的工具和数据集,以下是一些常用的资源:

工具集

  • NLTK:提供丰富的语料库和词典资源,支持分句、词性标注、命名实体识别等任务。
  • spaCy:高性能的开源 NLP 库,支持多语言处理,内置预训练模型。
  • TextBlob:简单易用的 Python 库,适合快速原型开发。
  • LTP:针对中文的高效 NLP 平台,支持词法、句法和语义分析。
  • PyTorch:深度学习框架,支持动态神经网络构建,广泛应用于 NLP 模型开发。

数据集

  • 维基百科(Wikipedia):提供大规模的纯文本数据,常用于语言模型预训练。
  • Common Crawl:大规模网络爬虫数据集,涵盖多种语言。

    • 严守一/把/手机/关/了(大概率是这个)
    • 严守/一把手/机关/了(不明所以)
    • 严守/一把/手机/关/了(一般来说是「一把把」)
    • 严守一/把手/机关/了(不明所以)
    ↩︎