首页 > 其他分享 >nlp基础之-词汇表构建的具体做法

nlp基础之-词汇表构建的具体做法

时间:2024-08-09 10:38:24浏览次数:18  
标签:vocab nlp word 映射 词汇表 索引 词频 具体做法

词汇表构建(Vocabulary Building)是文本数据预处理中的关键步骤,涉及从训练语料中生成一个包含所有可识别单词、子词或字符的集合。具体做法如下:

1. 数据收集与清洗

  • 数据收集: 收集所有待处理的文本数据,包括训练集、验证集和测试集。
  • 数据清洗: 在构建词汇表之前,清洗数据以去除噪声和不必要的字符(如特殊符号、HTML标签等)。这一步确保词汇表包含的都是有用的词汇。

2. 确定词汇表的大小

  • 设定最大词汇表大小: 根据任务需求和计算资源,设定一个合理的词汇表大小限制。过大的词汇表可能导致计算开销过高,而过小的词汇表则可能无法覆盖所有有用的词汇。
  • 选择策略: 可以选择固定大小(如前10,000个最频繁的词)或根据具体任务需求动态调整词汇表大小。

3. 统计词频

  • 词频统计: 统计每个词(或子词)的出现频率。对于所有训练数据,计算每个词的出现次数,以决定其是否纳入词汇表。
  • 常见工具: 使用工具或库(如 Python 的 collections.CounterNLTK)来统计词频。

4. 选择词汇表

  • 频率排序: 按照词频从高到低对词汇进行排序。
  • 选择词汇: 根据设定的最大词汇表大小,选择前 N 个最频繁的词(或子词)作为词汇表的内容。对于频率较低的词,通常用特殊的 <UNK> 标记(未登录词标记)代替。

5. 构建词汇表

  • 词到索引的映射: 为词汇表中的每个词分配一个唯一的整数索引。通常,特殊标记(如 <PAD><UNK><SOS><EOS>)会被分配给特定的索引。
  • 索引到词的映射: 创建一个反向映射,用于将索引转换回词。

6. 处理未登录词(OOV)

  • 未登录词标记: 对于训练数据中未出现的词或词汇表外的词,使用 <UNK> 标记进行替代。这确保了模型在遇到未知词时不会出错。
  • 预处理阶段: 在将文本转换为模型输入时,将所有未登录词映射到 <UNK>

7. 存储和加载词汇表

  • 保存词汇表: 将词汇表(词到索引的映射)保存到文件中,以便在模型训练和推理阶段使用。通常保存为 JSON、CSV 或二进制格式。
  • 加载词汇表: 在模型训练和推理时,从文件中加载词汇表,并使用它将文本数据转换为模型输入格式。

示例代码

以下是 Python 中使用 collections.Counter 构建词汇表的示例代码:

from collections import Counter
import json

# 示例文本数据
texts = ["I love machine learning.", "Deep learning is fascinating.", "I love programming."]

# 数据清洗和分词(这里简化处理)
def tokenize(text):
    return text.lower().split()

# 统计词频
word_freq = Counter()
for text in texts:
    words = tokenize(text)
    word_freq.update(words)

# 选择前 N 个最频繁的词作为词汇表
vocab_size = 10
vocab = [word for word, freq in word_freq.most_common(vocab_size)]

# 添加特殊标记
vocab = ["<PAD>", "<UNK>"] + vocab

# 词到索引映射
word_to_index = {word: idx for idx, word in enumerate(vocab)}

# 保存词汇表
with open('vocab.json', 'w') as f:
    json.dump(word_to_index, f)

# 加载词汇表
with open('vocab.json', 'r') as f:
    word_to_index = json.load(f)

print(word_to_index)

总结

词汇表构建的关键在于从训练数据中提取并保存最常见的词汇,处理未登录词,并将词汇表映射到索引。在实际应用中,选择合适的词汇表大小和处理策略对于模型的性能至关重要。

标签:vocab,nlp,word,映射,词汇表,索引,词频,具体做法
From: https://www.cnblogs.com/chentiao/p/18350353

相关文章

  • 【深度学习与NLP】——快速入门Pytorch基本语法
    目录Pytorch基本语法1.1认识Pytorch1.1.1什么是Pytorch1.1.2Pytorch的基本元素操作1.1.3 Pytorch的基本运算操作1.1.4 关于TorchTensor和Numpyarray之间的相互转换1.1.5小节总结1.2Pytorch中的autograd1.2.1关于torch.Tensor1.2.2关于Tensor的操作1.2.3......
  • 无法在 Gekko 中求解 MINLP(警告不再有可能的试验点且没有整数解)
    我对python中的Gekko包非常陌生。我的目标是最大化'Q_factor'我已有的训练有素的TensorFlow模型(.keras)。我在稳态模式(m.options.IMODE=2)下使用Gekko进行参数估计,并使用(m.options.SOLVER=1)进行以下一些约束:我的MINLP......
  • HanLP和BERT-BiLSTM-CRF在命名实体识别上的区别
    HanLP和BERT-BiLSTM-CRF在命名实体识别(NamedEntityRecognition,NER)方面的主要区别体现在模型架构、特征提取能力、训练方式以及应用场景的适应性上。1.模型架构HanLP:HanLP是一个开源的自然语言处理工具包,它提供了包括命名实体识别在内的多种中文文本处理功能。HanLP内部......
  • NLP从零开始------7基础文本处理之关键词提取
    1.关键词提取技术简介    在现代。文本是海量的信息中量最大的、使用最广泛的一种数据类型。这些信息数据虽然能为人们的生活提供便利。但是在提取有价值的信息时仍面临着困难。通过关键词提取可以快速地提取一篇新闻的关键信息。    关键词是能够反应文本主......
  • NLP从零开始------6基础文本处理之命名实体识别
    1.命名实体识别介绍        命名实体识别(NamedEntityRecognition,NER)中的“命名实体”一般是指文本中具有特别意义或指代性非常强的实体(比如:人名,地名,时间或者机构组织等)。        命名实体可分为实体类、时间类和数字类3大类,以及人名、机构名、地名、时间......
  • Datawhale AI 夏令营--NLP自然语言学习过程
    Task1:首先我们先无脑跑通本次学习的第一个baseline1.本次我们使用的是魔塔社区提供的GPU进行项目推进:2.在Notebook中启用由魔塔提供的编译服务,我们运行Task1代码,随后将生成的txt文档上传到评分的NLP竞赛平台,最后会得到本次学习的第一个分数。(可能到这里很多初学者都不明白......
  • 《昇思25天学习打卡营第17天|热门LLM及其他AI应用-基于MindNLP+MusicGen生成自己的个
    基于MindNLP+MusicGen生成自己的个性化音乐MusicGen是来自MetaAI的JadeCopet等人提出的基于单个语言模型(LM)的音乐生成模型,能够根据文本描述或音频提示生成高质量的音乐样本,相关研究成果参考论文《SimpleandControllableMusicGeneration》。MusicGen是一种单个语言模......
  • 从零入门NLP竞赛Task1学习记录
    一、魔搭平台操作流程首先,通过阅读文档,我按照相应步骤进入了魔搭平台,并在GPU环境下上传了数据和代码文件。在成功运行并跑通baseline后,我发现下载的压缩包和对应代码文件的具体用途目前还不甚明了,但我相信通过后续的学习,我会逐渐理解它们的作用。在等待过程中,我顺便了解了机器......
  • 一文搞懂NLP自然语言处理
    自然语言处理(NLP,NaturalLanguageProcessing)作为人工智能的一个重要分支,近年来得到了广泛的关注和应用。无论你是AI初学者还是有经验的开发者,深刻理解NLP的基本概念和应用场景都是非常必要的。本文将带你从零开始,全面了解NLP的核心知识与技术。一、什么是自然语言处理?自然......