Torchtext 0.12+ API 根据token,得到语料中统计的频数值(3)

2023-10-27

使用OrderedDict构造vocab时会按照从大到小的排序来构造token,因此借用这个特点:

  1. 构造一个列表,专门保存vocab中每一个单词的频数,此时列表的下标位置与vocab中下标位置是一一对应的
  2. 借助vocab将文本->token
  3. 直接用列表的token对应到频数列表即可得到对应token的频数值

注意:由于有时需要构造特殊字符,如<UNK>,而且在构造时会直接放到最前面,因此我们在对应频数的列表时,需要把特殊字符构造的下标删除掉

前面的内容

Torchtext 0.12+新版API学习与使用示例(1)
Torchtext 0.12+ API构造训练用DataLoader与词向量的Embedding(2)

示例代码

from torchtext.vocab import vocab
from collections import Counter, OrderedDict
from torch.utils.data import Dataset, DataLoader
from torchtext.transforms import VocabTransform
import numpy as np


class TextDataSet(Dataset):
    def __init__(self, text_list):
        """
        使用新版API的一个简单的TextDataSet
        :param text_list: 语料的全部句子
        """
        # 这里使用频数排序构造 torchtext 的 vocab
        total_word_list = []
        for _ in text_list:  # 将嵌套的列表([[xx,xx],[xx,xx]...])拉平 ([xx,xx,xx...])
            total_word_list += _.split(" ")
        counter = Counter(total_word_list)  # 统计计数
        sorted_by_freq_tuples = sorted(counter.items(), key=lambda x: x[1], reverse=True)  # 构造成可接受的格式:[(单词,num), ...]
        ordered_dict = OrderedDict(sorted_by_freq_tuples)
        # 开始构造 vocab
        specials = ["<UNK>", "<SEP>"]
        self.specials = specials  # 特殊字符需要记录下来!
        my_vocab = vocab(ordered_dict, specials=specials)  # 单词转token,specials里是特殊字符,可以为空
        vocab_transform = VocabTransform(my_vocab)
        # 开始构造DataSet
        self.text_list = text_list  # 原始文本
        self.vocab_transform = vocab_transform
        self._len = len(text_list)  # 文本量
        # =============前面的都是套路,真正有用的就下面一行,前面的部分有疑问请参考前面的博客内容==================
        self.freq = [i[1] for i in sorted_by_freq_tuples]  # 记录频数统计

    def __getitem__(self, id_index):  # 每次循环的时候返回的值
        sentence = self.text_list[id_index]
        word_ids = self.vocab_transform(sentence.split(' '))
        freq = np.take(self.freq, np.array(word_ids) - len(self.specials))
        return word_ids, freq

    def __len__(self):
        return self._len


def main():
    sentence_list = [  # 假设这是全部的训练语料
        "nlp is natural language processing strives",
        "nlp build machines that understand",
        "nlp model respond to text or voice data and respond with text",
    ]
    text_dataset = TextDataSet(sentence_list)  # 构造 DataSet
    data_loader = DataLoader(text_dataset, batch_size=1)  # 将DataSet封装成DataLoader
    for sentence, word_freq in data_loader:
        print("====================================")
        print("原句是:", sentence)
        print("每个单词的频数:", word_freq)


if __name__ == '__main__':
    main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Torchtext 0.12+ API 根据token,得到语料中统计的频数值(3) 的相关文章

  • 自动同义词检测方法

    我目前正在研究一种基于神经网络的短文档分类方法 由于我正在使用的语料库通常在十个单词左右 因此标准统计文档分类方法的用途有限 因此 我正在尝试对训练中提供的匹配实施某种形式的自动同义词检测 更具体地说 我的问题是关于解决以下情况 假设我有
  • 将三元组、二元组和一元组与文本匹配;如果一元或二元是已经匹配的三元的子串,则通过; Python

    main text 是包含已被词性标记的句子的列表的列表 main text the DT mad JJ hatter NN likes VB tea NN and CC hats NN the DT red JJ queen NN hat
  • 添加对 CountVectorizer (sklearn) 的词干支持

    我正在尝试使用 sklearn 将词干添加到 NLP 中的管道中 from nltk stem snowball import FrenchStemmer stop stopwords words french stemmer French
  • C++ - 如何使用 C++ 读取 Unicode 字符(例如印地语脚本),或者是否有通过其他编程语言更好的方法?

    我有一个像这样的印地语脚本文件 3 我必须编写一个程序 为每个句子中的每个单词添加一个位置 因此 特定单词位置的每一行的编号应以括号中的 1 开头 输出应该是这样的 3 1 2 3 4 5 6 7 8 9 上面这句话的意思是 3 India
  • 从动词列表中检索动词

    我有一个全是动词的字符串列表 我需要获取每个动词的词频 但我想将 想要 想要 想要 和 想要 等动词计为一个动词 形式上 动词 被定义为 4 个单词的集合 其形式为 X Xs Xed Xing 或形式为 X Xes Xed Xing 其中
  • word2vec gensim 多种语言

    这个问题完全超出了我的想象 我正在使用 gensim 训练 Word2Vec 模型 我提供了多种语言的数据 即英语和印地语 当我试图找到最接近 人 的词时 我得到的是 model wv most similar positive man O
  • 日语/字符的编程技巧[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个想法 可以编写一些网络应用程序来帮助我 也许还有其他人 更好地学习日语 因为我正在学习日语 我的问题是该网站主要是英文的 所以
  • doc2vec 获得良好性能所需的最小数据集大小是多少?

    在不同大小的数据集上进行训练时 doc2vec 的表现如何 原始语料库中没有提到数据集大小 所以我想知道从 doc2vec 中获得良好性能所需的最小大小是多少 有很多东西被称为 doc2vec 但它似乎最常指的是 Le 和 Mikolov
  • 下载变压器模型以供离线使用

    我有一个训练有素的 Transformer NER 模型 我想在未连接到互联网的机器上使用它 加载此类模型时 当前会将缓存文件下载到 cache 文件夹 要离线加载并运行模型 需要将 cache 文件夹中的文件复制到离线机器上 然而 这些文
  • python 中单词的动名词形式

    我想获得字符串的动名词形式 我还没有找到调用库来获取动名词的直接方法 我应用了以 ing 结尾的单词的规则 但是因为异常导致我收到了一些错误 然后 我检查 cmu 单词以确保生成的动名词单词正确 代码如下 import cmudict im
  • SpaCy 的相似度是如何计算的?

    初学者 NLP 问题在这里 similarity 方法如何运作 哇 spaCy 太棒了 它的tfidf模型可以更容易预处理 但w2v只有一行代码 token vector 惊人的 In his spaCy 上的 10 行教程 https g
  • 比较文本文档含义的最佳方法?

    我正在尝试找到使用人工智能和机器学习方法来比较两个文本文档的最佳方法 我使用了 TF IDF Cosine 相似度和其他相似度度量 但这会在单词 或 n gram 级别上比较文档 我正在寻找一种方法来比较meaning的文件 最好的方法是什
  • scikit加权f1分数计算及使用

    我有一个关于weightedsklearn metrics f1 score 中的平均值 sklearn metrics f1 score y true y pred labels None pos label 1 average weig
  • 用于估计(一元)困惑度的 NLTK 包

    我正在尝试计算我所拥有的数据的困惑度 我正在使用的代码是 import sys sys path append usr local anaconda lib python2 7 site packages nltk from nltk co
  • NLTK 中的无监督 HMM 训练

    我只是想进行非常简单的无监督 HMM 训练nltk http www nltk org 考虑 import nltk trainer nltk tag hmm HiddenMarkovModelTrainer from nltk corpu
  • SpaCy 模型“en_core_web_sm”的词汇量大小

    我尝试在 SpaCy 小模型中查看词汇量 model name en core web sm nlpp spacy load model name len list nlpp vocab strings 只给了我 1185 个单词 我也在同
  • ANEW 字典可以用于 Quanteda 中的情感分析吗?

    我正在尝试找到一种方法来实施英语单词情感规范 荷兰语 以便使用 Quanteda 进行纵向情感分析 我最终想要的是每年的 平均情绪 以显示任何纵向趋势 在数据集中 所有单词均由 64 名编码员按照 7 分李克特量表在四个类别上进行评分 这提
  • 如何对德语文本进行词形还原?

    我有一篇德语文本 我想对其应用词形还原 如果不可能进行词形还原 那么我也可以接受词干提取 Data 这是我的德语文本 mails Hallo Ich spielte am fr hen Morgen und ging dann zu ein
  • gensim如何计算doc2vec段落向量

    我正在看这篇论文http cs stanford edu quocle paragraph vector pdf http cs stanford edu quocle paragraph vector pdf 它指出 段落向量和词向量被平
  • SpaCy 中的自定义句子边界检测

    我正在尝试在 spaCy 中编写一个自定义句子分段器 它将整个文档作为单个句子返回 我编写了一个自定义管道组件 它使用以下代码来执行此操作here https github com explosion spaCy issues 1850 但

随机推荐

  • php上传和导出excel文件,(进阶篇)使用PHP导入Excel和导出数据为Excel文件

    有时需要将Excel表格的数据导入到mysql数据库中 我们使用PHP的一个开源项目PHP ExcelReader可以轻松实现Excel的导入 1 导入XLS PHP ExcelReader这是一个开源的项目 主要是来解析excel的文件
  • iOS 开发者账号添加手机号码 Program License Agreement has been updated.edit phone number

    苹果开发者账号经常性的更新一些开发协议让开发者同意 苹果爸爸的要求 同意就好了 只有Agent权限账号会收到 团队成员账号权限区别请参考 最近苹果开发者账号又更新了协议 apple id没有绑定手机号的 在开发者账号里会要求你必须绑定手机号
  • 研究生阶段的研究方向以及一些想法

    好久没有更新了 综合考虑后 即将入学 KAUST 成为一名硕博连读的学生了 出于导师研究方向以及个人兴趣的一些原因 希望在接下来的五年 深耕一下 Generative Models Continual Learning Zero Shot
  • 接口测试工具-Postman-安装和使用

    目录 Postman介绍 1 安装Postman 2 Postman 使用 2 1 合集 collections 2 2 发起请求 2 3 Get请求 2 3 1 无参数的Get请求 2 3 2 带参数的Get请求 2 4 Post请求 2
  • Python薪资的高涨原因及相应代码分析

    Python语言自问世以来 一直以其简洁 易学和多功能而受到广泛关注和应用 在近年来 Python编程语言的普及和应用领域的不断扩大 使得Python开发人员的需求量大幅增加 与此同时 Python工资也呈现出快速上涨的趋势 本文将深入探讨
  • JDK1.8新特性详解

    介绍 Java是世界上使用最广泛的编程语言之一 近年来随着互联网技术的高速发展 对Java的要求也越来越高 JDK1 8是Java平台上的一个重要版本 引入了许多新特性和改进 本文将详细介绍JDK1 8中的新特性和应用场景 一 Lambda
  • 日期处理(moment.js)使用笔记

    之前没接触moment js 在新项目中见到了 做一做使用笔记也是分享一下 安装 引用 npm install moment 或者 yarn add moment import moment from moment 导入文件 Vue pro
  • Spring Boot各版本与Java版本的对应兼容关系,与构建工具(Maven、Gradle)版本的对应兼容关系,对servlet 容器的支持

    by 垃圾程序员 当前文章具有时效性 在当前springboot的版本下做的整合 之后大家视情况可以直接到Spring的官网查看 Spring HomeLevel up your Java code and explore what Spr
  • MAC下QT5 + Xcode 4.6.3 使用小结

    1 直接在命令行里使用qmake 大家的MAC上面QT5的安装路径不同 导致不能直接使用qmake命令行 xcode项目也不能拿来就用 有两种方法可以直接在命令行里面使用qmake 1 修改 bash profile 此方法在PATH中添加
  • [C#学习] BindingNavigator控件

    一 概述 BindingNavigator控件的用户界面 UI 由一系列 ToolStrip 按钮 文本框和静态文本元素组成 用于进行大多数常见的数据相关操作 如添加数据 删除数据和在数据中导航 每个控件都可以通过 BindingNavig
  • Windows安全中心 你的IT管理员已限制对此应用的区域的访问

    打开本地组策略 gt 计算机配置 gt Windows设置 gt 安全设置 gt 本地策略 gt 安全选项 gt 打开安全选项后 gt 滚轮转动往下拉 gt 找到 用户账户控制 选择以管理员模式批准运行所有管理员 打开属性 选择已启用 应用
  • linux-文件时间详解

    不同的文件系统 不同的操作系统对于文件时间的设置是不同的 一般分为创建时间 birth 修改时间 ctime 访问时间 atime 一般默认情况下显示的是修改时间 ctime 即默认以修改时间 ctime 当作排序时间 即一般情况 ls l
  • vue中的事件绑定

    目录 1 事件处理 1 1 最简单的事件绑定例子 1 2 默认参数event 1 3 其它自定义参数 1 4 this 2 事件修饰符 2 1 prevent阻止默认事件 常用 2 2 stop阻止事件冒泡 常用 2 3 once事件只触发
  • [原创]微软BI专题-渐变维度Type2进化三部曲

    在ETL过程中 对于渐变维度的处理 一直是大家比较关注的问题 关于渐变维度的概念 我们在2007年8月的 渐变维度转换及其实现 一文中有所介绍 本文将在实际应用的对比中 提供三种处理渐变维度的方法 并比较其效率 第一代 SSIS控件时代 对
  • [数值计算-15]:函数近似值的线性与非线性拟合的原理与Python代码示例

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119973082 目录 第1章
  • Python实用脚本:统计TXT文件字数

    最近在用金山打字通练习98版的五笔输入法 想知道自己找的文章大概有多少个字数 因为txt文件打开看不了总字数 就复制后放在word看字数 感觉实在是麻烦 就找个了Python脚本来算字数 还能统计总共练习了多少个字 txt内容要转换成ANS
  • 解决httpcore和 httpclient 版本冲突,以及httpcore下载不了依赖的问题。

    目录 问题一 编辑 问题二 解决 问题一 maven install 报错说找不到httpcore 问题二 在项目运行时候找不到org apache http annotation ThreadSafe的类文件 解决 1 遇到该问题可能是h
  • 自动驾驶测试中的Re-simulation技术

    随着自动驾驶技术的发展 自动驾驶仿真的重要性越来越大 一是体现在上路之前可以通过仿真进行初步验证 二是体现在路上遇到问题时 可以通过仿真进行数据回放 改善算法模块性能 平时常见的自动驾驶仿真主要是利用软件搭载测试场景 然而 随着data d
  • 【解决】VS2019各种乱码的情况

    关于Visual Studio 2019控制台输出中文出现乱码问题及解决办法 1 从 txt文件中读取输出出现乱码 2 从中文字符串中读取输出出现乱码 3 上传git时 gitee github里出现乱码 总结 环境 Windows11 V
  • Torchtext 0.12+ API 根据token,得到语料中统计的频数值(3)

    使用OrderedDict构造vocab时会按照从大到小的排序来构造token 因此借用这个特点 构造一个列表 专门保存vocab中每一个单词的频数 此时列表的下标位置与vocab中下标位置是一一对应的 借助vocab将文本 gt toke