计数方法应用于PTB数据集

计数方法应用于PTB数据集

    • PTB数据集
    • ptb.py
    • 使用ptb.py
    • 计数方法应用于PTB数据集

PTB数据集

内容如下:

一行保存一个句子;将稀有单词替换成特殊字符 < unk > ;将具体的数字替换 成“N”

 we 're talking about years ago before anyone heard of asbestos having any questionable properties there is no asbestos in our products now neither <unk> nor the researchers who studied the workers were aware of any research on smokers of the kent cigarettes we have no useful information on whether users are at risk said james a. <unk> of boston 's <unk> cancer institute dr. <unk> led a team of researchers from the national cancer institute and the medical schools of harvard university and boston university 

ptb.py

使用PTB数据集:

由下面这句话,可知用PTB数据集时候,是把所有句子首尾连接了。

words = open(file_path).read().replace('\n', '<eos>').strip().split()

ptb.py起到了下载PTB数据集,把数据集存到文件夹某个位置,然后对数据集进行提取的功能,提取出corpus, word_to_id, id_to_word。

import sys
import os
sys.path.append('..')
try:import urllib.request
except ImportError:raise ImportError('Use Python3!')
import pickle
import numpy as npurl_base = 'https://raw.githubusercontent.com/tomsercu/lstm/master/data/'
key_file = {'train':'ptb.train.txt','test':'ptb.test.txt','valid':'ptb.valid.txt'
}
save_file = {'train':'ptb.train.npy','test':'ptb.test.npy','valid':'ptb.valid.npy'
}
vocab_file = 'ptb.vocab.pkl'dataset_dir = os.path.dirname(os.path.abspath(__file__))def _download(file_name):file_path = dataset_dir + '/' + file_nameif os.path.exists(file_path):returnprint('Downloading ' + file_name + ' ... ')try:urllib.request.urlretrieve(url_base + file_name, file_path)except urllib.error.URLError:import sslssl._create_default_https_context = ssl._create_unverified_contexturllib.request.urlretrieve(url_base + file_name, file_path)print('Done')def load_vocab():vocab_path = dataset_dir + '/' + vocab_fileif os.path.exists(vocab_path):with open(vocab_path, 'rb') as f:word_to_id, id_to_word = pickle.load(f)return word_to_id, id_to_wordword_to_id = {}id_to_word = {}data_type = 'train'file_name = key_file[data_type]file_path = dataset_dir + '/' + file_name_download(file_name)words = open(file_path).read().replace('\n', '<eos>').strip().split()for i, word in enumerate(words):if word not in word_to_id:tmp_id = len(word_to_id)word_to_id[word] = tmp_idid_to_word[tmp_id] = wordwith open(vocab_path, 'wb') as f:pickle.dump((word_to_id, id_to_word), f)return word_to_id, id_to_worddef load_data(data_type='train'):''':param data_type: 数据的种类:'train' or 'test' or 'valid (val)':return:'''if data_type == 'val': data_type = 'valid'save_path = dataset_dir + '/' + save_file[data_type]word_to_id, id_to_word = load_vocab()if os.path.exists(save_path):corpus = np.load(save_path)return corpus, word_to_id, id_to_wordfile_name = key_file[data_type]file_path = dataset_dir + '/' + file_name_download(file_name)words = open(file_path).read().replace('\n', '<eos>').strip().split()corpus = np.array([word_to_id[w] for w in words])np.save(save_path, corpus)return corpus, word_to_id, id_to_wordif __name__ == '__main__':for data_type in ('train', 'val', 'test'):load_data(data_type)

使用ptb.py

corpus保存了单词ID列表,id_to_word 是将单词ID转化为单词的字典,word_to_id 是将单词转化为单词ID的字典。

使用ptb.load_data()加载数据。里面的参数 ‘train’、‘test’、‘valid’ 分别对应训练用数据、测试用数据、验证用数据。

import sys
sys.path.append('..')
from dataset import ptbcorpus, word_to_id, id_to_word = ptb.load_data('train')print('corpus size:', len(corpus))
print('corpus[:30]:', corpus[:30])
print()
print('id_to_word[0]:', id_to_word[0])
print('id_to_word[1]:', id_to_word[1])
print('id_to_word[2]:', id_to_word[2])
print()
print("word_to_id['car']:", word_to_id['car'])
print("word_to_id['happy']:", word_to_id['happy'])
print("word_to_id['lexus']:", word_to_id['lexus'])

结果:

corpus size: 929589
corpus[:30]: [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 2324 25 26 27 28 29]id_to_word[0]: aer
id_to_word[1]: banknote
id_to_word[2]: berlitzword_to_id['car']: 3856
word_to_id['happy']: 4428
word_to_id['lexus']: 7426Process finished with exit code 0

计数方法应用于PTB数据集

其实和不用PTB数据集的区别就在于这句话。

corpus, word_to_id, id_to_word = ptb.load_data('train')

下面这句话起降维的效果

word_vecs = U[:, :wordvec_size]

整个代码其实耗时最大的是在下面这个函数上:

W = ppmi(C, verbose=True)

完整代码:

import sys
sys.path.append('..')
import numpy as np
from common.util import most_similar, create_co_matrix, ppmi
from dataset import ptbwindow_size = 2
wordvec_size = 100corpus, word_to_id, id_to_word = ptb.load_data('train')
vocab_size = len(word_to_id)
print('counting  co-occurrence ...')
C = create_co_matrix(corpus, vocab_size, window_size)
print('calculating PPMI ...')
W = ppmi(C, verbose=True)print('calculating SVD ...')
#try:# truncated SVD (fast!)
print("ok")
from sklearn.utils.extmath import randomized_svd
U, S, V = randomized_svd(W, n_components=wordvec_size, n_iter=5,random_state=None)
#except ImportError:# SVD (slow)# U, S, V = np.linalg.svd(W)word_vecs = U[:, :wordvec_size]querys = ['you', 'year', 'car', 'toyota']
for query in querys:most_similar(query, word_to_id, id_to_word, word_vecs, top=5)

下面这个是用普通的np.linalg.svd(W)做出的结果。

[query] youi: 0.7016294002532959we: 0.6388039588928223anybody: 0.5868048667907715do: 0.5612815618515015'll: 0.512611985206604[query] yearmonth: 0.6957005262374878quarter: 0.691483736038208earlier: 0.6661213636398315last: 0.6327787041664124third: 0.6230476498603821[query] carluxury: 0.6767407655715942auto: 0.6339930295944214vehicle: 0.5972712635993958cars: 0.5888376235961914truck: 0.5693157315254211[query] toyotamotor: 0.7481387853622437nissan: 0.7147319316864014motors: 0.6946366429328918lexus: 0.6553674340248108honda: 0.6343469619750977

下面结果,是用了sklearn模块里面的randomized_svd方法,使用了随机数的 Truncated SVD,仅对奇异值较大的部分进行计算,计算速度比常规的 SVD 快。

calculating SVD ...
ok[query] youi: 0.6678948998451233we: 0.6213737726211548something: 0.560122013092041do: 0.5594725608825684someone: 0.5490139126777649[query] yearmonth: 0.6444296836853027quarter: 0.6192560791969299next: 0.6152222156524658fiscal: 0.5712860226631165earlier: 0.5641934871673584[query] carluxury: 0.6612467765808105auto: 0.6166062355041504corsica: 0.5270425081253052cars: 0.5142025947570801truck: 0.5030257105827332[query] toyotamotor: 0.7747215628623962motors: 0.6871038675308228lexus: 0.6786072850227356nissan: 0.6618651151657104mazda: 0.6237337589263916Process finished with exit code 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560217.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stm32 SysTick

SysTick是系统定时器&#xff0c;属于 CM3 内核中的一个外设&#xff0c;内嵌在 NVIC 中。系统定时器是一个 24bit 的向下递减的计数器&#xff0c;计数器每计数一次的时间为 1/SYSCLK&#xff0c;一般设置系统时钟 SYSCLK 等于 72M。当重装载数值寄存器的值递减到 0 的时候&am…

stm32 USART

介绍的定义 串行通信、并行通信、全双工、半双工、单工、同步、异步、比特率、码元、波特率、TTL、RS232、DB9接口、DTE、DCE、协议层、USART、UART、CH340G芯片、USB。 通信基础 根据数据传送的方式&#xff0c;通讯可分为串行通讯与并行通讯。 串行通信&#xff1a;同一时…

robot 用AP连PC

1.启动机器人 2.PC找到机器人的热点&#xff0c;连接 3.看机器人分配的电脑ip 4.打开putty软件&#xff0c;下图里面是机器人的ip。然后点击open 。 5.输入机器人用户名和密码&#xff0c;现在已经登陆进去了。 6.输入ifconfig查看网络状况

robot连PCwifi、PC开Shell连robot

用网线将机器人和路由器连接&#xff0c;登录路由器管理界面&#xff0c;获取机器人 IP 地址。 打开Xshell&#xff0c;新建会话&#xff0c;主机设成机器人IP。 输入机器人用户名和密码 然后pc通过ssh连接上机器人 用ifconfig查看当前网络连接状态。有线连接是192.168.0.108&a…

ROS配置分布式通信

ROS配置分布式通信关键是&#xff0c;机器人和 PC 要处于同一网段。 虚拟机网络适配器设置成桥接。 ifconfig查看虚拟机和机器人端的网络连接状态&#xff0c;看是否处于一个网段。下面两图&#xff0c;说明机器人和 PC 都是一个网段。 互相Ping测试连通性。 修改PC端bashrc文…

ROS rqt、rviz

首先机器人端启动摄像头。 pc端用rqt_image_view就可以打开rqt工具&#xff0c;然后选择话题&#xff0c;就看到摄像头图像了。 下面是compressed话题和不是compressed话题的对比&#xff0c;这两个话题带宽有倍数级差异。 然后就可以用opencv做一些事情。下面这个其实就是机器…

nvm node 安装与配置

nvm Node Version Manager&#xff08;NVM&#xff09; 是一种用于管理多个主动节点.js版本的工具。 nvm官网下载地址 https://github.com/coreybutler/nvm-windows/releases 如果电脑上之前已经单独安装了node&#xff0c;先卸载&#xff08;可以在控制面板里面卸载&#xf…

采用推理的方法认知单词、CBOW模型

基于计数的方法&#xff0c;根据一个单词周围的单词的出现频数来表示该单词。需要生成所有单词的共现矩阵&#xff0c;再对这个矩阵进行 SVD&#xff0c;以获得密集向量&#xff0c;如果语料库处理的单词数量非常大&#xff0c;将需要大量的计算资源和时间。基于计数的方法使用…

CBOW模型正向传播、矩阵乘积层实现

把矩阵乘积称为MatMul节点&#xff1a; 下面这个图表示矩阵乘积yxW的计算图 。因为考虑了mini-batch 处理&#xff0c;假设x中保存了N个数据。此时x 、W、y 的形状分别是 ND、DH 、NH 。 下面是推反向传播的数学式&#xff1a; 用代码表述MatMul层&#xff1a;params 中保存要…

CBOW模型的数据预处理

数据预处理&#xff1a;从语料库生成上下文和目标词。如下图所示&#xff0c;contexts 的各行成为神经网络的输入&#xff0c;target 的各行成为正确解标签&#xff08;要预测出的单词&#xff09;。 之前做过一个preprocess函数&#xff0c;将文本分割为单词&#xff0c;并将分…

实现CBOW模型类

初始化&#xff1a;初始化方法的参数包括词汇个数 vocab_size 和中间层的神经元个数 hidden_size。首先生成两个权重&#xff08;W_in 和 W_out&#xff09;&#xff0c;并用一些小的随机值初始化这两个权重。设置astype(‘f’)&#xff0c;初始化将使用 32 位的浮点数。 生成…

CBOW模型的学习、Trainer类的实现

CBOW 模型的学习的实现&#xff1a;给神经网络准备好学习数据。然后求梯度&#xff0c;并逐步更新权重参数。 Trainer类&#xff1a;学习的类。 初始化&#xff1a;类的初始化程序接收神经网络&#xff08;模型&#xff09;和优化器(SGD、Momentum、AdaGrad、Adam) 学习&…

stm32 I2C、EEPROM

main.c 硬件结构如下&#xff0c;EEPROM 芯片(AT24C02)的 SCL 及 SDA 引脚连接到了 STM32 的 I2C 引脚中&#xff0c;结合上拉电阻&#xff0c;构成了 I2C 通讯总线&#xff0c;它们通过 I2C 总线交互。 EEPROM 芯片的设备地址&#xff1a;一共有 7 位&#xff0c;其中高 4 位…

stm32 I2C架构

STM32的 I2C 片上外设专门负责实现 I2C 通讯协议&#xff0c; 只要配置好该外设&#xff0c;它就会自动根据协议要求产生通讯信号&#xff0c;收发数据并缓存起来&#xff0c;CPU 只要检测该外设的状态和访问数据寄存器&#xff0c;就能完成数据收发。架构图如下所示。 通讯引脚…

多级放大电路

定义&#xff1a; 耦合方式、阻容耦合、变压器耦合、直接耦合、零点漂移、零漂 耦合方式&#xff1a;多级放大电路内部各级之间的连接方式称为耦合方式。常用的耦合方式有三种&#xff0c;阻容耦合、变压器耦合、直接耦合。 阻容耦合&#xff1a;电路的第一级与第二级之间通过…

放大电路频率响应基础概念

定义&#xff1a; 放大电路频率响应、幅频特性、相频特性、下限频率、上限频率、通频带、频率失真、波特图、高通电路、低通电路、共射截止频率、特征频率共、基截止频率。 放大电路频率响应&#xff1a;当放大电路输入不同频率的正弦波信号时&#xff0c;电路的放大倍数将有所…

skip gram模型的实现

CBOW模型的概率表示&#xff1a; P(A)&#xff1a;A发生的概率。 P(A,B)&#xff1a;事件A和事件B同时发生的概率&#xff0c;称为联合概率。 P(A|B)&#xff1a;在给定事件B的信息后&#xff0c;事件A发生的概率&#xff0c;称为后验概率。 CBOW模型&#xff1a;当给定某个…

stm32 SPI架构

STM32 芯片集成了专门用于 SPI 协议通讯的外设。 通讯引脚&#xff1a;SPI 硬件架构从 MOSI、MISO、SCK 及 NSS 线展开&#xff1b;STM32 芯片有多个 SPI 外设&#xff0c;它们的 SPI 通讯信号引出到不同的 GPIO 引脚上&#xff0c;使用时必须配置到这些指定的引脚。 SPI1是AP…

stm32 SPI、FLASH

main.c FLASH&#xff1a;掉电后数据不丢失&#xff0c;U 盘、SD 卡、SSD 固态硬盘、STM32 芯片内部用于存储程序的设备&#xff0c;都是 FLASH 类型的存储器。FLASH芯片(W25Q64)是一种使用 SPI 通讯协议的 NOR FLASH 存储器。 STM32 的 NSS 引脚是一个普通的 GPIO&#xff0c…

二分类负采样方法

多分类问题处理为二分类问题&#xff0c;需要能够正确地对正例和负例进行分类。 如果以所有的负例为对象&#xff0c;词汇量将增加许多&#xff0c;无法处理。作为一种近似方法&#xff0c;将只使用少数负例。 负采样方法&#xff1a;求正例作为目标词时的损失&#xff0c;同…