神经网络算法 —— Embedding(嵌入)!!

文章目录


前言

本文将从 Embedding 的本质、Embedding的原理、Embedding的应用三个方面,详细介绍Embedding(嵌入)。


1、Embedding的本质

"Embedding" 在字面上的翻译是“嵌入”,但在机器学习和自然语言处理的上下文中,我们更倾向于将其理解为一种 “向量化” 或 “向量表示” 的技术,这有助于更准确地描述其在这些领域中的应用和作用。

(1)机器学习中的Embedding

  • 原理:将离散数据映射为连续变量,捕捉潜在关系。
  • 方法:使用神经网络中的Embedding层,训练得到数据的向量表示。
  • 作用:提升模型性能,增强泛化能力,降低计算成本。

Embedding Model

在机器学习中,Embedding 主要是指将离散的高维数据(如文字、图片、音频)映射到低纬度的连续向量空间。这个过程会生成由实数构成的向量,用于捕捉原始数据的潜在搞关系和结构。

(2)NLP中的Embedding

  • 原理:将文本转换为连续向量,基于分布式假设捕捉语义信息。
  • 方法:采用词嵌入技术(如Word2Vec)或复杂模型(如BERT)学习文本表示。
  • 作用:解决词汇鸿沟,支持复杂NLP任务,提供文本的语义理解。

Word2Vec

在NLP中,Embedding技术(如Word2Vec)将单词或短语映射为向量,使得语义上相似的单词在向量空间中位置相近。这种Embedding对于自然语言处理任务(如文本分类、情感分析、机器翻译)至关重要。

2、Embedding的原理

Embedding向量不仅仅是对物体进行简单编号或标识,而是通过特征抽象和编码,在尽量保持物体间相似性的前提下,将物体映射到一个高维特征空间中。Embedding向量能够捕捉到物体之间的相似性和关系,在映射到高维特征空间后,相似的物体在空间中会聚集在一起,而不同的物体会被分隔开。

(1)Image Embedding(图像嵌入)

  • 定义与目的:图像嵌入是将图像转换为低维向量,以简化处理并保留关键信息供机器学习使用。
  • 方法与技术:利用深度学习模型(如CNN)抽取图像特征,通过降维技术映射到低维空间,训练优化嵌入向量。
  • 应用与优势:图像嵌入广泛应用于图像分类、检索等任务,提升模型性能,降低计算需求,增强泛化能力。

图像嵌入

图像嵌入是利用深度学习将图像数据转化为低维向量的技术,广泛应用于图像处理任务中,有效提升了模型的性能和效率。

(2)Word Embedding(词嵌入)

  • 定义与目的:词嵌入是将单词映射为数值向量,以捕捉单词间的语义和句法关系,为自然语言处理任务提供有效的特征表示。
  • 方法与技术:词嵌入通过预测单词上下文(如Word2Vec)或全局词频统计(如GloVe)来学习,也可使用深度神经网络捕捉更复杂的语言特征。
  • 应用与优势:词嵌入广泛应用于文本分类、机器翻译等自然语言处理任务,有效提升模型性能,因其能捕捉语义信息和缓解词汇鸿沟问题。

词嵌入

词嵌入是一种将单词转换为数值向量的技术,通过捕捉单词间的语义和句法关系,为自然语言处理任务提供有效特征表示,广泛应用于文本分类、机器翻译等领域,有效提升了模型的性能。

3、Embedding的应用

(1)Embedding + 推荐系统

Embedding技术为推荐系统提供了有效的用户和物品向量表示,通过捕捉潜在关系提升推荐准确性,同时具备良好的扩展性,是推荐系统的关键组成部分。

推荐系统

Embedding 在推荐系统中的作用

提供连续的低维向量表示,捕捉用户和物品间的潜在关系,增强推荐准确性。

Embedding 在推荐系统中的方法

利用矩阵分解或深度学习模型生成用户和物品的Embedding向量,用于计算相似度和生成推荐。

Embedding 在推荐系统中的优势

提高推荐准确性,具备良好的扩展性和灵活性,适应大规模数据集和新增用户物品。

(2)Embedding + 大模型

Embedding在大模型中发挥着突破输入限制、保持上下文连贯性、提高效率和准确性等重要作用。

  • 突破输入限制:Embedding通过将长文本编码为紧凑的高维向量,使大模型能够处理超出其原始输入限制的文本。
  • 保持上下文连贯性:Embedding在编码过程中保留文本的上下文信息,确保大模型在处理分割后的文本时仍能生成连贯的输出。
  • 提高效率和准确性:预训练的Embedding加速模型训练,提升各自自然语言处理任务的准确性,实现跨任务知识迁移。
  • 应用案例:Embedding解决大模型处理长文本时的输入和连贯性问题,通过向量检索和提示工程优化回答质量。

参考:架构师带你玩转AI

  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
# GPF ## 一、GPF(Graph Processing Flow):利用图神经网络处理问题的一般化流程 1、图节点预表示:利用NE框架,直接获得全图每个节点的Embedding; 2、正负样本采样:(1)单节点样本;(2)节点对样本; 3、抽取封闭子图:可做类化处理,建立一种通用图数据结构; 4、子图特征融合:预表示、节点特征、全局特征、边特征; 5、网络配置:可以是图输入、图输出的网络;也可以是图输入,分类/聚类结果输出的网络; 6、训练和测试; ## 二、主要文件: 1、graph.py:读入图数据; 2、embeddings.py:预表示学习; 3、sample.py:采样; 4、subgraphs.py/s2vGraph.py:抽取子图; 5、batchgraph.py:子图特征融合; 6、classifier.py:网络配置; 7、parameters.py/until.py:参数配置/帮助文件; ## 三、使用 1、在parameters.py中配置相关参数(可默认); 2、在example/文件夹中运行相应的案例文件--包括链接预测、节点状态预测; 以链接预测为例: ### 1、导入配置参数 ```from parameters import parser, cmd_embed, cmd_opt``` ### 2、参数转换 ``` args = parser.parse_args() args.cuda = not args.noCuda and torch.cuda.is_available() torch.manual_seed(args.seed) if args.cuda: torch.cuda.manual_seed(args.seed) if args.hop != 'auto': args.hop = int(args.hop) if args.maxNodesPerHop is not None: args.maxNodesPerHop = int(args.maxNodesPerHop) ``` ### 3、读取数据 ``` g = graph.Graph() g.read_edgelist(filename=args.dataName, weighted=args.weighted, directed=args.directed) g.read_node_status(filename=args.labelName) ``` ### 4、获取全图节点的Embedding ``` embed_args = cmd_embed.parse_args() embeddings = embeddings.learn_embeddings(g, embed_args) node_information = embeddings #print node_information ``` ### 5、正负节点采样 ``` train, train_status, test, test_status = sample.sample_single(g, args.testRatio, max_train_num=args.maxTrainNum) ``` ### 6、抽取节点对的封闭子图 ``` net = until.nxG_to_mat(g) #print net train_graphs, test_graphs, max_n_label = subgraphs.singleSubgraphs(net, train, train_status, test, test_status, args.hop, args.maxNodesPerHop, node_information) print('# train: %d, # test: %d' % (len(train_graphs), len(test_graphs))) ``` ### 7、加载网络模型,并在classifier中配置相关参数 ``` cmd_args = cmd_opt.parse_args() cmd_args.feat_dim = max_n_label + 1 cmd_args.attr_dim = node_information.shape[1] cmd_args.latent_dim = [int(x) for x in cmd_args.latent_dim.split('-')] if len(cmd_args.latent_dim) == 1: cmd_args.latent_dim = cmd_args.latent_dim[0] model = classifier.Classifier(cmd_args) optimizer = optim.Adam(model.parameters(), lr=args.learningRate) ``` ### 8、训练和测试 ``` train_idxes = list(range(len(train_graphs))) best_loss = None for epoch in range(args.num_epochs): random.shuffle(train_idxes) model.train() avg_loss = loop_dataset(train_graphs, model, train_idxes, cmd_args.batch_size, optimizer=optimizer) print('\033[92maverage training of epoch %d: loss %.5f acc %.5f auc %.5f\033[0m' % (epoch, avg_loss[0], avg_loss[1], avg_loss[2])) model.eval() test_loss = loop_dataset(test_graphs, model, list(range(len(test_graphs))), cmd_args.batch_size) print('\033[93maverage test of epoch %d: loss %.5f acc %.5f auc %.5f\033[0m' % (epoch, test_loss[0], test_loss[1], test_loss[2])) ``` ### 9、运行结果 ``` average test of epoch 0: loss 0.62392 acc 0.71462 auc 0.72314 loss: 0.51711 acc: 0.80000: 100%|███████████████████████████████████| 76/76 [00:07<00:00, 10.09batch/s] average training of epoch 1: loss 0.54414 acc 0.76895 auc 0.77751 loss: 0.37699 acc: 0.79167: 100%|█████████████████████████████████████| 9/9 [00:00<00:00, 34.07batch/s] average test of epoch 1: loss 0.51981 acc 0.78538 auc 0.79709 loss: 0.43700 acc: 0.84000: 100%|███████████████████████████████████| 76/76 [00:07<00:00, 9.64batch/s] average training of epoch 2: loss 0.49896 acc 0.79184 auc 0.82246 loss: 0.63594 acc: 0.66667: 100%|█████████████████████████████████████| 9/9 [00:00<00:00, 28.62batch/s] average test of epoch 2: loss 0.48979 acc 0.79481 auc 0.83416 loss: 0.57502 acc: 0.76000: 100%|███████████████████████████████████| 76/76 [00:07<00:00, 9.70batch/s] average training of epoch 3: loss 0.50005 acc 0.77447 auc 0.79622 loss: 0.38903 acc: 0.75000: 100%|█████████████████████████████████████| 9/9 [00:00<00:00, 34.03batch/s] average test of epoch 3: loss 0.41463 acc 0.81132 auc 0.86523 loss: 0.54336 acc: 0.76000: 100%|███████████████████████████████████| 76/76 [00:07<00:00, 9.57batch/s] average training of epoch 4: loss 0.44815 acc 0.81711 auc 0.84530 loss: 0.44784 acc: 0.70833: 100%|█████████████████████████████████████| 9/9 [00:00<00:00, 28.62batch/s] average test of epoch 4: loss 0.48319 acc 0.81368 auc 0.84454 loss: 0.36999 acc: 0.88000: 100%|███████████████████████████████████| 76/76 [00:07<00:00, 10.17batch/s] average training of epoch 5: loss 0.39647 acc 0.84184 auc 0.89236 loss: 0.15548 acc: 0.95833: 100%|█████████████████████████████████████| 9/9 [00:00<00:00, 28.62batch/s] average test of epoch 5: loss 0.30881 acc 0.89623 auc 0.95132 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JOYCE_Leo16

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值