七、用户画像

目录

  • 7.1 什么是用户画像
  • 7.2 标签系统
    • 7.2.1 标签分类方式
    • 7.2.2 多渠道获取标签
  • 7.3 用户画像数据特征
    • 7.3.1 常见的数据形式
    • 7.3.2 文本挖掘算法
    • 7.3.3 嵌入式表示
    • 7.3.4 相似度计算方法
  • 7.4 用户画像应用

因此只基于某个层面的数据便可以产生部分个体面像,可用于从特定角度形容群体乃至个体的大致差异。说了这么多,那这些和本章要探讨的用户面像有什么关系呢?首先要明确用户面像里的用户是谁:数据收集方(即产品提供方)往往开发出某件产品供人使用,这些使用者便是数据收集方的用户,数据收集方为了推广产品,同时持续维护和改善用户体验便需要对由用户操作而产生的数据进行挖掘,以期从中发现群体乃至个体的行为偏好,形成数据层面上的所谓面像。

7.1 什么是用户画像

在机器学习中提到的用户面像通常是基于给定的数据对用户属性以及行为进行描述,然后提取用户的个性化指标,再以此分析可能存在的群体共性,并落地应用到各种业务场景中。

7.2 标签系统

用户面像的核心其实就是给用户 “打标签”,即标签化用户的行为特征,企业通过用户面像中的标签来分析用户的社会属性、生活习惯、消费行为等信息,然后进行商业应用。

构建一个标签系统成为企业赋能更多业务的关键,标签系统也是本节要详细介绍的内容,具体从三个方面来展开,分别是标签分类方式、多渠道获取标签和标签体系框架。

7.2.1 标签分类方式

如下图所示,通过分析一个用户的特征来展示标签分类方式。

7.2.2 多渠道获取标签

根据标签获取方式可以把标签分为事实类标签、规则类标签和模型类标签三种。标签获取方式也可以看作特征获取方式,借助这三种方式从原始数据中提取能够表现用户特点、商品特点或者数据特点的特征。

  • 事实类标签
    事实类标签最容易获取,直接来源于原始数据,比如性别、年龄、会员等级等字段。当然也可以对原始数据进行简单的统计后提取事实标签,比如用户行为次数、消费总额。

  • 规则类标签
    规则类标签使用广泛,是由运营人员和数据人员经过共同协商而设定的多个规则生成的标签,其特点是直接有效灵活、计算复杂度低和可解释度高,主要用作较为直观和清晰的用户相关标签,例如地域所属、家庭类型、年龄层等。使用到的技术知识主要是数理统计类知识,例如基础统计、数值分层、概率分布、均值分析、方差分析等。

    如下图所示,主要对单一或者多种指标进行逻辑运算、函数运算等运算生成最终的规则类标签,这里分为用户行为、用户偏好和用户价值三部分,感兴趣的话,可对用户进行更深层次的刻面。

  • 模型类标签
    模型类标签是经过机器学习和深度学习等模型处理后,二次加工生成的洞察性标签。比如预测用户状态、预测用户信用分、划分兴趣人群和对评论文本进行分类等,经过这些处理得到的结果就是模型类标签。其特点是综合程度高、复杂程度高,绝大部分标签需要先有针对性地构建相应的挖掘指标体系,然后依托经典数学算法或模型进行多指标间的综合计算方能得到模型类标签,常常需要多种算法一起组合来建模。

    如下图所示,基于模型类标签可以使用 RFM 模型来衡量用户价值和用户创利能力、对用户行为信息建模预测用户生命周期变化情况、通过模型预测用户信用评分、使用图嵌入或用户分层模型划分兴趣人群。除此之外还有很多通过模型来得到标签的方法。

对标签的分类和获取有了初步了解后,我们可以将其串联起来形成基本的标签体系框架,包括从底层数据的提取到业务应用赋能。

如下图所示,可以看出整个标签体系框架分为四个部分:数据源、标签管理、标签层级分类和标签服务赋能。

7.3 用户画像数据特征

无论是构建用户面像还是进行算法竞赛,数据都是产生效益的核心。一般而言,用户面像的数据来源为用户数据、商品数据和渠道数据,比如从电商网站和微信平台可以获取用户的交易数据、行为数据等,从平台用户系统可以获取用户属性数据。

这些数据的存在形式多样,通过对数据形式的理解可以进行统计、编码和降维等处理来提取有效特征,然后用这些特征构造我们需要的标签。本节我们将介绍常见的数据形式以及用户面像相关竞赛的一些特征提取方法。

7.3.1 常见的数据形式

在各式各样的竞赛当中,数据的形态和格式是多种多样的,本节以用户画像为例将数据的有关字段大致分为数值型变量、类别型变量、多值型变量以及文本型变量四种常见的数据形式,每种变量都有对应的处理方式。需要强调的是这些变量都是针对用户层面的,即所有样本数据以用户为唯一主键进行区分,且每个用户只有一条记录,之所以这样举例是因为通常基于用户面像的机器学习模型所需的数据是以用户池的形式呈现的,对用户的标签进行对应的特征学习。

实际竞赛中给的数据可能十分复杂,甚至是以打点记录的方式描述用户的行为,这时候往往还需要参赛者构建提取用户特征,这涉及更深的应用技巧。

  • 数值型变量
    最常见的一种数值型变量是连续型变量,指的是具有数值大小含义的变量,比如下图所示的年龄、身高、体重等,其他如消费金额、流量累计等。
  • 类别型变量
    类别型变量是指具有类别标识的变量,比如性别、 籍贯、所在城市等,这类变量记录了用户的固有属性,如下图所示。
  • 多值型变量
    多值型变量是指用户在某个维度具有多个取值的变量,比如兴趣爱好、穿衣风格、看过的电影等,这类变量由于其特殊结构无法直接应用到模型中,需要借助特别的数据结构如稀疏矩阵进行处理,如下图所示。
  • 文本型变量
    文本型变量(如下图所示)是指利用文本记录的变量,比如用户对某件商品或者某次购物的评论等。处理这类变量需要用到自然语言处理的一些工具,比如中文分词工具 jieba 等。

7.3.2 文本挖掘算法

对于基础的原始数据,比如经常出现的用户标签集合、购物评价等,除了常见的统计特征外,还能够基于文本挖掘算法进行特征提取,同时对原始数据进行预处理和清洗,以达到匹配和标识用户数据的效果。本节将会对常见的文本挖掘算法 LSA、PLSA 和 LDA 进行介绍,这三种均为无监督学习方法。

  • LSA
    LSA(潜在语义分析) 是一种非概率主题模型,与词向量有关,主要用于文档的话题分析,其核心思想是通过矩阵分解的方式来发现文档与词之间基于话题的语义关系。具体地,将文档集表示为词-文档矩阵,对词-文档矩阵进行 SVD(奇异值分解),从而得到话题向量空间以及文档在话题向量空问的表示。

    LSA 的具体使用也非常简单,我们以 2020 腾讯广告算法大赛中的数据为例,首先构造用户点击的广告素材 ID 序列 (creative_id),然后进行 TF-IDF 计算,最后经过 SVD 得到结果,实现代码如下:

    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.decomposition import TruncatedSVD
    from sklearn.pipeline import Pipeline
    # 提取⽤户点击序列
    docs=data_df.groupby(['user_id'])['creative_id'].agg(lambda x:" ".join(x)).reset_index()['creative_id']
    # tfidf + svd
    tfidf = TfidfVectorizer()
    svd = TruncatedSVD(n_components=100)
    svd_transformer = Pipeline([('tfidf', tfidf), ('svd', svd)])
    lsa_matrix = svd_transformer.fit_transform(documents)
    
  • PLSA
    PLSA(概率潜在语义分析)模型其实是为了克服 LSA 模型潜在存在的一些缺点而提出的。PLSA 模型通过一个生成模型来为 LSA 赋予概率意义上的解释。该模型假设每一篇文档都包含一系列可能的潜在话题,文档中的每一个单词都不是凭空产生的,而是在潜在话题的指引下通过一定的概率生成的。

  • LDA
    LDA(潜在狄利克雷分布)是一种概率主题模型,与词向量无关,可以将文档集中每篇文档的主题以概率分布的形式给出。通过分析一批文档集,抽取出它们的主题分布,就可以根据主题分布进行主题聚类或文本分类。同时,它是一种典型的词袋模型,即一篇文档由一组相互独立的词构成,词与词之间没有先后顺序关系。

7.3.3 嵌入式表示

毫不夸张地说,任何可以形成网络结构的东西,都可以有嵌入表示(Embedding),并且嵌入表示可以将高维稀疏特征向量转换成低维稠密特征向量来表示。嵌入表示这个概念最初在 NLP 领域被广泛应用,现在已经扩展到了其他应用,比如电商平台。电商平台将用户的行为序列视作由一系列单词组成的句子,比如用户点击序列和购买商品序列,经过训练后得到关于商品的嵌入向量。这里主要介绍经典的 Word2Vec 以及网络表示学习中的 DeepWalk 方法。

  • 词嵌入 Word2Vec
    Word2Vec 在竞赛中被经常使用,能够带来意想不到的效果,掌握其原理非常关键。Word2Vec 根据上下文之间的关系去训练词向量,有两种训练模式,分别为 Skip-Gram(跳字模型)和 CBOW(连续词袋模型),两者的主要区别为在于输入层和输出层的不同。简单来说,Skip-Gram 是用一个词语作为输入,来预测它的上下文;CBOW 是用一个词语的上下文作为输入,来预测这个词语本身。

    如下图所示,Word2Vec 实质上是只有一个隐藏层的全连接神经网络,用来预测与给定单词关联度大的单词。模型词汇表的大小是,每个隐藏层的维度是 N N N,相邻神经元之问的连接方式是全连接。下图中的输入层是把一个词被转化成的独热向量,即给定一个单词,然后把此单词转化为 { x 1 , x 2 , x 3 , ⋯ , x V } \{ x_1,x_2,x_3, \cdots, x_V \} {x1,x2,x3,,xV} 序列,这个序列中只有一个值为 1 1 1,其他均为 0 0 0;通过输入层和隐藏层之问的权重矩阵 W V × N W_{V \times N} WV×N,将序列在隐藏层进行简单的映射;隐藏层和输出层之问存在一个权重矩阵 W N × V ′ W'_{N \times V} WN×V,通过计算得出词汇表中每个单词的得分,最后使用 softmax 激活函数输出每个单词的概率结果。

    如下图所示,Skip-Gram 根据当前单词预测给定的序列或上下文。假设输入的目标单词为 x k x_k xk,定义的上下文窗口大小为 c c c,对应的上下文为 { y 1 , y 2 , ⋯ , y c } \{ y_1, y_2, \cdots, y_c \} {y1,y2,,yc},这些 y y y 是相互独立的。

    如下图所示,为 CBOW 的模型结构,定义上下文窗口大小为 c c c,上下文单词为 { x 1 , x 2 , ⋯ , x c } \{ x_1, x_2, \cdots, x_c \} {x1,x2,,xc},通过上下文单词来对当前的单词进行预测,对应的目标单词为 y y y

    Word2vec 使用起来非常方便,直接调用 gensim 包即可,需要注意的是几个具体参数,比如窗口大小、模型类型选择、生成词向量长度等等。

    对于 Skip-Gram 和 CBOW 的选择,大致可以基于以下三点:CBOW 在训练时要比 Skip-Gram 快很多,因为 CBOW 是基于上下文来预测这个单词本身,只需把窗口内的其他单词相加作为输入进行预测即可,不管窗口多大,都只需要一次计算;相较于 Skip-Gram,CBOW 可以更好地表示常见单词;Skip-Gram 在少量的训练集中也可以表示稀有单词或者短语。

  • 图嵌入 DeepWalk
    在很多场景下,数据对象除了存在序列关系,还存在图或者网络的结构关系,而 Word2vec 仅能提取序列关系下的嵌入表示,不能跨越原本的序列关系获取图相关的信息。为了能从 “一维” 关系跨越到 “二维” 关系,图嵌入 (Graph Embedding) 成为了新的的研究方向,其中最具影响的是 DeepWalk。

    如下图所示,DeepWalk 算法主要包括三个部分,首先生成图网络,比如通过用户点击序列或购买商品序列来构造商品图网络,就是把序列中前后有关联的商品用线连接起来并作为图的边,商品则作为点,这样某个商品点就可以关联大量的领域商品;然后基于图网络进行随机游走 (random walk)获取网络中节点与节点的共现关系,根据游走长度生成商品序列;最后把产生的序列当作句子输入到 Skip-Gram 进行词向量的训练,得到商品的图嵌入表示。

    为了方便理解,下面给出 DeepWalk 的代码描述:

    def deepwalk_walk(walk_length, start_node):walk = [start_node]while len(walk) <= walk_length:cur = walk[-1]try:cur_nbrs = item_dict[cur]walk.append(random.choice(cur_nbrs))except:breakreturn walkdef simulate_walks(nodes, num_walks, walk_length):walks = []for i in range(num_walks):random.shuffle(nodes)for v in nodes:walks.append(deepwalk_walk(walk_length=walk_length, start_node=v))return walksif __name__ == "__main__":
    # 第⼀步:⽣成图⽹络(省略)
    # 构建item_dict 保存图中的节点关系,即字典结构存储,key 为节点,value 为领域
    # 第⼆步:通过DeepWalk ⽣成商品序列
    nodes = [k for k in item_dict] # 节点集合
    num_walks = 5 # 随机游⾛轮数
    walk_length = 20 # 随机游⾛⻓度
    sentences = simulate_walks(nodes, num_walks, walk_length) # 序列集合
    # 第三步:通过Word2Vec 训练商品词向量
    model = Word2Vec(sentences, size=64, window=5, min_count=3, seed=2020)
    

对于 Word2Vec 的衍生 ltem2Vec 以及更多图嵌入方法,比如
LINE、Node2Vec 和 SDNE 都是很值得研究的。从传统的
Word2vec 到推荐系统中的嵌入表示,再到如今逐渐向图嵌入过渡,这些嵌入方式的应用都非常广泛。

7.3.4 相似度计算方法

基于相似度计算的特征提取有欧式距离、余弦相似度、Jaccard 相似度等,有助于提取用户、商品和文本的相似度。当已经获取了 用户和商品的嵌入表示、文本的分词表示及各类稀疏表示后,可以对些向量表示进行相似度的计算。基于相似度计算在用户分层聚类、个性化推荐或广告投放等应用中一直被广泛使用。

  • 欧氏距离
    欧式距离是最易于理解的一种距离计算方式,是二维、三维或多维空间中两点之问的距离公式。在 n n n 维空问中,对于向量 A = [ a 1 , a 2 , ⋯ , a n ] , B = [ b 1 , b 2 , ⋯ , b n ] A = [a_1, a_2, \cdots, a_n], \ B = [b_1, b_2, \cdots, b_n] A=[a1,a2,,an], B=[b1,b2,,bn],其公式如下: d ( A , B ) = ∑ i = 1 n ( a i , b i ) 2 d(A, B) = \sqrt{\sum_{i=1}^n (a_i, b_i)^2} d(A,B)=i=1n(ai,bi)2 欧氏距离的代码如下:

    def EuclideanDistance(dataA, dataB):# np.linalg.norm ⽤于范数计算,默认是⼆范数,相当于平⽅和开根号return 1.0 / ( 1.0 + np.linalg.norm(dataA - dataB))
    
  • 余弦相似度
    首先,样本数据的夹角余弦并不是真正几何意义上的夹角余弦,实际上前者只不过是借用后者的名字,变成了代数意义上的 “夹角余弦”,用于衡量样本向量之间的差异。夹角越小,余弦值越接近于 1 1 1,反之则趋近于 − 1 -1 1。上面的向量 A 和向量 B 之间的夹角余弦公式如下: c o s θ = ∑ i = 1 n ( a i × b i ) ∑ i = 1 n a i 2 × ∑ i = 1 n b i 2 cos \theta = \frac{\sum_{i=1}^n (a_i \times b_i)}{\sqrt{\sum_{i=1}^n a_i^2} \times \sqrt{\sum_{i=1}^n b_i^2}} cosθ=i=1nai2 ×i=1nbi2 i=1n(ai×bi)余弦相似度的代码实现如下:

    def Cosine(dataA, dataB):sumData = np.dot(dataA, dataB)denom = np.linalg.norm(dataA) * np.linalg.norm(dataB)# 归⼀化到[0,1] 区间return ( 1 - sumData / denom ) / 2
    
  • Jaccard 相似度
    Jaccard 相似度一般用于度量两个集合之间的差昇大小,其思想为两个集合共有的元素越多,二者就越相似。为了控制其取值范国,我们可以增加一个分母,也就是两个集合拥有的所有元素。集合 C、集合 D 的 Jaccard 相似度公式如下: J ( C , D ) = ∣ C ∩ D ∣ ∣ C ∪ D ∣ = ∣ C ∩ D ∣ ∣ C ∣ + ∣ D ∣ − ∣ C ∩ D ∣ J(C, \ D) = \frac{|C \cap D|}{|C \cup D|} = \frac{|C \cap D|}{|C| + |D| - |C \cap D|} J(C, D)=CDCD=C+DCDCDJaccard 相似度的代码实现如下:

    def Jaccard(dataA, dataB):A_len, B_len = len(dataA), len(dataB)C = [i for i in dataA if i in dataB]C_len = len(C)return C_len / ( A_len + B_len - C_len)
    

更多相似度计算方法有皮尔逊相关系数 (Pearson correlationcoefficient)、修正余弦相似度 (Adjusted Cosine Similarity)、汉明距离 (Hamming distance)、曼哈顿距离(Manhattan distance)、莱文斯坦距离 (Levenshtein distance)等。

7.4 用户画像应用

  • 用户分析
  • 精准营销
  • 风控领域

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

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

相关文章

JAVASE---数据类型与变量

1. 字面常量 常量即程序运行期间&#xff0c;固定不变的量称为常量&#xff0c;比如&#xff1a;一个礼拜七天&#xff0c;一年12个月等。 public class Demo{ public static void main(String[] args){ System.Out.println("hello world!"); System.Out.println(…

从源码分析Handler面试问题

Handler 老生常谈的问题了&#xff0c;非常建议看一下Handler 的源码。刚入行的时候&#xff0c;大佬们就说 阅读源码 是进步很快的方式。 Handler的基本原理 Handler 的 重要组成部分 Message 消息MessageQueue 消息队列Lopper 负责处理MessageQueue中的消息 消息是如何添加…

YAML+PyYAML笔记 7 | PyYAML源码之yaml.compose_all(),yaml.load(),yaml.load_all()

7 | PyYAML源码之yaml.compose_all&#xff0c;yaml.load,yaml.load_all 1 yaml.compose_all()2 yaml.load()3 yaml.load_all() 1 yaml.compose_all() 源码&#xff1a; 作用&#xff1a;分析流中的所有YAML文档&#xff0c;并产生相应的表示树。解析&#xff1a; # -*- codi…

基于应用值迭代的马尔可夫决策过程(MDP)的策略的机器人研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Lua学习笔记】Lua进阶——Table(4)继承,封装,多态

文章目录 封装继承多态 封装 // 定义基类 Object {}//由于表的特性&#xff0c;该句就相当于定义基类变量 Object.id 1//该句相当于定义方法&#xff0c;Object可以视为定义的对象&#xff0c;Test可以视为方法名 //我们知道Object是一个表&#xff0c;但是抽象地看&#xff…

使用预训练的2D扩散模型改进3D成像

扩散模型已经成为一种新的生成高质量样本的生成模型&#xff0c;也被作为有效的逆问题求解器。然而&#xff0c;由于生成过程仍然处于相同的高维&#xff08;即与数据维相同&#xff09;空间中&#xff0c;极高的内存和计算成本导致模型尚未扩展到3D逆问题。在本文中&#xff0…

【c++底层结构】AVL树红黑树

【c底层结构】AVL树&红黑树 1.AVL树1.1 AVL树的概念1.2 AVL树结点的定义1.3 AVL树的插入1.4 AVL树的旋转1.5 AVL树的验证1.6 AVL树的性能 2. 红黑树2.1 红黑树的概念2.2 红黑树的性质2.3 红黑树节点的定义2.4 红黑树的插入操作2.5 红黑树的验证2.6 红黑树与AVL树的比较2.7 …

Latex | 使用MATLAB生成.eps矢量图并导入Latex中的方法

一、问题描述 用Latex时写paper时&#xff0c;要导入MATLAB生成的图进去 二、解决思路 &#xff08;1&#xff09;在MATLAB生成图片的窗口中&#xff0c;导出.eps矢量图 &#xff08;2&#xff09;把图上传到overleaf的目录 &#xff08;3&#xff09;在文中添加相应代码 三…

搜索与图论(一)

一、DFS与BFS 1.1深度优先搜索(DFS) DFS不具有最短性 //排列数字问题 #include<iostream> using namespace std;const int N 10; int n; int path[N]; bool st[N];void dfs(int u) {if(u n){for(int i 0;i < n;i) printf("%d",path[i]);puts("&qu…

15、PHP神奇的数组索引替代

1、有数字索引指定的数组元素时&#xff0c;以数字索引的为准。 <?php $aarray(a,b,1>c,5>"d","e"); print_r($a); ?> 输出结果&#xff1a;b的位置直接被c替代了&#xff0c;e 的值为最大的整数索引1。 PHP不这么搞&#xff0c;怎么可能成…

【信号去噪和正交采样】流水线过程的一部分,用于对L波段次级雷达中接收的信号进行降噪(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

简单学会MyBatis原生API注解

&#x1f600;前言 本篇博文是关于MyBatis原生API&注解的使用&#xff0c;希望能够帮助到你&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您…

VUE使用docxtemplater导出word(带图片) 踩坑 表格循环空格 ,canvas.toDataURL图片失真模糊问题

参考&#xff1a;https://www.codetd.com/article/15219743 安装 // 安装 docxtemplater npm install docxtemplater pizzip --save // 安装 jszip-utils npm install jszip-utils --save // 安装 jszip npm install jszip --save // 安装 FileSaver npm install file-save…

【力扣每日一题】2023.7.29 环形链表

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个链表&#xff0c;让我们判断这个链表是否有环。我们可以直接遍历这个链表&#xff0c;最后能走到链表末尾也就是空指针那就…

VMware虚拟机无法上网的解决办法

&#xff08;1&#xff09;1、在虚拟机右下角的网络适配器上面观察该图标是否是有绿色的灯在闪烁&#xff0c;如果网络适配器是灰色的证明虚拟机的网络没有打开&#xff0c;而是被禁用了&#xff0c;在适配器上点击鼠标右键&#xff0c;打开【设置】&#xff0c;在【已连接】、…

数据结构—链表

链表 前言链表链表的概念及结构链表的分类 无头单向非循环链表的相关实现带头双向循环链表的相关实现顺序表和链表&#xff08;带头双向循环链表&#xff09;的区别 前言 顺序表是存在一些固有的缺陷的&#xff1a; 中间/头部的插入删除&#xff0c;时间复杂度为O(N)&#xf…

windows C++多线程同步<2>-事件

windows C多线程同步&#xff1c;2&#xff1e;-事件 事件对象和关键代码段不同&#xff0c;它是属于内核对象&#xff1b;又分为人工重置事件对象和自动重置事件对象&#xff1b; 同一个线程不允许在不释放事件的情况下多次获取事件&#xff1b; 相关API 白话来讲&#xff1…

认识 springboot 并了解它的创建过程 - 1

前言 本篇介绍什么是SpringBoot, SpringBoot项目如何创建&#xff0c;认识创建SpringBoot项目的目录&#xff0c;了解SpringBoo特点如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1.什么是springboot?2.为什么…

PKG内容查看工具:Suspicious Package for Mac安装教程

Suspicious Package Mac版是一款Mac平台上的查看 PKG 程序包内信息的应用&#xff0c;Suspicious Package Mac版支持查看全部包内全部文件&#xff0c;比如需要运行的脚本&#xff0c;开发者&#xff0c;来源等等。 suspicious package mac使用简单&#xff0c;只需在选择pkg安…

农业中的计算机视觉 2023

物体检测应用于检测田间收割机和果园苹果 一、说明 欢迎来到Voxel51的计算机视觉行业聚焦博客系列的第一期。每个月&#xff0c;我们都将重点介绍不同行业&#xff08;从建筑到气候技术&#xff0c;从零售到机器人等&#xff09;如何使用计算机视觉、机器学习和人工智能来推动…