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

[Datawhale][CS224W]图机器学习(五)

这里写目录标题

    • 一、Deepwalk
      • 1.1 预备知识
      • 1.2 Deepwalk介绍
      • 1.3 Embedding
      • 1.4 word2Vec 词向量,词嵌入
      • 1.5 random Walk随机游走
      • 1.6 DeepWalk 核心代码
        • Random Walk
        • Word2vec
        • DeepWalk应用
      • 1.7 DeepWalk优缺点
    • 二、Node2Vec
      • 2.1 图嵌入
      • 2.2 Node2Vec
        • 优化目标
        • 顶点序列采样策略
      • 2.3 理论上的实现
      • 2.4 Node2Vec代码实现
        • 学习算法
        • node2vec核心代码
        • node2vecWalk
        • 构造采样表
        • node2vec应用
      • 2.5 Node2Vec与DeepWalk相比的优点与特点
      • 2.6 Node2Vec的优缺点
  • 参考文献

一、Deepwalk

1.1 预备知识

机器学习,深度学习基础,语言模型,word2vec

1.2 Deepwalk介绍

DeepWalk的思想类似word2vec,使用图中节点与节点的共现关系来学习节点的向量表示。那么关键的问题就是如何来描述节点与节点的共现关系,DeepWalk给出的方法是使用随机游走(RandomWalk)的方式在图中进行节点采样。

DeepwalkDeepwalkDeepwalkgraphgraphgraph的每一个节点编码为一个DDD维向量(Embedding)(无监督学习)

Embedding中隐式包含了GraphGraphGraph中的社群,连接,结构信息,可用于后续节点分类等下游任务(监督学习)

image-20230222142856728

Deepwalk通过套用随机游走(Random walk generation)将图像转化为D维向量

image-20230222153354939

1.3 Embedding

我们需要将图转化为计算机了解的向量,所以我们需要使用embedding

image-20230222143330826

1.4 word2Vec 词向量,词嵌入

word2vec通过语料库中的句子序列来描述词与词的共现关系,进而学习到词语的向量表示。

主要有两种方法

CBOW:用边缘词去预测中心词

Skip-gram:用输入的中心词去预测周围词

image-20230222143852663

1.5 random Walk随机游走

RandomWalk是一种可重复访问已访问节点的深度优先遍历算法。给定当前访问起始节点,从其邻居中随机采样节点作为下一个访问节点,重复此过程,直到访问序列长度满足预设条件。

获取足够数量的节点访问序列后,使用skip-gram model 进行向量学习。

img

具体见[[Datawhale][CS224W]图机器学习(四)](https://blog.csdn.net/weixin_45856170/article/details/129070015)

1.6 DeepWalk 核心代码

DeepWalk算法主要包括两个步骤,第一步为随机游走采样节点序列,第二步为使用skip-gram modelword2vec学习表达向量。

①构建同构网络,从网络中的每个节点开始分别进行Random Walk 采样,得到局部相关联的训练数据; ②对采样数据进行SkipGram训练,将离散的网络节点表示成向量化,最大化节点共现,使用Hierarchical Softmax来做超大规模分类的分类器

Random Walk

我们可以通过并行的方式加速路径采样,在采用多进程进行加速时,相比于开一个进程池让每次外层循环启动一个进程,我们采用固定为每个进程分配指定数量的num_walks的方式,这样可以最大限度减少进程频繁创建与销毁的时间开销。

deepwalk_walk方法对应上一节伪代码中第6行,_simulate_walks对应伪代码中第3行开始的外层循环。最后的Parallel为多进程并行时的任务分配操作。

def deepwalk_walk(self, walk_length, start_node):walk = [start_node]while len(walk) < walk_length:cur = walk[-1]cur_nbrs = list(self.G.neighbors(cur))if len(cur_nbrs) > 0:walk.append(random.choice(cur_nbrs))else:breakreturn walkdef _simulate_walks(self, nodes, num_walks, walk_length,):walks = []for _ in range(num_walks):random.shuffle(nodes)for v in nodes:           walks.append(self.deepwalk_walk(alk_length=walk_length, start_node=v))return walksresults = Parallel(n_jobs=workers, verbose=verbose, )(delayed(self._simulate_walks)(nodes, num, walk_length) for num inpartition_num(num_walks, workers))walks = list(itertools.chain(*results))

Word2vec

这里就偷个懒直接用gensim里的Word2Vec了。

from gensim.models import Word2Vec
w2v_model = Word2Vec(walks,sg=1,hs=1)

DeepWalk应用

G = nx.read_edgelist('../data/wiki/Wiki_edgelist.txt',create_using=nx.DiGraph(),nodetype=None,data=[('weight',int)])model = DeepWalk(G,walk_length=10,num_walks=80,workers=1)
model.train(window_size=5,iter=3)
embeddings = model.get_embeddings()evaluate_embeddings(embeddings)
plot_embeddings(embeddings)

1.7 DeepWalk优缺点

  1. 优点
    • 首个将深度学习和自然语言处理的思想用于图机器学习
    • 在系数标注节点分类场景下,嵌入性能卓越
  2. 缺点
    • 均匀随机游走,没有偏向的游走方向(Node2Vec)
    • 需要大量随机游走序列训练
    • 基于随机游走,管中窥豹。距离较远的两个节点无法相互影响。看不到全图信息。(图神经网络)
    • 无监督,仅编码图的连接信息,没有利用节点的属性特征
    • 没有真正用到神经网络和深度学习

二、Node2Vec

2.1 图嵌入

将数据转化为D维连续稠密的向量,包含了原来的节点的多种信息

image-20230222153010863

image-20230222153329769

2.2 Node2Vec

优化目标

f(u)f(u)f(u)是将顶点 uuu 映射为embedding向量的映射函数,对于图中每个顶点uuu,定义 Ns(u)N_s(u)Ns(u) 为通过采样策略 SSS采样出的顶点 uuu的近邻顶点集合。

node2vec优化的目标是给定每个顶点条件下,令其近邻顶点(如何定义近邻顶点很重要)出现的概率最大。

maxf∑u∈VlogPr(Ns(U)∣f(u))max_f\sum_{u\in V}log Pr(N_s(U)|f(u))maxfuVlogPr(Ns(U)f(u))

为了将上述最优化问题可解,文章提出两个假设:

  • 条件独立性假设

假设给定源顶点下,其近邻顶点出现的概率与近邻集合中其余顶点无关。 Pr(Ns(u)∣f(u))=∏ni∣f(u)Pr(ni∣f(u))Pr(N_s(u)|f(u))=\prod_{n_i|f(u)}Pr(n_i|f(u))Pr(Ns(u)f(u))=nif(u)Pr(nif(u))

  • 特征空间对称性假设

这里是说一个顶点作为源顶点和作为近邻顶点的时候共享同一套embedding向量。(对比LINE中的2阶相似度,一个顶点作为源点和近邻点的时候是拥有不同的embedding向量的) 在这个假设下,上述条件概率公式可表示为 Pr(ni∣f(u))=expf(ni)⋅f(u)∑v∈Vexpf(v)⋅f(u)Pr(n_i|f(u))={expf(n_i)\cdot f(u)}\over{\sum_{v\in V}expf(v)\cdot f(u)}vVexpf(v)f(u)Pr(nif(u))=expf(ni)f(u)

根据以上两个假设条件,最终的目标函数表示为image-20230222163604126

由于归一化因子 image-20230222163615301的计算代价高,所以采用负采样技术优化。

顶点序列采样策略

node2vec依然采用随机游走的方式获取顶点的近邻序列,不同的是node2vec采用的是一种有偏的随机游走。

给定当前顶点 v ,访问下一个顶点 x 的概率为

img

πvx\pi_{vx}πvx 是顶点 v 和顶点 x 之间的未归一化转移概率, Z 是归一化常数。

node2vec引入两个超参数 p 和 q 来控制随机游走的策略,假设当前随机游走经过边 (t,v) 到达顶点 �v设 image-20230222163711950ωvx\omega_{vx}ωvx 是顶点 v 和 x 之间的边权,

img

dtxd_{tx}dtx为顶点 t 和顶点 x 之间的最短路径距离。

下面讨论超参数 p 和 q 对游走策略的影响

  • Return parameter,p

参数p控制重复访问刚刚访问过的顶点的概率。 注意到p仅作用于 dtxd_{tx}dtx=0 的情况,而dtxd_{tx}dtx=0 表示顶点 x 就是访问当前顶点 v 之前刚刚访问过的顶点。 那么若 p 较高,则访问刚刚访问过的顶点的概率会变低,反之变高。

  • In-out papameter,q

q 控制着游走是向外还是向内,若 q>1 ,随机游走倾向于访问和 t 接近的顶点(偏向BFS)。若 q<1 ,倾向于访问远离 t 的顶点(偏向DFS)。

下面的图描述的是当从 t 访问到 v 时,决定下一个访问顶点时每个顶点对应的 α\alphaα

设定p,q进行有偏随机游走

image-20230222153738097

q节点小时更愿意进行BFS,p节点小时更愿意进行DFS

image-20230222153919325

2.3 理论上的实现

image-20230222154012450

2.4 Node2Vec代码实现

学习算法

采样完顶点序列后,剩下的步骤就和deepwalk一样了,用word2vec去学习顶点的embedding向量。 值得注意的是node2vecWalk中不再是随机抽取邻接点,而是按概率抽取,node2vec采用了Alias算法进行顶点采样。

Alias Method:时间复杂度O(1)的离散采样方法125 赞同 · 23 评论文章img

node2vec核心代码

img

node2vecWalk

通过上面的伪代码可以看到,node2vec和deepwalk非常类似,主要区别在于顶点序列的采样策略不同,所以这里我们主要关注node2vecWalk的实现。

由于采样时需要考虑前面2步访问过的顶点,所以当访问序列中只有1个顶点时,直接使用当前顶点和邻居顶点之间的边权作为采样依据。 当序列多余2个顶点时,使用文章提到的有偏采样。

def node2vec_walk(self, walk_length, start_node):G = self.G    alias_nodes = self.alias_nodes    alias_edges = self.alias_edgeswalk = [start_node]while len(walk) < walk_length:        cur = walk[-1]        cur_nbrs = list(G.neighbors(cur))        if len(cur_nbrs) > 0:            if len(walk) == 1:                walk.append(cur_nbrs[alias_sample(alias_nodes[cur][0], alias_nodes[cur][1])])            else:                prev = walk[-2]                edge = (prev, cur)                next_node = cur_nbrs[alias_sample(alias_edges[edge][0],alias_edges[edge][1])]                walk.append(next_node)        else:            breakreturn walk

构造采样表

preprocess_transition_probs分别生成alias_nodesalias_edgesalias_nodes存储着在每个顶点时决定下一次访问其邻接点时需要的alias表(不考虑当前顶点之前访问的顶点)。alias_edges存储着在前一个访问顶点为 t ,当前顶点为 v 时决定下一次访问哪个邻接点时需要的alias表。

get_alias_edge方法返回的是在上一次访问顶点 t ,当前访问顶点为 v 时到下一个顶点 x 的未归一化转移概率 image-20230222164222830

def get_alias_edge(self, t, v):G = self.G    p = self.p    q = self.qunnormalized_probs = []    for x in G.neighbors(v):        weight = G[v][x].get('weight', 1.0)# w_vx        if x == t:# d_tx == 0            unnormalized_probs.append(weight/p)        elif G.has_edge(x, t):# d_tx == 1            unnormalized_probs.append(weight)        else:# d_tx == 2            unnormalized_probs.append(weight/q)    norm_const = sum(unnormalized_probs)    normalized_probs = [float(u_prob)/norm_const for u_prob in unnormalized_probs]return create_alias_table(normalized_probs)def preprocess_transition_probs(self):G = self.Galias_nodes = {}    for node in G.nodes():        unnormalized_probs = [G[node][nbr].get('weight', 1.0) for nbr in G.neighbors(node)]        norm_const = sum(unnormalized_probs)        normalized_probs = [float(u_prob)/norm_const for u_prob in unnormalized_probs]                 alias_nodes[node] = create_alias_table(normalized_probs)alias_edges = {}for edge in G.edges():        alias_edges[edge] = self.get_alias_edge(edge[0], edge[1])self.alias_nodes = alias_nodes    self.alias_edges = alias_edgesreturn

node2vec应用

使用node2vec在wiki数据集上进行节点分类任务和可视化任务。 wiki数据集包含 2,405 个网页和17,981条网页之间的链接关系,以及每个网页的所属类别。 通过简单的超参搜索,这里使用p=0.25,q=4的设置。

G = nx.read_edgelist('../data/wiki/Wiki_edgelist.txt',create_using=nx.DiGraph(),nodetype=None,data=[('weight',int)])model = Node2Vec(G,walk_length=10,num_walks=80,p=0.25,q=4,workers=1)
model.train(window_size=5,iter=3)    
embeddings = model.get_embeddings()evaluate_embeddings(embeddings)
plot_embeddings(embeddings)

2.5 Node2Vec与DeepWalk相比的优点与特点

  1. 优点
    • Node2Vec解决图嵌入问题,将图中的每个节点映射为一个向量(嵌入)
    • 向量(嵌入)包含了节点的语义信息(相邻社群和功能角色)
    • 语义相似的节点,向量(嵌入)的距离也近。
    • 向量(嵌入)用于后续的分类,聚类,link Predictin,推荐等任务。
  2. 特点
    • 在DeepWalk完全随机游走的基础上,Node2Vec增加p,q参数,实现有偏随机游走。不同的p,q组合,对应了不同的探索范围和节点语义。
    • DFS深度优先探索,相邻的节点,向量(嵌入)距离相近
    • BFS广度优先探索,相同功能角色的节点,向量(嵌入)距离相近。
    • DeepWalk时Node2Vec在p=1,q=1的特例

2.6 Node2Vec的优缺点

  1. 优点
    • 首次通过调节p,q值,实现了有偏随机游走,探索节点社群,功能等不同属性
    • 首次将节点分类用于Link Prediction
    • 可解释性,可扩展性好,性能卓越
  2. 缺点
    • 需要大量随机游走序列训练
    • 距离较远的两个界定啊无法直接相互影响。看不到全图信息。(图神经网络)
    • 无监督,仅编码图的连接信息,没有利用节点的属性特征(图卷积)
    • 没有真正用到神经网络和深度学习

参考文献

[1] 斯坦福CS224W图机器学习、图神经网络、知识图谱【同济子豪兄】

[2] 【Graph Embedding】DeepWalk:算法原理,实现和应用

[3] 【Graph Embedding】node2vec:算法原理,实现和应用

相关文章:

[Datawhale][CS224W]图机器学习(五)

这里写目录标题一、Deepwalk1.1 预备知识1.2 Deepwalk介绍1.3 Embedding1.4 word2Vec 词向量&#xff0c;词嵌入1.5 random Walk随机游走1.6 DeepWalk 核心代码Random WalkWord2vecDeepWalk应用1.7 DeepWalk优缺点二、Node2Vec2.1 图嵌入2.2 Node2Vec优化目标顶点序列采样策略2…...

Windows部署Jar包的三种方式

文章目录1、cmd命令启动2、bat脚本启动2.1 启动jar包2.2 关闭服务3、使用WinSW3.1 重命名3.2 xml配置3.3 安装服务3.4 卸载服务3.5 启动和停止服务1、cmd命令启动 这种方式比较简单&#xff0c;但是窗口关闭后服务也就被杀死了&#xff0c;命令如下 java -jar xxx.jar2、bat脚…...

【图像分类】卷积神经网络之AlexNet网络模型结构详解

写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 1. 前言 LeNet5网络模型提出之后,卷积神经网络在很长一段时间都没有长足的发展,主要有以下两个原因: 1.1 训…...

学习动漫插画的网络班排行榜

很多小伙伴不知道动漫插画培训机构哪个好&#xff0c;找不到靠谱的插画班&#xff0c;今天给大家整理了国内动漫插画培训机构排名&#xff01; 一&#xff1a;动漫插画培训机构排名 1、轻微课&#xff08;五颗星&#xff09; 主打课程有日系插画、游戏原画、古风插画、动漫漫画…...

SpringCloud第五讲 Nacos注册中心-服务注册到Nacos

1.引入依赖&#xff1a; 在父工程中添加spring-cloud-alibaba的管理依赖 <!-- Nacos的管理依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version…...

IP地理位置定位技术原理是什么

IP地理位置定位技术的原理是基于IP地址的网络通信原理和基础上的。它利用IP地址所包含的一些信息&#xff0c;如网络前缀和地址段&#xff0c;以及ISP的IP地址归属地数据库&#xff0c;来推测IP地址所对应的地理位置。具体来说&#xff0c;IP地址是由32位二进制数字组成的&…...

j-vxe-table 下拉搜索选择框数据加载过多导致前端崩溃问题

Jeeg-boot j-vxe-table 下拉搜索选择框数据加载过多导致前端崩溃问题 最近用到了Jeeg-boot j-vxe-table的组件&#xff0c;这组件时真J8难用&#xff0c;还好多BUG&#xff0c;想用个slot插槽也用不了&#xff0c;好像官方写了个基础就没怎么管了。&#x1f611; 问题&#xf…...

Java国际化ResourceBundle详解

在Java开发中&#xff0c;ResourceBundle是一种方便地管理本地化资源的机制。它可以使得程序能够根据当前系统环境的语言和国家/地区来自动加载相应的本地化资源文件&#xff0c;从而避免了硬编码和减少了重复的代码。以下是使用ResourceBundle的基本步骤&#xff1a; 1. 准备…...

一文高端Android性能优化-总结篇

以下从几个方面来总结一下Android的性能优化&#xff1a;1&#xff1a;界面卡顿优化2&#xff1a;内存优化3&#xff1a;App启动优化界面卡顿优化Android的界面为每秒60帧&#xff0c;即必须在16ms内完成1帧的绘制&#xff0c;如果某个方法耗时过程&#xff0c;导致16ms内无法完…...

深入讲解CFS组调度!(上)

注&#xff1a;本文缩写说明 一、CFS组调度简介 1.1. 存在的原因 总结来说是希望不同分组的任务在高负载下能分配可控比例的CPU资源。为什么会有这个需求呢&#xff0c;比如多用户计算机系统每个用户的所有任务划分到一个分组中&#xff0c;A用户90个相同任务&#xff0c;而B…...

大数据实操项目分享:餐饮智能推荐服务在线实习项目

项目背景&#xff1a;在“互联网"背景下&#xff0c;餐饮企业的经营方式发生了很大的变革&#xff1a;团购和020拓宽了销售 渠道&#xff0c;电子点餐、店内WIFI等信息技术提升了服务水平&#xff0c;大数据、私人定制更好地满足了细分市场的需求等。但是与此同时&#xf…...

代码随想录day38

动态规划五部曲 确定dp数组以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 509. 斐波那契数 https://leetcode.cn/problems/fibonacci-number/ class Solution {public int fib(int n) {if(n0) return 0;if(n<3) return 1;int[] dp new int[n]…...

《计算机网络:自顶向下方法》实验5:TCP

Q1 包含HTTP POST消息的TCP报文段的序号是多少?注意:为了发现POST 命令, 你需要在wireshark底部的报文内容域窗口中去查找,查找数据中包含 “POST”的段。 如图所示,由报文中的POST 和 HTTP/1.1可知,其包含HTTP POST消息; TCP报文段的序号可见TCP报文: Sequence Number:…...

【踩坑指南】Stable Diffusion 服务器端部署笔记

文章目录下载github文件配置环境ckpt文件权重下载生成图像NSFW检查&#xff08;瑟图过滤&#xff09;下载github文件 https://github.com/CompVis/stable-diffusion 这个网址&#xff0c;下载压缩包解压&#xff0c;也可以用git clone下载 配置环境 这一步坑最多&#xff0c…...

[qiankun]-多页签缓存

[qiankun]-多页签缓存环境功能需求多页签缓存方案方案1.主服务进行html替换方案2.微服务vnode 替换方案3.每个微服务都不卸载微服务加载方式的选择微服务的路由路径选择微服务的缓存工具微服务的容器使用tab作为微服务的挂载容器使用微服务路由作为微服务的挂载容器场景描述微服…...

2|电子技术|数字电子技术基础|雨课堂习题|考前回顾

A/DD/A转化横向与阵列 相乘&#xff0c;竖向为或阵列 相加&#xff01;功率放大电路克服交越失真&#xff0c;是在乙类的基础上增加两个二极管&#xff0c;使微导通&#xff0c;使三极管导通时间大于半个周期&#xff0c;小于一个周期&#xff0c;构成甲乙类工作状态。选择填空…...

vue+echarts:圆形柱状图设置角度和最大值

第020个点击查看专栏目录本示例是显示圆形的柱状图&#xff0c;angleAxis设置一个max&#xff0c; angleAxis上startAngle&#xff1a;90 &#xff0c; 将0点设置为最顶点。 文章目录示例效果示例源代码&#xff08;共100行&#xff09;相关资料参考专栏介绍示例效果 示例源代码…...

Linux系统安装Nginx常见报错问题

安装Nginx从nginx官网下载所需版本的nginx&#xff0c;http://nginx.org/下载之后&#xff0c;将安装包上传到linux系统指定路径解压文件&#xff0c;tar -zxvf nginx-1.22.1.tar.gz &#xff08;此处用1.22.1版本为例&#xff09;进入安装包目录&#xff0c;cd nginx-1.22.1执…...

按下按键之后,打印一句话------>三个按键需要实现

main.c: #include "key.h" extern void printf(const char *fmt, ...); void delay_ms(int ms){ int i,j; for(i 0; i < ms;i) for (j 0; j < 1800; j);} int main(){ //key1键盘 //EXIT控制器初始化 void PF9_exti_init(); //GICD控…...

Mac配置VScode

Mac配置VScode 常用技巧 命令调色板 根据您当前的上下文访问所有可用的命令。 键盘快捷键&#xff1a;⇧⌘P 快速打开 快速打开文件。 键盘快捷键&#xff1a;⌘P **提示&#xff1a;**类型&#xff1f;查看命令建议。 在最近打开的文件夹和工作区之间导航 最近打开 键盘快捷…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...