分词与词性标注:文本处理的第一步
分词与词性标注:文本处理的第一步
为什么需要分词?
在自然语言处理(NLP)中,计算机所面对的原始文本只是一串连续的字符。要让机器“读懂”句子,必须先将连续的字符流切分成有意义的词语单元。这个过程就是分词。英文等语言可以利用空格自然分词,但对于中文、日文等无天然分隔的语言,分词是必须攻克的第一道关卡。
- 中文分词示例:
原始文本:人工智能正在改变世界
分词结果:人工智能 / 正在 / 改变 / 世界
分词的准确性直接影响下游任务(如文本分类、情感分析、机器翻译)的质量。一个错误的分词可能导致完全不同的语义理解。例如,“南京市长江大桥”可能被错误分成“南京/市长/江大桥”,正确应为“南京市/长江大桥”。
分词的主要方法
目前主流的分词方法可分为三类:
1. 基于规则的方法
依靠人工构建的词典和语言学规则进行正向或逆向最大匹配。
优点:实现简单,能保证词典中存在的词被准确切出。
缺点:严重依赖词典质量,无法识别未登录词(新词、专有名词),歧义处理能力弱。
2. 基于统计的方法
利用大规模标注语料库,学习字与字之间成词的概率。常用模型包括隐马尔可夫模型(HMM)、条件随机场(CRF)。
核心思想:一个字序列成为词的概率越高,越可能被切分成一个词。例如,在训练语料中“确实”经常连续出现,而“的确实”频率较低,系统会倾向将“的/确实”切分开。
3. 基于深度学习的方法
使用循环神经网络(RNN)、长短期记忆网络(LSTM)或 Transformer 架构(如 BERT)进行端到端的分词,能够自动学习上下文特征,对歧义和未登录词有更好的泛化能力。如今主流工具(如 jieba 的精确模式结合了统计与规则,而工业界很多转向预训练模型)普遍采用混合策略。
什么是词性标注?
词性标注(Part-of-Speech Tagging)是在分词的结果上,为每个词语标注其语法角色,如名词(n)、动词(v)、形容词(a)、副词(d)等。它为后续的句法分析、实体识别提供了关键信息。
- 标注示例:
分词:我 / 爱 / 自然 / 语言 / 处理
词性标注:我/r 爱/v 自然/d 语言/n 处理/v(r:代词, v:动词, d:副词, n:名词)
词性标注的挑战与常用标签集
词性标注的难点在于兼类词(同一个词在不同语境下具有不同词性)。例如:
- “我喜欢打篮球” 中的“打”是动词(v)。
- “买了一打啤酒” 中的“打”是量词(q)。
为解决兼类问题,现代标注系统会考虑上下文信息。中文领域常用的词性标签集包括:
- 北大标准(PKU,如:n 名词,vn 名动词,ad 副形词)
- 863词性标注集(更细化)
- Universal Dependencies (UD) POS tags(跨语言通用标签)
实用工具快速上手
初学者无需从零实现算法,可以借助开源工具立即体验分词与词性标注的魅力。
1. jieba (Python)
import jieba.posseg as pseg
words = pseg.cut("我爱自然语言处理")
for word, flag in words:
print(f'{word} {flag}')
输出:
我 r
爱 v
自然 l
语言 n
处理 v
jieba 集成了一阶隐马尔可夫模型,兼顾速度与准确率,适合入门与中小规模应用。
2. HanLP
HanLP 提供了更丰富的模型,包括感知机、CRF 以及基于 Transformer 的深度学习模型。
import hanlp
tokenizer = hanlp.load(hanlp.pretrained.tok.COARSE_ELECTRA_SMALL_ZH)
tagger = hanlp.load(hanlp.pretrained.pos.CTB9_POS_ELECTRA_SMALL)
tokens = tokenizer('商品和服务')
pos = tagger(tokens)
print(list(zip(tokens, pos)))
输出效果:[('商品', 'NN'), ('和', 'CC'), ('服务', 'NN')]
3. 在线演示
对于不想本地安装的用户,可以使用 LTP(语言技术平台)或 Stanford CoreNLP 的在线 Demo,直接输入句子查看分词与词性标注结果,帮助理解基本原理。
常见问题与精度提升技巧
- 分词粒度问题:有些场景需要细粒度(“自然语言”切为“自然/语言”),有些需要粗粒度(保留“自然语言”作为一个词)。通常通过自定义词典控制。
在 jieba 中:jieba.add_word("自然语言")或jieba.suggest_freq("自然语言", True)。 - 未登录词识别:人名、地名、新造词(如“凡尔赛”)容易切错。使用命名实体识别(NER)作为补充,或通过上传用户词典来解决。
- 词性标注一致性:不同工具对同一词的标注可能不同。实际项目中应统一标注规范,并根据业务数据微调模型。
分词与词性标注的下游应用
完成这两个步骤后,文本就变成了结构化的“词+词性”序列,可直接用于:
- 文本分类:提取名词、动词作为特征。
- 关键词提取:结合词性过滤停用词,如只保留名词和动词。
- 句法分析:作为依存句法分析输入的必备步骤。
- 信息检索:倒排索引的建立、搜索词的分词。
小结
分词与词性标注是任何中文自然语言处理任务的基础中的基础。理解其原理并掌握至少一种工具的使用,是进入 NLP 领域的第一个里程碑。动手实践是最好的学习方式:立即打开 Python 环境,用 jieba 或 HanLP 跑一遍你手头的中文文本,观察分词结果,调整词典,你会迅速建立起对文本处理的感觉。
下一步学习建议:在掌握本课后,可以进一步学习《命名实体识别》或《句法分析基础》,构建完整的自然语言理解流水线。