
- 文本语料在输送给模型前一般需要一系列的预处理工作,才能符合模型输入的要求,如:将文本转化成模型需要的张量,规范张量的尺寸等,而且科学的文本预处理环节还将有效指导模型超参数的选择,提升模型的评估指标。
文本预处理中包含的主要环节
- 文本处理的基本方法
- 文本张量表示方法
- 文本语料的数据分析
- 文本特征处理
- 数据增强方法
- one-hot 编码
- Word2vec
- Word Embedding
- 在实际生产应用中,我们最常使用的两种语言是中文和英文,因此,文本预处理部分的内容都将针对这两种语言进行讲解。
文本处理的基本方法
学习目标
- 了解什么是分词、词性标注、命名实体识别及其它们的作用
- 掌握分词、词性标注、命名实体识别流行工具的使用方法
分词
什么是分词
分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,分词过程就是找到这样分界符的过程。
示例:
工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作
==>
['工信处','女干事','每月','经过','下属','科室','都','要','亲口','交代','24','口','交换机','等','技术性','器件','的','安装','工作']
分词的作用
词作为语言语义理解的最小单元,是人类理解文本语言的基础。因此也是AI解决NLP领域高阶任务,如自动问答、机器翻译、文本生成的重要基础环节。
流行中文分词工具jieba
特性:
- 支持多种分词模式:
- 支持中文繁体分词
- 支持用户自定义词典
安装:
pip install jieba
试图将句子最精确地切开,适合文本分析。
import jieba
content = "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"
jieba.cut(content, cut_all=False) # cut_all默认为False
# 将返回一个生成器对象
<generator object Tokenizer.cut at 0x7f065c19e318>
# 若需直接返回列表内容,使用jieba.lcut即可
jieba.lcut(content, cut_all=False)
['工信处', '女干事', '每月', '经过', '下属', '科室', '都', '要', '亲口', '交代', '24', '口']
全模式分词
import jieba
content = "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"
jieba.lcut(content, cut_all=True)
# 输出:
# ['工信处', '处女', '女干事', '干事', '每月', '月经', '经过', '下属', '科室', '都', '要', '亲口', '交代', '24', '口', '交换机', '技术', '技术性', '器件', '的', '安装', '安装工', '装工', '工作']
在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
import jieba
content = "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"
jieba.cut_for_search(content)
# 将返回一个生成器对象
<generator object Tokenizer.cut at 0x7f065c19e318>
# 若需直接返回列表内容,使用jieba.lcut_for_search即可
jieba.lcut_for_search(content)
['工信处', '干事', '女干事', '每月', '经过', '下属', '科室', '都', '要', '亲口', '交代', '24', '口', '交换', '换机', '交换机', '等', '技术', '技术性', '器件', '的', '安装', '工作']
# 对'女干事','交换机'等较长词汇都进行了再次分词。
针对中国香港、台湾地区的繁体文本进行分词。
import jieba
content = "烦恼即是菩提,我暂且不提"
jieba.lcut(content)
['烦惱', '即', '是', '菩提', ',', '我', '暂且', '不', '提']
- 添加自定义词典后,jieba 能够准确识别词典中出现的词汇,提升整体的识别准确率。
- 词典格式:每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。
- 词典样式如下,具体词性含义请参照附录:jieba 词性对照表,将该词典存为 userdict.txt,方便之后加载使用。
云计算 5 n
李小福 2 nr
easy_install 3 eng
好用 300
韩玉赏鉴 3 nz
八一双鹿 3 nz
import jieba
res1=jieba.lcut("八一双鹿更名为八一南昌篮球队!")
# 没有使用用户自定义词典前的结果:
print(res1)
# ['八', '一双', '鹿', '更名', '为', '八一', '南昌', '篮球队', '!']
jieba.load_userdict("./userdict.txt")
res2=jieba.lcut("八一双鹿更名为八一南昌篮球队!")
# 使用了用户自定义词典后的结果:
print(res2)
# ['八一双鹿', '更名', '为', '八一', '南昌', '篮球队', '!']
官方文档:https://hanlp.hankcs.com/install.html
中英文 NLP 处理工具包,基于 tensorflow2.0,使用在学术界和行业中推广最先进的深度学习技术。
# 使用pip进行安装
pip install hanlp
#由于版本问题,可能很多模型只在hanlp[full]里存在,所以建议直接安装hanlp[full]
pip install "hanlp[full]" -U
安装过程极其容易由于版本依赖问题各种报错,建议单独创建一个全新环境进行安装。(本人是在Pycharm的命令行进行安装的,安装完整版需要很长时间,过程如下)
点击查看
(base) (.venv) PS D:\learn\learncode\nlp> pip install hanlp[full] -U
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/7f/7e/1b1cc4e0e7cc2666cceb3d250eef47a205f0821c330392cf45eb08156ce5/torch-2.7.0-cp310-cp310-win_amd64.whl (212.5 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 212.5/212.5 MB 7.4 MB/s eta 0:00:00
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/20/e0/5cb2f8493571f0a5a7273cd7078f191ac252a402b5fb9cb6091f14879109/torch-2.6.0-cp310-cp310-win_amd64.whl (204.2 MB)
...
Successfully installed absl-py-2.3.1 astunparse-1.6.3 cachetools-5.5.2 fasttext-wheel-0.9.2 flatbuffers-25.2.10 gast-0.4.0 google-auth-2.40.3 google-auth-oauthlib-1.0.0 google-pasta-0.2.0 grpcio-1.73.1
h5py-3.14.0 keras-2.13.1 libclang-18.1.1 markdown-3.8.2 numpy-1.24.3 oauthlib-3.3.1 opt-einsum-3.4.0 penman-1.2.1 perin-parser-0.0.19 protobuf-4.25.8 pyasn1-0.6.1 pyasn1-modules-0.4.2 pybind11-3.0.0 r
equests-oauthlib-2.0.0 rsa-4.9.1 scipy-1.15.3 six-1.17.0 tensorboard-2.13.0 tensorboard-data-server-0.7.2 tensorflow-2.13.1 tensorflow-estimator-2.13.0 tensorflow-intel-2.13.1 tensorflow-io-gcs-filesystem-0.31.0 torch-2.1.2 typing-extensions-4.5.0 werkzeug-3.1.3 wrapt-1.17.2
如果还是安装不了,请您参考这份资料 ☺️
hanlp.load()代码下载模型很慢,请耐心等待:
Downloading https://file.hankcs.com/hanlp/ner/ner_conll03_bert_base_cased_en_20211227_121443.zip to C:\Users\luzhanshi\AppData\Roaming\hanlp\ner/ner_conll03_bert_base_cased_en_20211227_121443.zip
10% 311.4 MiB 31.7 KiB/s ETA: 1 h [======= ]
import hanlp
# 加载CTB_CONVSEG预训练模型进行分词任务
tokenizer = hanlp.load('CTB6_CONVSEG')
print(tokenizer("工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"))
['工信处', '女', '干事', '每', '月', '经过', '下属', '科室', '都', '要', '亲口', '交代', '24', '口', '交换机', '等', '技术性', '器件', '的', '安装', '工作']
基于规则的分词器精度通常低于基于深度学习的模型(如 PKU_NAME_MERGED_SIX_MONTHS_CONVSEG
)
由于 CTB6_CONVSEG
模型相对较旧,建议你使用更新的预训练模型,例如 PKU_NAME_MERGED_SIX_MONTHS_CONVSEG
,它在分词效果上可能会更好,同时兼容性也更高。
import hanlp
# 加载PKU_NAME_MERGED_SIX_MONTHS_CONVSEG预训练模型进行分词任务
tokenizer = hanlp.load('PKU_NAME_MERGED_SIX_MONTHS_CONVSEG')
print(tokenizer("工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"))
['工信处', '女', '干事', '每月', '经过', '下属', '科室', '都', '要', '亲口', '交代', '24', '口', '交换机', '等', '技术性', '器件', '的', '安装', '工作']
若你主要处理中文分词,推荐使用 PKU_BERT_BASE_ZH
等基于 BERT 的模型,精度高于传统的 CONVSEG
模型。【低版本2.1.1及以下勿用】
import hanlp
# 加载 PyTorch 版本的分词模型(无 Keras 依赖)
tokenizer = hanlp.load(hanlp.pretrained.tok.PKU_BERT_BASE_ZH)
#PKU_BERT_BASE_ZH 是 HanLP 较新版本(如 2.3.0+)中新增的模型名称,而你当前环境中的 HanLP 版本可能较低(如 2.1.1 及以下)。旧版本的 hanlp.pretrained.tok 模块中并未定义该模。
# 测试分词
result = tokenizer("工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作")
print(result)
# 进行英文分词,英文分词只需要使用规则即可
tokenizer = hanlp.utils.rules.tokenize_english
tokenizer('Mr. Hankcs bought hankcs.com for 1.5 thousand dollars.')
['Mr.', 'Hankcs', 'bought', 'hankes.com', 'for', '1.5', 'thousand', 'ollars', '.']
hanlp.utils.rules.tokenize_english
是旧版本中的函数,新版本已移除。
建议使用 hanlp.load()
加载多语种模型:
import hanlp
# 加载多语种分词模型(支持英文)
tokenizer = hanlp.load(hanlp.pretrained.mtl.CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_SMALL_ZH)
# 分词(指定语言为英文)
tokens = tokenizer('Mr. Hankcs bought hankcs.com for 1.5 thousand dollars.', lang='en')
print(tokens)
hanlp.pretrained.mtl.CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_SMALL_ZH模型返回内容非常多,详参文末多语言分词模型
如果需要更精确的英文分词,建议使用专门的英文 NLP 工具(如 SpaCy、NLTK),它们针对英文有更完善的规则和模型支持。
pip install nltk
import nltk
nltk.download('punkt') # 首次运行需要下载分词器数据
from nltk.tokenize import word_tokenize
text = 'Mr. Hankcs bought hankcs.com for 1.5 thousand dollars.'
tokens = word_tokenize(text)
print(tokens)
['Mr.', 'Hankcs', 'bought', 'hankcs.com', 'for', '1.5', 'thousand', 'dollars', '.']
- 命名实体:通常我们将人名、地名、机构名等专有名词统称命名实体。如:周杰伦、黑山县、孔子学院、24 辊方钢矫直机。
- 顾名思义,命名实体识别(Named Entity Recognition,简称 NER)就是识别出一段文本中可能存在的命名实体。
举个栗子:
鲁迅,浙江绍兴人,五四新文化运动的重要参与者,代表作朝花夕拾。
→
鲁迅(人名)/ 浙江绍兴(地名)人 / 五四新文化运动(专有名词)/ 重要参与者 / 代表作 / 朝花夕拾(专有名词)
同词汇一样,命名实体也是人类理解文本的基础单元,因此也是 AI 解决 NLP 领域高阶任务的重要基础环节。
import hanlp
# 加载中文命名实体识别的预训练模型MSRA_NER_BERT_BASE_ZH
recognizer = hanlp.load(hanlp.pretrained.ner.MSRA_NER_BERT_BASE_ZH)
# 这里注意它的输入是对句子进行字符分割的列表,因此在句子前加入了list()
# list('上海华安工业(集团)公司董事长谭旭光和秘书张晚霞来到美国纽约现代艺术博物馆参观。')
# ['上','海','华','安','工','业','(','集','团',')','公','司','董','事'
print(recognizer(list('上海华安工业(集团)公司董事长谭旭光和秘书张晚霞来到美国纽约现代艺术博物馆')))
# 返回结果是一个装有n个元组的列表,每个元组代表一个命名实体,元组中的每一项分别代表具体的命名实体
#[('上海华安工业(集团)公司', 'NT', 0, 12), ('谭旭光', 'NR', 15, 18), ('张晚霞', 'NR', 21, 24), ('美国', 'NS', 26, 28), ('纽约现代艺术博物馆', 'NS', 28, 37)]
import hanlp
# 加载英文命名实体识别的预训练模型CONLL03_NER_BERT_BASE_UNCASED_EN
recognizer = hanlp.load(hanlp.pretrained.ner.CONLL03_NER_BERT_BASE_CASED_EN)
# 这里注意它的输入是对句子进行分词后的结果,是列表形式。
print(recognizer(["President", "Obama", "is", "speaking", "at", "the", "White", "Hous"]))
# 返回结果是一个装有n个元组的列表,每个元组代表一个命名实体,元组中的每一项分别代表具体的命名实体
#[('Obama', 'PER', 1, 2), ('White Hous', 'LOC', 6, 8)]
- 词性:语言中对词的一种分类方法,以语法特征为主要依据、兼顾词汇意义对词进行划分的结果,常见的词性有 14 种,如:名词、动词、形容词等。
- 顾名思义,词性标注(Part-Of-Speech tagging,简称 POS)就是标注出一段文本中每个词汇的词性。
词性标注以分词为基础,是对文本语言的另一个角度的理解,因此也常常成为 AI 解决 NLP 领域高阶任务的重要基础环节。
import jieba.posseg as pseg
print(pseg.lcut("我爱北京天安门"))
# 结果返回一个装有pair元组的列表,每个pair元组中分别是词汇及其对应的词性,具体词性含义请参照[附录]
#[pair('我', 'r'), pair('爱', 'v'), pair('北京', 'ns'), pair('天安门', 'ns')]
import hanlp
# 加载中文词性标注的预训练模型CTB5_POS_RNN_FASTTEXT_ZH
tagger = hanlp.load(hanlp.pretrained.pos.CTB5_POS_RNN_FASTTEXT_ZH)
# 输入是分词结果列表
print(tagger(['我', '的', '希望', '是', '希望', '和平']))
# 结果返回对应的词性
# ['PN', 'DEG', 'NN', 'VC', 'VV', 'NN']
import hanlp
# 加载英文词性标注的预训练模型PTB_POS_RNN_FASTTEXT_EN
tagger = hanlp.load(hanlp.pretrained.pos.PTB_POS_RNN_FASTTEXT_EN)
# 输入是分词结果列表
tagger(['I', 'banked', '2', 'dollars', 'in', 'a', 'bank', '.'])
['PRP', 'VBD', 'CD', 'NNS', 'IN', 'DT', 'NN', '.']
PTB_POS_RNN_FASTTEXT_EN模型很大:7.5G,并且各种报错,不建议使用了。。。
替代方案:
# 先安装spaCy和模型(工业级,高性能)
# pip install spacy
# python -m spacy download en_core_web_sm# # 下载英文小模型
import spacy
# 加载spaCy英文模型
nlp = spacy.load("en_core_web_sm")
text = "I banked 2 dollars in a bank ."
doc = nlp(text)
# 输出词性标注结果
print([(token.text, token.pos_) for token in doc])
#[('I', 'PRON'), ('banked', 'VERB'), ('2', 'NUM'), ('dollars', 'NOUN'), ('in', 'ADP'), ('a', 'DET'), ('bank', 'NOUN'), ('.', 'PUNCT')]
- 学习了什么是分词:
分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,分词过程就是找到这样分界符的过程。
- 学习了分词的作用:
词作为语言语义理解的最小单元,是人类理解文本语言的基础。因此也是 AI 解决 NLP 领域高阶任务,如自动问答、机器翻译、文本生成的重要基础环节。
- 学习了流行中文分词工具 jieba:
支持多种分词模式:精确模式、全模式、搜索引擎模式
支持中文繁体分词
支持用户自定义词典
- 学习了 jieba 工具的安装和分词使用。
- 学习了流行中英文分词工具 hanlp 及其安装和分词使用。
- 学习了什么是命名实体识别:
命名实体:通常我们将人名、地名、机构名等专有名词统称命名实体。如:周杰伦、黑山县、孔子学院、24 辊方钢矫直机。
顾名思义,命名实体识别(Named Entity Recognition,简称 NER)就是识别出一段文本中可能存在的命名实体。
- 命名实体识别的作用:
同词汇一样,命名实体也是人类理解文本的基础单元,因此也是 AI 解决 NLP 领域高阶任务的重要基础环节。
- 学习了使用 hanlp 进行命名实体识别。
- 学习了什么是词性标注:
词性:语言中对词的一种分类方法,以语法特征为主要依据、兼顾词汇意义对词进行划分的结果,常见的词性有 14 种,如:名词、动词、形容词等。
顾名思义,词性标注(Part-Of-Speech tagging,简称 POS)就是标注出一段文本中每个词汇的词性。
- 学习了词性标注的作用:
词性标注以分词为基础,是对文本语言的另一个角度的理解,因此也常常成为 AI 解决 NLP 领域高阶任务的重要基础环节。
- 学习了使用 jieba 和 hanlp 进行词性标注。
附录
- a:形容词
- b:区别词
- c:连词
- d:副词
- e:叹词
- f:方位词
- g:语素
- h:前接成分
- i:成语
- j:简称略称
- k:后接成分
- l:习用语
- m:数词
- n:名词
- ng:名词性语素
- nr:人名
- nrfg
- nrt
- ns:地名
- nt:机构团体名
- nz:其他专名
- o:拟声词
- p:介词
- q:量词
- r:代词
- s:处所词
- t:时间词
- u:助词
- ud:结构助词得
- ug:时态助词
- uj:结构助词的
- ul:时态助词了
- uv:结构助词地
- uz:时态助词着
- v:动词
- vd:副动词
- vg:动词性语素
- vi:不及物动词
- vn:名动词
- vq
- x:非语素词
- y:语气词
- z:状态词
- 【Proper Noun--NR, 专有名词】
- 【Temporal Noun--NT, 时间名词】
- 【Localizer--LC, 定位词】如 "内","左右"
- 【Pronoun--PN, 代词】
- 【Determiner--DT, 限定词】如 "这","全体"
- 【Cardinal Number--CD, 量词】
- 【Ordinal Number--OD, 次序词】如 "第三十一"
- 【Measure word--M, 单位词】如 "杯"
- 【Verb: VA, VC, VE, VV, 动词】
- 【Adverb: AD, 副词】如 "近","极大"
- 【Preposition: P, 介词】如 "随着"
- 【Subordinating conjunctions: CS, 从属连词】
- 【Conjuctions: CC, 连词】如 "和"
- 【Particle: DEC, DEG, DEV, DER, AS, SP, ETC, MSP, 小品词】如 "的话"
- 【Interjections: IJ, 感叹词】如 "哈"
- 【Onomatopoeia: ON, 拟声词】如 "哗啦啦"
- 【Other Noun-modifier: JJ】如 "发稿 / JJ 时间 / NN"
- 【Punctuation: PU, 标点符号】
- 【Foreign word: FW, 外国词语】如 "OK"
其他流行分词工具对比
(1) LTP (语言技术平台) - 哈工大版
- 优势:
- 工业级中文NLP工具包,支持分词、词性标注、NER、依存句法分析。
- 基于 CPM-Large 等大模型,精度高于 HanLP。
- 提供轻量级模型(仅40MB),适合生产环境。
- 示例:
(2) THULAC (清华版)
- 优势:
- 清华大学开源的高效中文词法分析工具。
- 速度和精度平衡,支持多线程。
- 示例:
(3) PaddleNLP (百度飞桨)
- 优势:
- 基于 ERNIE 3.0 等大模型,支持全流程NLP任务。
- 预训练模型丰富(如UIE、文心大模型),适合企业级应用。
- 示例:
from paddlenlp import Taskflow
seg = Taskflow("word_segmentation")
print(seg("工信处女干事每月经过下属科室"))
(4) SparkNLP (工业级分布式工具)
- 优势:
- 基于Apache Spark,支持分布式处理海量文本。
- 提供预训练模型(如BERT、RoBERTa)的分布式推理。
- 适用场景:大数据环境下的实时NLP处理。
3. 选择建议
需求场景 |
推荐工具 |
高精度学术研究 |
HanLP、LTP、PaddleNLP |
工业级生产环境 |
LTP、PaddleNLP、SparkNLP |
简单分词/快速处理 |
jieba、THULAC |
多语言支持 |
HanLP、SparkNLP |
4. 最新趋势(2025年)
- 大模型生态:如 ChatGLM4、通义千问 的API可直接用于分词和NLP任务,无需本地部署。
- 轻量化工具:如 LTP-Lite、FastHan 在保持精度的同时大幅提升速度。
- 领域定制化:医疗、法律等垂直领域的分词工具(如 BioNLP)逐渐成熟。
5. 总结
- 继续用 jieba:适合简单需求,无需复杂依赖。
- 升级到 HanLP/LTP:需要更高精度和功能扩展。
- 尝试 PaddleNLP/SparkNLP:企业级大规模应用。
- 关注大模型API:如百度ERNIE、阿里通义千问的云端NLP服务。
多语言分词模型
返回内容:
点击查看
{
"tok/fine": [
"Mr",
".",
"Hankcs",
"bought",
"hankcs",
".com",
"for",
"1.5",
"thousand",
"dollars",
"."
],
"tok/coarse": [
"Mr",
".",
"Hankcs",
"bought",
"hankcs.com",
"for",
"1.5",
"thousand",
"dollars",
"."
],
"pos/ctb": [
"NN",
"PU",
"NR",
"NN",
"NR",
"URL",
"P",
"CD",
"CD",
"NN",
"PU"
],
"pos/pku": [
"nx",
"w",
"nr",
"nx",
"nr",
"nx",
"p",
"m",
"nx",
"nx",
"w"
],
"pos/863": [
"ws",
"w",
"w",
"w",
"w",
"w",
"p",
"m",
"w",
"w",
"w"
],
"ner/msra": [
["Hankcs", "PERSON", 2, 3],
["hankcs", "PERSON", 4, 5],
["1.5", "DECIMAL", 7, 8]
],
"ner/pku": [
["Hankcs", "nr", 2, 3],
["hankcs", "nr", 4, 5]
],
"ner/ontonotes": [
["Hankcs", "PERSON", 2, 3],
["hankcs", "PERSON", 4, 5]
],
"srl": [],
"dep": [
[0, "root"],
[1, "punct"],
[4, "dep"],
[1, "dep"],
[6, "dep"],
[1, "dep"],
[1, "prep"],
[10, "nummod"],
[10, "nn"],
[1, "dep"],
[1, "punct"]
],
"sdp": [
[[8, "eCoo"]],
[[1, "mPunc"]],
[[0, "Root"], [1, "eCoo"]],
[[1, "eCoo"]],
[[1, "eCoo"]],
[[5, "eCoo"]],
[[5, "mPrep"]],
[[5, "Time"]],
[[10, "Nmod"]],
[[3, "eEqu"]],
[[10, "mPunc"]]
],
"con": [
"TOP",
[["FRAG", [["NP", [["NN", ["Mr"]]]], ["PU", ["."]], ["NR", ["Hankcs"]], ["NN", ["bought"]], ["NP", [["NR", ["hankcs"]]]], ["URL", [".com"]], ["P", ["for"]], ["QP", [["CD", ["1.5"]]]], ["CD", ["thousand"]], ["NN", ["dollars"]], ["PU", ["."]]]]]
]
}
这段代码使用了 HanLP 的多任务学习(MTL)模型 CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_SMALL_ZH
对英文句子进行分词和多种 NLP 任务分析。返回结果是一个包含多个 NLP 任务输出的字典,下面详细解析每个字段的含义:
1. 分词(Tokenization)
-
tok/fine
: 细粒度分词结果(按最小单位切分)
["Mr", ".", "Hankcs", "bought", "hankcs", ".com", "for", "1.5", "thousand", "dollars", "."]
["Mr", ".", "Hankcs", "bought", "hankcs.com", "for", "1.5", "thousand", "dollars", "."]
-
- 将
"hankcs.com"
视为一个整体(URL)。
2. 词性标注(Part-of-Speech Tagging)
模型使用了三种不同的词性标注标准:
-
pos/ctb
: 中文树库(Chinese Treebank)标准
NN
(普通名词)、PU
(标点)、NR
(专有名词)、URL
(网址)、P
(介词)、CD
(基数词)。
-
pos/pku
: 北京大学标准
nx
(未知名词)、w
(标点)、nr
(人名)、p
(介词)、m
(数词)。
-
pos/863
: 国家 863 标准
ws
(未知词)、w
(标点)、p
(介词)、m
(数词)。
3. 命名实体识别(Named Entity Recognition, NER)
模型使用了三种 NER 标注标准:
-
ner/msra
: MSRA 标准
- 识别出
"Hankcs"
和 "hankcs"
为人名(PERSON
),"1.5"
为小数(DECIMAL
)。
-
ner/pku
: 北京大学标准
-
ner/ontonotes
: OntoNotes 标准
4. 依存句法分析(Dependency Parsing, dep
)
输出每个词的依存关系(head index, relation type):
[
[0, "root"], # "Mr" 是根节点
[1, "punct"], # "." 依附于 "Mr"(标点)
[4, "dep"], # "Hankcs" 依附于 "bought"
[1, "dep"], # "bought" 依附于 "Mr"
[6, "dep"], # "hankcs" 依附于 ".com"
[1, "dep"], # ".com" 依附于 "Mr"
[1, "prep"], # "for" 依附于 "Mr"(介词修饰)
[10, "nummod"], # "1.5" 修饰 "dollars"(数字修饰)
[10, "nn"], # "thousand" 修饰 "dollars"(名词修饰)
[1, "dep"], # "dollars" 依附于 "Mr"
[1, "punct"] # "." 依附于 "Mr"(标点)
]
5. 语义依存分析(Semantic Dependency Parsing, sdp
)
描述词语间的语义关系(比依存分析更细粒度):
[
[[8, "eCoo"]], # "Mr" 与 "thousand" 是并列关系(eCoo)
[[1, "mPunc"]], # "." 是 "Mr" 的标点(mPunc)
[[0, "Root"], [1, "eCoo"]], # "Hankcs" 是根节点,并与 "Mr" 并列
[[1, "eCoo"]], # "bought" 与 "Mr" 并列
[[1, "eCoo"]], # "hankcs" 与 "Mr" 并列
[[5, "eCoo"]], # ".com" 与 "hankcs" 并列
[[5, "mPrep"]], # "for" 是 ".com" 的介词修饰(mPrep)
[[5, "Time"]], # "1.5" 是 ".com" 的时间修饰(Time)
[[10, "Nmod"]], # "thousand" 修饰 "dollars"(Nmod)
[[3, "eEqu"]], # "dollars" 与 "Hankcs" 是等价关系(eEqu)
[[10, "mPunc"]] # "." 是 "dollars" 的标点(mPunc)
]
6. 成分句法分析(Constituency Parsing, con
)
输出句子的短语结构树(括号表示法):
[
"TOP",
[["FRAG", [
["NP", [["NN", ["Mr"]]]],
["PU", ["."]],
["NR", ["Hankcs"]],
["NN", ["bought"]],
["NP", [["NR", ["hankcs"]]]],
["URL", [".com"]],
["P", ["for"]],
["QP", [["CD", ["1.5"]]]],
["CD", ["thousand"]],
["NN", ["dollars"]],
["PU", ["."]]
]]]
]
TOP
是根节点,FRAG
表示片段(非完整句子)。
- 包含
NP
(名词短语)、PU
(标点)、QP
(量词短语)等成分。
7. 语义角色标注(Semantic Role Labeling, srl
)
- 输出为空(
[]
),说明模型未识别出明显的谓词-论元结构(可能是英文支持有限或句子简单)。
总结
- 分词:支持细粒度和粗粒度分词(如 URL 合并)。
- 多标准词性标注:适应不同应用场景(如 CTB、PKU)。
- 命名实体识别:支持人名、数字等(不同标准结果略有差异)。
- 句法分析:提供依存关系和短语结构树。
- 语义分析:包括依存语义(SDP)和成分句法(CON)。
问题:模型对英文的处理可能不如中文精确(如 "bought"
被标注为名词 NN
,实际应为动词 VBD
)。如需更准确的英文分析,建议使用专用英文 NLP 工具(如 spaCy、NLTK)。