机器学习中的嵌入:释放表征的威力

简介

机器学习通过使计算机能够从数据学习和做出预测来彻底改变了人工智能领域。机器学习的一个关键方面是数据的表示,因为表示形式的选择极大地影响了算法的性能和有效性。嵌入已成为机器学习中的一种强大技术,提供了一种捕获和编码数据点之间复杂关系的方法。本文[1]探讨了嵌入的概念,其意义及其在各个领域的应用。

了解嵌入

在机器学习中,嵌入是指高维物体的低维,密集的矢量表示。这些对象可以是从自然语言处理中的单词到计算机视觉中的图像。嵌入的目的是以更紧凑和有意义的形式捕获对象的固有属性和关系。

alt

通过表示学习的过程来学习嵌入,其中训练模型以将高维数据映射到较低维的矢量空间。嵌入空间的设计方式使语义上相似的物体更靠近,而不同的对象则距离较远。这种基于接近度的安排使算法能够利用嵌入式中编码的关系来进行准确的预测并执行各种任务。

嵌入的应用

  1. 自然语言处理(NLP):在NLP中,嵌入引起了极大的关注。单词嵌入(例如Word2Vec和Glove)将单词表示为连续空间中的密集向量。通过捕获单词之间的语义和句法关系,这些嵌入使模型能够理解语言结构,执行情感分析,甚至可以生成连贯的文本。此外,上下文嵌入(例如Bert和GPT)在句子的上下文中捕获单词的含义,从而使高级语言理解任务。
  2. 计算机视觉:嵌入也已被广泛用于计算机视觉任务。图像嵌入,例如从卷积神经网络(CNN)获得的图像嵌入,在紧凑的表示中捕获图像的视觉特征。这些嵌入可以用于图像分类,对象检测和图像相似性搜索等任务。通过将图像映射到特征空间,模型可以根据其视觉内容比较和匹配图像。
  3. 推荐系统:嵌入在构建推荐系统中起着至关重要的作用。协作过滤技术利用嵌入来表示用户和项目。通过从历史用户项目交互中学习嵌入,推荐系统可以识别相似的用户或项目并提出个性化建议。嵌入捕获潜在的因素,这些因素可以推动用户偏好,从而推荐与单个口味相符的项目。
  4. 网络分析:嵌入在网络分析和基于图的机器学习中已证明有价值。图形嵌入表示图中的节点为低维向量,从而捕获结构信息和节点之间的关系。这些嵌入可以实现诸如链接预测,社区检测和节点分类之类的任务。通过将节点映射到嵌入空间,基于图的算法可以有效地分析大规模网络。

优点和挑战

使用嵌入为机器学习应用带来了一些好处。首先,嵌入提供紧凑而有益的表示形式,从而降低了数据的维度并提高了计算效率。其次,嵌入有助于探索语义关系,并使算法能够很好地概括到看不见的数据。此外,嵌入可以优雅地处理缺失的值和噪音,从而增强鲁棒性。

但是,嵌入学习中存在挑战。确定最佳的嵌入维度,处理稀有或不播放的术语以及解决嵌入中的偏见的最佳嵌入性。平衡表现力和嵌入性解释性之间的权衡也带来了挑战。

Code Example

在Python中,有几个库和框架可用于机器学习中的嵌入。让我们探索一些流行的选择:

  1. Gensim:Gensim是专为主题建模和文档相似性分析而设计的Python库。它包括有效实现流行的嵌入算法,例如Word2Vec和doc2vec。 Gensim提供了易于使用的API,用于训练和使用嵌入。这是使用Gensim训练Word2Vec模型的示例:
from gensim.models import Word2Vec

# Prepare training data (a list of sentences)
sentences = [["I""love""machine""learning"], ["Embeddings""are""powerful"]]

# Train Word2Vec model
model = Word2Vec(sentences, min_count=1)

# Get the embedding vector for a word
word_vector = model['machine']
  1. TensorFlow:TensorFlow是一个受欢迎的深度学习库,为使用嵌入的工作提供了广泛的支持。它提供了诸如Word2Vec和Glove之类的预训练模型,以及使用神经网络训练自定义嵌入的灵活性。这是在TensorFlow中使用预训练的手套嵌入的示例:
import tensorflow as tf
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences

# Create a Tokenizer
tokenizer = Tokenizer()
tokenizer.fit_on_texts(["I love machine learning""Embeddings are powerful"])

# Convert text to sequences
sequences = tokenizer.texts_to_sequences(["I love embeddings"])

# Pad sequences to a fixed length
padded_sequences = pad_sequences(sequences, maxlen=10)

# Load pre-trained GloVe embeddings
embedding_matrix = tf.keras.preprocessing.text.embedding_matrix.load_glove("glove.6B.100d.txt")

# Define an embedding layer
embedding_layer = tf.keras.layers.Embedding(
    input_dim=len(tokenizer.word_index) + 1,
    output_dim=100,
    weights=[embedding_matrix],
    trainable=False
)

# Embed the padded sequences
embedded_sequences = embedding_layer(padded_sequences)
  1. Pytorch:Pytorch是另一个流行的深度学习库,可提供用于嵌入的工具。它提供了Torch.nn.embedding模块,以在神经网络中创建和使用嵌入。这是使用Torch.nn.embedding模块的一个示例:
import torch
import torch.nn as nn

# Define an embedding layer
embedding_layer = nn.Embedding(10000300)  # Vocabulary size: 10,000, Embedding dimension: 300

# Create input data
input_data = torch.LongTensor([[123], [456]])  # Shape: (2, 3)

# Embed the input data
embedded_data = embedding_layer(input_data)

# Access the embedding vectors
embedding_vectors = embedded_data[0]  # Shape: (3, 300)

要在不使用库的情况下实现Python中的嵌入,您可以从头开始创建一个基本的嵌入框架。这是一个简化的例子:

import numpy as np

# Define a vocabulary
vocabulary = ["apple""banana""orange""grape"]

# Initialize an empty embedding matrix
embedding_matrix = np.zeros((len(vocabulary), 100))  # Embedding dimension: 100

# Assign random vectors to each word in the vocabulary
for i, word in enumerate(vocabulary):
    embedding_vector = np.random.uniform(-11, (100,))
    embedding_matrix[i] = embedding_vector

# Function to retrieve the embedding vector for a given word
def get_embedding(word):
    if word in vocabulary:
        index = vocabulary.index(word)
        return embedding_matrix[index]
    else:
        return None

# Example usage
word_embedding = get_embedding("banana")
print(word_embedding)

在此示例中,我们使用numpy手动创建一个嵌入矩阵,其中每一行都对应于词汇中的一个单词,每个列代表特征维度。我们用随机向量初始化嵌入矩阵,但是您可以使用任何所需的初始化方法。

get_embedding()函数检索给定单词的嵌入向量。它检查该单词是否存在于词汇中,并从嵌入矩阵中返回相应的嵌入向量。

请注意,这是一个简单的演示,可以说明嵌入的概念而不依赖外部库。实际上,建议使用诸如Gensim,Tensorflow或Pytorch之类的库库,以更有效,更优化的嵌入在现实世界机器学习项目中。

总结

嵌入已成为现代机器学习的基本组成部分,提供了一种捕获和代表数据中复杂关系的方法。从NLP到计算机视觉和网络分析,它们的多功能性在各个领域都显而易见。通过利用嵌入,模型可以有效地推理,概括并做出准确的预测

Reference

[1]

Source: https://medium.com/@evertongomede/embeddings-in-machine-learning-unleashing-the-power-of-representation-2402bab526fe

本文由 mdnice 多平台发布

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

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

相关文章

二维码智慧门牌管理系统全新升级:个性化配置,智能管理,让你的社区更安全!

文章目录 前言一、个性化配置功能的升级二、智能化管理和便捷性 前言 随着科技的飞速发展,智能化管理已经成为各个领域的标配。在社区管理方面,智能化的优势在便捷性、高效性和安全性方面得到了广泛认可。最近,二维码智慧门牌管理系统经过全…

Flutter 常见错误记录总结

1、当 flutter pub get 指令报如下错误时: pub get failed command: "/Users/***/developer/flutter/bin/cache/dart-sdk/bin/dart __deprecated_pub --color --directory . get --example" pub env: { "FLUTTER_ROOT": "/Users/***/dev…

SpringBoot整合JUnit

1.创建新项目 说明:创建springboot_04_junit项目,选择对应的版本。 2.接口类 说明:新建BookDao接口。 package com.forever.dao;public interface BookDao {public void save(); }3.实现类 说明: 新建BookDaoImpl实现类。 pa…

npm发布自己的包

npm发布自己的包 1. 首先在npm官网注册一个自己的账户(有账号的可以直接登录) 注册地址 2. 创建一个自己的项目(如果已有自己的项目, 跳过这一步) npm init -y3. 确认自己的npm下载源, 只能使用npm官方的地址 npm config get registry修改地址源 npm config set registr…

洛谷P1102 A-B数对 详细解析及AC代码

P1102 A-B数对 前言题目题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题目分析注意事项 代码经典二分(O(nlgn))酷炫哈希(O(n)) 后话额外测试用例样例输入 #2样例输出 #2 王婆卖瓜 题目来源 前言 酷&…

DASCTF X CBCTF 2023|无畏者先行

前言 笔者没有参加此次比赛,由于团队后面会复现此次比赛,所以笔者在此进行复现记录。 EASYBOX 考点:命令执行? 栈溢出 附件给了 docker 环境,可以直接在本地复现,但是 docker 我不会调试,幸…

11.Z-Stack协议栈使用

f8wConfig.cfg文件 选择信道、设置PAN ID 选择信道 #define DEFAULT_CHANLIST 0x00000800 DEFAULT_CHANLIST 表明Zigbee模块要工作的网络,当有多个信道参数值进行或操作之后,把结果作为 DEFAULT_CHANLIST值 对于路由器、终端、协调器的意义&#xff1…

react: antd组件使用 FC Fragment

RangePicker const defaultDate 2021-22-16 const [reportDate, setReportDate] useState<any>([defaultDate , defaultDate]);<RangePickerstyle{{width: 260px}}placeholder{[开始日期, 结束日期]}allowClear{false}defaultValue{[defaultDate, defaultDate]}va…

Java代码Demo——Map根据key或value排序

Map根据key排序 升序 Demo代码&#xff1a; //使用TreeMap Map<Integer, String> map new TreeMap<>(); map.put(10, "第10名次"); map.put(15, "第15名次"); map.put(1, "第1名次"); map.put(5, "第5名次"); map.put…

Spring boot集成sentinel限流服务

Sentinel集成文档 Sentinel控制台 Sentinel本身不支持持久化&#xff0c;项目通过下载源码改造后&#xff0c;将规则配置持久化进nacos中&#xff0c;sentinel重启后&#xff0c;配置不会丢失。 架构图&#xff1a; 改造步骤&#xff1a; 接着我们就要改造Sentinel的源码。…

U盘显示无媒体怎么办?方法很简单

当出现U盘无媒体情况时&#xff0c;您可以在磁盘管理工具中看到一个空白的磁盘框&#xff0c;并且在文件资源管理器中不会显示出来。那么&#xff0c;导致这种问题的原因是什么呢&#xff1f;我们又该怎么解决呢&#xff1f; 导致U盘无媒体的原因是什么&#xff1f; 当您遇到上…

SLAM从入门到精通(被忽视的基础图像处理)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 工业上用激光slam的多&#xff0c;用视觉slam的少&#xff0c;这是大家都知道的常识。毕竟对于工业来说&#xff0c;健壮和稳定是我们必须要考虑的…

Pytorch 快速参数权重初始化

定义一个函数&#xff1a; 这里比如要初始化2维卷积权重值&#xff0c;采用xaiver 数据分布&#xff0c;还有很多其他的数据分布可以探索 def weights_init(m):if isinstance(m, nn.Conv2d):xavier(m.weight.data)xavier(m.bias.data) 然后定义一个含2维卷积的网络&#xff…

Zinx框架-游戏服务器开发002:框架学习-按照三层结构模式重构测试代码+Tcp数据适配+时间轮定时器

文章目录 1 Zinx框架总览2 三层模式的分析3 三层重构原有的功能 - 头文件3.1 通道层Stdin和Stdout类3.1.2 StdInChannel3.1.2 StdOutChannel 3.2 协议层CmdCheck和CmdMsg类3.2.1 CmdCheck单例模式3.2.1.1 单例模式3.2.1.2 * 命令识别类向业务层不同类别做分发 3.2.2 CmdMsg自定…

【Mac开发环境搭建】JDK安装、多JDK安装与切换

文章目录 JDK下载与安装下载安装 配置环境变量安装多个JDK共存 JDK下载与安装 下载 Oracle官网提供了非常多个版本的JDK供下载&#xff0c;可以点击如下链接重定向到JDK下载页面 ORACLE官网JDK下载 安装 下面的官方文档可以点开收藏到浏览器的收藏夹&#xff0c;这样后续在开…

Ribbon讲解

一&#xff1a;Ribbon是什么&#xff1f; Ribbon其实就是一个软负载均衡的客户端组件。 二&#xff1a;负载均衡(LB)是什么&#xff1f; 用户的请求平摊的分配到多个服务上&#xff0c;从而达到系统的HA&#xff08;高可用&#xff09; 三&#xff1a;负载均衡分类&#xf…

Android Studio(控件常用属性)

通用属性 属性描述android:id用于为视图指定唯一的标识符。android:layout_width用于指定视图的宽度。android:layout_height用于指定视图的高度。android:layout_margin用于指定视图周围的空白区域。android:layout_padding用于指定视图内部的填充区域。android:background用…

思维模型 锚定效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。先入为主&#xff0c;决策易偏。 1 锚定效应的应用 1.1 定价策略中的锚定效应 黑珍珠的定价策略&#xff1a;在 20 世纪 70 年代&#xff0c;黑珍珠被视为一种廉价的珠宝。然而&#xff…

[算法日志]图论: 广度优先搜索(BFS)

[算法日志]图论&#xff1a; 广度优先搜索(BFS) 广度优先概论 ​ 广度优先遍历也是一种常用的遍历图的算法策略&#xff0c;其思想是将本节点相关联的节点都遍历一遍后才切换到相关联节点重复本操作。这种遍历方式类似于对二叉树节点的层序遍历&#xff0c;即先遍历完子节点后…

STM32存储左右互搏 SPI总线读写FLASH W25QXX

STM32存储左右互搏 SPI总线读写FLASH W25QXX FLASH是常用的一种非易失存储单元&#xff0c;W25QXX系列Flash有不同容量的型号&#xff0c;如W25Q64的容量为64Mbit&#xff0c;也就是8MByte。这里介绍STM32CUBEIDE开发平台HAL库操作W25Q各型号FLASH的例程。 W25QXX介绍 W25QX…