NLP学习系列 | 构建词典

一、知识总结

在 NLP 系统中构建词典,核心是围绕 "适配任务、数据驱动、可控质量"

1. 核心目标

  • 按任务定方向:分词词典侧重 "基础词 + 领域词",词性标注词典需加 "词汇 - 词性映射",语义理解词典要补 "专业术语 + 语义关联"(如同义词);
  • 划范围:确定是通用词典(日常词汇)还是领域词典(如医疗 / 法律术语),以及词汇颗粒度(单字 / 复合词 / 短语)。

2. 数据源

  • 优先组合:通用语料(如新闻、维基,覆盖广)+ 领域语料(如医疗文献,精准)+ 权威词典(如《现汉》,校准规范);
  • 避坑:少用纯噪声数据(如杂乱社交媒体),小场景可补人工整理的术语表(保证精度)。

3. 预处理

  • 清洗:去特殊符号 / 错别字,中文繁简统一、英文大小写归一;
  • 提词:中文用 jieba 等工具分词,英文按空格拆分 + 处理缩写;过滤停用词(如 "的 /the")和低频词(如出现 < 5 次的词,减冗余);
  • 规范:词形还原(如 "running"→"run")、同义词合并(如 "手机 - 移动电话")。

4. 核心结构设计

  • 必选字段:词汇(唯一标识)+ 词性(如 "苹果→名词")+ 频次(反映重要性);
  • 可选字段(按需加):语义关联(同义词 / 上下位词)、领域标签(如 "靶向药→医疗")、预训练词向量(支撑语义计算);
  • 存储:小规模用 TXT/CSV,中大规模用 JSON / 数据库,集成工具(如 jieba)用对应专用格式。

5. 常用构建方法

  • 自动法:用 TF-IDF、预训练模型(如 BERT)从语料提词,适合大规模基础词典;
  • 半自动法:自动提词后人工过滤错误(如误提的无意义词),平衡效率和精度;
  • 手动法:纯人工整理(如小领域术语表),适合高精度小场景。

6. 迭代

  • 定期更新:新增新词(如 "AI 生成式")、淘汰过时词(如旧网络用语);
  • 验证优化:用任务效果(如分词准确率)反向调整词典,比如漏分的词补进词典。

二、代码实践

1、导入数据

pip install torch==2.1.2 torchtext==0.16.2

复制代码
import torchtext
from torchtext.vocab import build_vocab_from_iterator
from collections import Counter
from torchtext.data.utils import get_tokenizer
import jieba,re,torch

data = [
    "我是技术小黑啊~",
    "我是一个深度学习博主",
    "这是学习NLP的一个训练集",
    "你可以通过CSDN找到我"
]

2、设置分词器

pip install jieba

复制代码
import jieba

import os
# 打印当前工作目录(绝对路径)
print("当前 Python 工作目录:", os.getcwd())

tokenizer = jieba.lcut
jieba.load_userdict("my_dict.txt")

当前 Python 工作目录: /root/365天训练营/NLP小白入门/day02

3、清除标点符号与停用词

在使用 jieba 进行分词时,可以通过去除标点符号来减少分词结果的噪音

复制代码
def remove_punctuation(text):
    return re.sub(r'[^\w\s]', '', text)

stop_words = set([
    "的","这","是"
])

# 去除停用词的函数
def remove_stopwords(words):
    return [word for word in words if word not in stop_words]

4、设置迭代器

复制代码
def yield_tokens(data_iter):
    for text in data_iter:
        text = remove_punctuation(text)
        text = tokenizer(text)
        text = remove_stopwords(text)
        yield text

5、构建词典

复制代码
# 使用build_vocab_from_iterator来构建词汇表
vocab = build_vocab_from_iterator(yield_tokens(data), specials=["<unk>"])

# 将未知的词汇索引为0
vocab.set_default_index(vocab["<unk>"])

6、文本数字化

复制代码
# 打印词汇表中的内容
print("词典大小:", len(vocab))
print("词典内部映射:", vocab.get_stoi())

text = "这是我的365天深度学习训练营教案"
words = remove_stopwords(jieba.lcut(text))
print("\n")
print("jieba分词后的文本:", jieba.lcut(text))
print("去除停用词后的文本:", remove_stopwords(jieba.lcut(text)))
print("数字化后的文本:",[vocab[word] for word in words])

词典大小: 18
词典内部映射: {'集': 17, '通过': 16, '这是': 15, '深度': 13, '<unk>': 0, '可以': 8, '我': 1, '一个': 2, '学习': 3, 'NLP': 5, '啊': 9, '你': 6, 'CSDN': 4, '技术': 12, '博主': 7, '小黑': 10, '训练': 14, '找到': 11}


jieba分词后的文本: ['这', '是', '我', '的', '365', '天', '深度', '学习', '训练营', '教案']
去除停用词后的文本: ['我', '365', '天', '深度', '学习', '训练营', '教案']
数字化后的文本: [1, 0, 0, 13, 3, 0, 0]

熟悉了NLP领域中的字典构建 , 后续为继续学习NLP其他知识打下基础.

相关推荐
爱打球的白师傅9 分钟前
python机器学习工程化demo(包含训练模型,预测数据,模型列表,模型详情,删除模型)支持线性回归、逻辑回归、决策树、SVC、随机森林等模型
人工智能·python·深度学习·机器学习·flask·逻辑回归·线性回归
烟袅18 分钟前
Trae 推出 Solo 模式:AI 开发的“一人一项目”时代来了?
前端·人工智能·solo
元宇宙时间33 分钟前
AI赋能的$AIOT:打造Web3全周期智能生态的价值核心
人工智能·web3
瑞禧生物ruixibio34 分钟前
Biotin-Oridonin B,生物素标记冬凌草乙素,可用于蛋白质修饰、药物靶标研究
人工智能
MediaTea37 分钟前
Python 第三方库:TensorFlow(深度学习框架)
开发语言·人工智能·python·深度学习·tensorflow
GIS好难学1 小时前
【智慧城市】2025年华中农业大学暑期实训优秀作品(2):基于Vue框架和Java后端开发
人工智能·智慧城市
Joker-Tong1 小时前
大模型数据洞察能力方法调研
人工智能·python·agent
哔哩哔哩技术1 小时前
VisionWeaver:从“现象识别”到“病因诊断”,开启AI视觉幻觉研究新篇章
人工智能
道可云1 小时前
AI赋能:农业场景培育如何支撑乡村全面振兴
人工智能
极客代码1 小时前
第七篇:深度学习SLAM——端到端的革命--从深度特征到神经辐射场的建图新范式
人工智能·python·深度学习·计算机视觉·slam·回环检测·地图构建