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

相关推荐
科技小花3 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
zhuiyisuifeng4 小时前
2026前瞻:GPTimage2镜像官网或将颠覆视觉创作
人工智能·gpt
徐健峰4 小时前
GPT-image-2 热门玩法实战(一):AI 看手相 — 一张手掌照片生成专业手相分析图
人工智能·gpt
weixin_370976354 小时前
AI的终极赛跑:进入AGI,还是泡沫破灭?
大数据·人工智能·agi
Slow菜鸟4 小时前
AI学习篇(五) | awesome-design-md 使用说明
人工智能·学习
冬奇Lab5 小时前
RAG 系列(五):Embedding 模型——语义理解的核心
人工智能·llm·aigc
深小乐5 小时前
AI 周刊【2026.04.27-05.03】:Anthropic 9000亿美元估值、英伟达死磕智能体、中央重磅定调AI
人工智能
码点滴5 小时前
什么时候用 DeepSeek V4,而不是 GPT-5/Claude/Gemini?
人工智能·gpt·架构·大模型·deepseek
狐狐生风5 小时前
LangChain 向量存储:Chroma、FAISS
人工智能·python·学习·langchain·faiss·agentai
波动几何5 小时前
CDA架构代码工坊技能cda-code-lab
人工智能