当前位置: 首页 > news >正文

28、深度学习-自学之路-NLP自然语言处理-做一个完形填空,让机器学习更多的内容程序展示

import sys,random,math
from collections import Counter
import numpy as npnp.random.seed(1)
random.seed(1)
f = open('reviews.txt')
raw_reviews = f.readlines()
f.close()tokens = list(map(lambda x:(x.split(" ")),raw_reviews))#wordcnt = Counter() 这行代码的作用是创建一个 Counter 对象,
# 并将其赋值给变量 wordcnt。Counter 是 Python 标准库 collections 模块中的一个类,
# 它是一种特殊的字典,用于对可哈希对象进行计数。
wordcnt = Counter()for sent in tokens:for word in sent:wordcnt[word] -= 1
vocab = list(set(map(lambda x:x[0],wordcnt.most_common())))
#print(vocab)word2index = {}
for i,word in enumerate(vocab):word2index[word]=iconcatenated = list()
input_dataset = list()
for sent in tokens:sent_indices = list()for word in sent:try:sent_indices.append(word2index[word])concatenated.append(word2index[word])except:""input_dataset.append(sent_indices)
'''
concatenated = np.array(concatenated) 这行代码的主要功能是将 concatenated 对象转换为 NumPy 数组。
NumPy 是 Python 中用于科学计算的一个重要库,np.array() 是 NumPy 提供的一个函数,
它可以将多种类型的对象(如列表、元组等)转换为 NumPy 数组,以便进行高效的数值计算和操作。
'''
concatenated = np.array(concatenated)
'''
random.shuffle(input_dataset) 这行代码的主要功能是对 input_dataset 列表中的元素进行随机打乱顺序的操作。
random 是 Python 的标准库,shuffle 是 random 模块中的一个函数,它会直接修改传入的列表,使其元素顺序随机化。
'''
random.shuffle(input_dataset)alpha, iterations = (0.05, 2)
hidden_size,window,negative = (50,2,5)weights_0_1 = (np.random.rand(len(vocab),hidden_size) - 0.5) * 0.2
weights_1_2 = np.random.rand(len(vocab),hidden_size)*0layer_2_target = np.zeros(negative+1)
layer_2_target[0] = 1
'''
下面的这个程序要表现的东西会很多,请大家慢慢听我描述
程序功能是:
这段 Python 代码定义了一个名为 similar 的函数,其主要目的是找出与给定目标单词(默认是 'beautiful')
在词向量空间中最相似的 10 个单词。它基于词向量之间的欧几里得距离来衡量单词间的相似度。然后我们怎么找到词向量,然后什么又是欧几里得距离:
先说:词向量。我们都知道当我们对一个神经网络训练完成以后,我们就会得到一组权重。这组权重一般是如果输入层是n个值,隐藏层是m个点。
那么这个权重就是(n,m)的一个numpy矩阵。
对应的权重矩阵的第一行第一列就是我们说的第一个输入元素的词向量。然后我们说一下什么是欧几里得距离,计算公式我知道:
raw_difference = weights_0_1[index] - (weights_0_1[target_index])squared_difference = raw_difference * raw_differencescores[word] = -math.sqrt(sum(squared_difference))使用全部词的词向量值和 beautiful这个词的词向量值进行相减。
然后在把相减后的结果进行平方
然后再把所有的平方的数据相加然后求平方根。
然后   
'''
def similar(target='beautiful'):target_index = word2index[target]scores = Counter()'''for word, index in word2index.items()::遍历 word2index 字典中的每个键值对,word 是单词,index 是该单词在词向量矩阵中的索引。'''for word,index in word2index.items():'''raw_difference = weights_0_1[index] - (weights_0_1[target_index]):计算当前单词的词向量与目标单词的词向量之间的差值。weights_0_1 是一个二维的 NumPy 数组,存储着所有单词的词向量,每一行对应一个单词的词向量。'''raw_difference = weights_0_1[index] - (weights_0_1[target_index])'''squared_difference = raw_difference * raw_difference:对差值向量的每个元素进行平方操作。'''squared_difference = raw_difference * raw_difference'''scores[word] = -math.sqrt(sum(squared_difference)):计算平方和的平方根,得到欧几里得距离,并取其负值作为相似度得分。之所以取负值,是因为 Counter 的 most_common 方法会返回得分最高的元素,而我们希望距离最近(相似度最高)的单词排在前面。'''scores[word] = -math.sqrt(sum(squared_difference))'''most_common(10) 方法会返回 scores 中得分最高的 10 个元素及其得分,以列表形式呈现,列表中的每个元素是一个包含单词和得分的元组。'''return scores.most_common(10)def sigmoid(x):return 1/(1 + np.exp(-x))
#input_dataset = 1
#iterations = 1
for rev_i, review in enumerate(input_dataset * iterations):
#for rev_i, review in enumerate(1 * 1):for target_i in range(len(review)):#for target_i in range(1):# since it's really expensive to predict every vocabulary# we're only going to predict a random subsettarget_samples = [review[target_i]] + list(concatenated \[(np.random.rand(negative) * len(concatenated)).astype('int').tolist()])print("target_samples")print(target_samples)left_context = review[max(0, target_i - window):target_i]right_context = review[target_i + 1:min(len(review), target_i + window)]layer_1 = np.mean(weights_0_1[left_context + right_context], axis=0)layer_2 = sigmoid(layer_1.dot(weights_1_2[target_samples].T))layer_2_delta = layer_2 - layer_2_targetlayer_1_delta = layer_2_delta.dot(weights_1_2[target_samples])weights_0_1[left_context + right_context] -= layer_1_delta * alphaweights_1_2[target_samples] -= np.outer(layer_2_delta, layer_1) * alphaif (rev_i % 250 == 0):sys.stdout.write('\rProgress:' + str(rev_i / float(len(input_dataset)* iterations)) + "   " + str(similar('terrible')))sys.stdout.write('\rProgress:' + str(rev_i / float(len(input_dataset)* iterations)))
print(similar('terrible'))#运行结果
'''
Progress:0.99998
[('terrible', -0.0), #可怕的
('horrible', -2.7898821106802045),  #令人恐惧的
('brilliant', -3.470232426351145),  #明亮的,恒成功的
('pathetic', -3.8372465135492355),  #可怜的
('phenomenal', -3.928297271813787), #非凡的
('mediocre', -3.9289917580116294),  #平庸的
('superb', -3.9764853704721492),    #棒 极 了
('masterful', -4.022889507518986),  #有驾驭能力的
('marvelous', -4.0699092654045375), #了不起的
('bad', -4.220448952264187)]        #坏的
'''

相关文章:

28、深度学习-自学之路-NLP自然语言处理-做一个完形填空,让机器学习更多的内容程序展示

import sys,random,math from collections import Counter import numpy as npnp.random.seed(1) random.seed(1) f open(reviews.txt) raw_reviews f.readlines() f.close()tokens list(map(lambda x:(x.split(" ")),raw_reviews))#wordcnt Counter() 这行代码的…...

【NLP 22、语言模型 language model】

有时候我也想听听,我在你心里,是什么样子 —— 25.1.12 一、什么是语言模型 语言是灵活的,也是有规律的 了解一门语言的人可以判断一句话是否“合理” 通俗来讲,语言模型用来评价一句话(句子可以看作是字的组合)是否“合理”或…...

刚性平衡机建模

这两个公式是动平衡机中用于描述旋转部件振动行为的动力学方程。它们分别描述了旋转部件在平移振动和扭转振动中的运动规律,用于分析不平衡量对系统的影响。以下是详细解释: 1. 第一个公式:平移振动的动力学方程 M d 2 y d t 2 2 K y 0 m 1…...

【算法】双指针(上)

目录 双指针 左右指针(对撞指针) 快慢指针 移动零 双指针解题 复写零 暴力解题 双指针解题(快慢指针) 快乐数 双指针解题(快慢指针) 盛最多水的容器 暴力解题(会超时) 双指针解题(左右指针) 有效三角形的个数 暴力解题 双指针解题(左右指针) 双指针 常见的双指…...

【Linux Redis】关于用docker拉取Redis后,让虚拟机运行起来redis,并使得其可以连接到虚拟机外的navicat。

步骤一:拉取Redis镜像 docker pull redis 这个命令会下载最新版本的Redis镜像到你的本地Docker仓库中。你也可以指定一个具体的版本号,例如docker pull redis:6.2.6,来拉取特定版本的Redis镜像。 如果拉取遇到问题请参考【Linux AnolisOS】关…...

用deepseek学大模型04-模型可视化与数据可视化

deepseek.com: pytorch可视化工具 生成神经网络图 在 PyTorch 中,可视化神经网络结构的常用工具和方法有以下几种,以下将详细介绍它们的用法: 1. TensorBoard (PyTorch 官方集成) PyTorch 通过 torch.utils.tensorboard 支持 TensorBoard&a…...

一周学会Flask3 Python Web开发-post请求与参数获取

锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili app.route 装饰器默认只支持get请求。假如我们要让绑定的视图函数支持其他请求方式,我们可以在methods属性里配置…...

第3章 .NETCore核心基础组件:3.1 .NET Core依赖注入

3.1.1 什么是控制反转、依赖注入 杨老师在书中进行了一系列的文字阐述,总结一下就是:软件设计模式中有一种叫做【控制反转】的设计模式,而依赖注入是实现这种设计模式的一个很重要的方式。也就是说学习依赖注入,是学习怎样实现控…...

cs*n 网页内容转为html 加入 onenote

csdn上有好用的内容,我们怎么将它们加到 onenote 里吃灰呢。 一、创建 新html create_html.py import sysdef create_html_file(filename):# 检查是否提供了文件名if not filename:print("请提供HTML文件名")return# 创建HTML内容html_content f"…...

平板作为电脑拓展屏

有线串流(速度更快) spacedesk 打开usb对安卓的连接 用usb线直接连接电脑和平板 无线串流(延迟高,不推荐) todesk pc和手机端同时下载软件,连接后可以进行远程控制或扩展屏幕 spacedesk 连接到同一个…...

Pytorch实现论文之一种基于扰动卷积层和梯度归一化的生成对抗网络

简介 简介:提出了一种针对鉴别器的梯度惩罚方法和在鉴别器中采用扰动卷积,拟解决锐梯度空间引起的训练不稳定性问题和判别器的记忆问题。 论文题目:A Perturbed Convolutional Layer and Gradient Normalization based Generative Adversarial Network(一种基于扰动卷积层…...

关系数据库标准语言SQL

1.SOL称为结构化查询语言,它是由1974年由Boyce和Chamberlin提出的,1975年至1979年IBM公司的San Jose Research Laboratory研制了关系数据库管理系统的原型系统SystemR,并实现了这种语言。 2.SQL(Structured Ouery Language)称为结构化查询语言 3.SQL数…...

AI工具篇:利用DeepSeek+Kimi 辅助生成综述汇报PPT

随着科研和学术报告需求的增加,如何高效地准备一份结构清晰、内容充实的PPT已成为许多研究者的挑战。 传统的PPT制作过程繁琐,需要大量文献收集、数据分析和设计工作,而AI工具能够帮助提升效率,减少重复劳动。 本文将介绍如何使用…...

学习总结2.18

在原本基本的数船的基础上,增加了船不能畸形的要求,船只能是矩形,由此需要在dfs找船前确定是否有畸形船 .* ** *. ** ** .* ** *. 出现畸形船的情况如上图,即两艘船有一个交集时,此时就可以判断出bad pl…...

electron下载文件,弹窗选择下载路径,并通知下载进度

1:在window.js中 引入session import { app, BrowserWindow, ipcMain, dialog, shell, session } from electron; 2:发送下载请求 // 在主进程监听渲染进程发送的 start-download 事件ipcMain.on(start-download, async (event, downloadUrl) > {l…...

【Docker】容器被停止/删除的方式及命令:全面解析与实践指南

文章目录 引言一、容器的生命周期二、停止容器的命令及方式1. docker stop 命令2. docker kill 命令3. docker pause 和 docker unpause 命令4. docker restart 命令 三、删除容器的命令及方式1. docker rm 命令2. docker container prune 命令3. docker rm 与 docker rmi 的区…...

线上就医全流程医药机构接入文档接口代码-医保就医接口php-demo版本

2025年2月18日11:28:03 国密算法开发库推荐 lpilp/guomi 我测试过php 7.2 - 8.0都可以兼容,如果有能力可以自己开发 目前已经开发了核心的接口的测试demo,并且封装了工具类直接写业务逻辑即可,并且已经有线上项目在使用,如果需要demo代码可…...

缓存三大问题及其解决方案

缓存三大问题及其解决方案 1. 前言 ​ 在现代系统架构中,缓存与数据库的结合使用是一种经典的设计模式。为了确保缓存中的数据与数据库中的数据保持一致,通常会给缓存数据设置一个过期时间。当系统接收到用户请求时,首先会访问缓存。如果缓…...

大语言模型常用微调与基于SFT微调DeepSeek R1指南

概述 大型语言模型(LLM,Large Language Model)的微调(Fine-tuning)是指在一个预训练模型的基础上,使用特定领域或任务的数据对模型进行进一步训练,以使其在该领域或任务上表现更好。微调是迁移…...

LabVIEW的吞雨测控系统

本案例介绍了一种基于LabVIEW开发的吞雨测控系统,该系统通过建模仿真分析不同控制器模式下的阶跃信号响应,从而选择了最适合的控制器。为了有效解决在控制流量过程中出现的振荡收敛和流量信号大扰动问题,系统采用了改进的积分分离PID算法&…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

JVM 内存结构 详解

内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: ​ 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

GitHub 趋势日报 (2025年06月06日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...