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

相关推荐
山海青风2 小时前
藏语自然语言处理入门 - 4 找相似的句子
人工智能·自然语言处理
audyxiao0012 小时前
NeurIPS 2025论文分享|FedFree:突破知识共享壁垒的异构联邦学习新框架
大数据·人工智能·机器学习·大模型·智能体
stbomei3 小时前
2025 AI 落地图谱:从技术突破到产业重构的变革之路
人工智能·重构
AI数据皮皮侠4 小时前
全国各省市绿色金融指数及原始数据(1990-2022年)
大数据·人工智能·python·深度学习·机器学习·金融
zzywxc7874 小时前
AI行业应用全景:从金融风控到智能制造的落地实践与技术解析
人工智能·深度学习·spring·机器学习·prompt·制造
丁学文武4 小时前
大模型原理与实践:第二章-Transformer架构_第2部分Encoder-Decoder架构
人工智能·深度学习·transformer
liliangcsdn4 小时前
基于ollama运行27b gemma3解决ffmpeg命令生成问题
人工智能·ffmpeg
云雾J视界5 小时前
算法偏见的解药:将敏捷“灵魂”注入AI伦理
人工智能·算法·谷歌·伦理债·算法偏见·高效程序员·ai决策系统
码界奇点5 小时前
京东JoyAgent-JDGenie开源多智能体系统如何重塑AI应用落地新范式
人工智能·ai·智能手机·开源