当前位置: 首页 > news >正文

NLP学习系列 | 构建词典

  • 🍨 本文为🔗365天深度学习训练营中的学习记录博客
  • 🍖 原作者:K同学啊

一、知识总结

在 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,torchdata = ["我是技术小黑啊~","我是一个深度学习博主","这是学习NLP的一个训练集","你可以通过CSDN找到我"
]

2、设置分词器

pip install jieba

import jiebaimport 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其他知识打下基础.

http://www.dtcms.com/a/411475.html

相关文章:

  • 华意网站建设网络公司怎么样有自建服务器做网站的吗
  • React学习第三天——生命周期
  • 江门网站制作专业课程网站开发开题报告
  • 【计算机通识】GCC、G++、Makefile、CMake 详细对比指南
  • winform c# 做的2个运控平台,通过修改表格 的方式,也可以通过语音识别的交互方式,更加智能。
  • 使用Optimum-habana对LLM模型训练推理
  • 提升RAG知识库质量,文档解析如何解决上下文丢失与结构错误问题?
  • 两个表格(Excel/CSV)字段不完全一致,要合并在一起
  • 图书网站建设一般纳税人企业所得税
  • 基于Python的二手车价格数据分析与预测系统的设计与实现
  • 网站建设是什么科目免费app网站下载大全
  • API协作云:从OpenAPI到MCP跨语言的接口对接实践
  • 网站建设辶金手指排名十二cms系统设计方案
  • k8s集群部署nacos集群
  • 成都前几年网站建设公司小红书怎么做关键词排名优化
  • 设计网站报价企业网络推广方案策划书
  • 做内容网站好累网泰网站建设网络推广
  • 自己做网站app信阳企业网站开发
  • 软件详细测评一:百宝音配音平台
  • 建站所有步骤国际新闻最新消息今天新闻大事件视频
  • 网站的互动功能seo的中文意思
  • 辽宁省精神文明建设工作三大创建活动网站培训班线上优化
  • Docker 快速部署 Dify + 应用构建完整流程
  • 矩形碰撞检测
  • 队列+宽搜(BFS)-103.二叉树的锯齿形层序遍历-力扣(LeetCode)
  • 使用Eigen矩阵库,计算Ax = B (m>n)矩阵的方法
  • MIT 6.S081 文件系统的基本结构 (Lab10:File system)
  • 跨境电商建站公司北京建设安全网络平台87
  • 【读书笔记】深入理解JVM C1~3
  • Spring Boot携手Leaflet,点亮省级旅游口号WebGIS可视化之路