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

简介

机器学习通过使计算机能够从数据学习和做出预测来彻底改变了人工智能领域。机器学习的一个关键方面是数据的表示,因为表示形式的选择极大地影响了算法的性能和有效性。嵌入已成为机器学习中的一种强大技术,提供了一种捕获和编码数据点之间复杂关系的方法。本文[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 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python用cv2画图(line, rectangle, text等)

Python做图像图形研究的时候,通常需要画很多辅助几何形状(比如bounding box等)。基于opencv的几何图形绘制具有易用性,而且天然能和numpy数组交互。 本文总结了几种常用的cv2画几何图形的方法,当一个简易的手册使用&a…

【Git企业开发】第五节.远程操作

文章目录 前言一、理解分布式版本控制系统二、远程仓库 2.1 新建远程仓库 2.2 克隆远程仓库 2.3 向远程仓库推送 2.4 拉取远程仓库总结 前言 一、理解分布式版本控制系统 我们目前所说的所有内容(工作区,暂存区,版本库等等)&#x…

电子期刊制作与分享就用这个平台,简单!

无论是传统纸质期刊,还是现在网络期刊,我们身边常常有着它们的身影。随着互联网的飞速发展,纸质期刊逐渐消失,电子版期刊取而代之。而电子期刊打破了人们传统的时空观念,它更加贴近人们的生活,更好地满足新…

react-markdown支持83版本的Chrome,解决Object.hasOwn is not a function问题

旧版浏览器支持 react-markdown用了一个ES2022的api,Object.hasOwn测试的时候一切正常,当我切换到生成环境的旧版的83的Chrome之后,发现会报Object.hasOwn is not a function这个错误。 https://github.com/remarkjs/react-markdown/issues/…

计算机毕业设计选题推荐-校园失物招领微信小程序/安卓APP-项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Panda3d 相机控制

Panda3d 相机控制 文章目录 Panda3d 相机控制Panda3d中的透视镜头和垂直镜头透视镜头垂直镜头 Panda3d 中用代码控制相机的移动用键盘控制相机的移动用鼠标控制相机的移动 Panda3d 把相机也当做是一个 PandaNode,因此可以向操作其他节点对其进行操作。 真正的相机是…

交换机基础(零):交换机基础配置

一、华为设备视图 常用视图 名称 进入视图 视图功能 用户视图 用户从终端成功登录至设备即进 入用户视图,在屏幕上显示 kHuawei> 用户可以完成查看运行状态和统 计信息等功能。在其他视图下 都可使用return直接返回用户视 图 系统视图 在用户视图下&…

【RabbitMQ】RabbitMQ 消息的堆积问题 —— 使用惰性队列解决消息的堆积问题

文章目录 一、消息的堆积问题1.1 什么是消息的堆积问题1.2 消息堆积的解决思路 二、惰性队列解决消息堆积问题2.1 惰性队列和普通队列的区别2.2 惰性队列的声明方式2.3 演示惰性队列接收大量消息2.4 惰性队列的优缺点 一、消息的堆积问题 1.1 什么是消息的堆积问题 消息的堆积…

【3D图像分割】基于 Pytorch 的 VNet 3D 图像分割3(3D UNet 模型篇)

在本文中,主要是对3D UNet 进行一个学习和梳理。对于3D UNet 网上的资料和GitHub直接获取的代码很多,不需要自己从0开始。那么本文的目的是啥呢? 本文就是想拆解下其中的结构,看看对于一个3D的UNet,和2D的UNet&#x…

全自动洗衣机什么牌子好?内衣洗衣机品牌排行榜前四名

随着内衣洗衣机的流行,很多小伙伴在纠结该不该入手一款内衣洗衣机,专门来洗一些贴身衣物,答案是非常有必要的,因为我们现在市面上的大型洗衣机只能做清洁,无法对我们的贴身衣物进行一个高强度的清洁,而小小…

mediasoup webrtc音视频会议搭建

环境ubuntu22.10 nvm --version 0.33.11 node -v v16.20.2 npm -v 8.19.4 node-gyp -v v10.0.1 python3 --version Python 3.10.7 python with pip: sudo apt install python3-pip gcc&g version 12.2.0 (Ubuntu 12.2.0-3ubuntu1) Make 4.2.1 npm install mediasoup3 sudo …

MongoDB设置密码

关于为什么要设置密码 公司的测试服务器MongoDB服务对外网开放的,结果这几天发现数据库被每天晚上被人清空的了,还新建了个数据库,说是要支付比特币。查了日志看到有个境外的IP登录且删除了所有的集合。所以为了安全起见,我们给m…

Mac苹果电脑分辨率修改管理 安装SwitchResX 完美解决

SwitchResX for Mac是一款Mac应用程序,可帮助您更好地管理和控制显示器分辨率和其他显示设置。使用SwitchResX,您可以创建自定义分辨率、旋转屏幕、调整显示器色彩配置等。 1. 自定义分辨率:SwitchResX允许用户创建自定义的屏幕分辨率&#…

linux的环境安装以及部署前后端分离后台接口

⭐⭐ linux专栏:linux专栏 ⭐⭐ 个人主页:个人主页 目录 一.linux安装环境 1.1 jdk和tomcat的安装配置 1.1.1 解压jdk和tomcat的安装包 解压jdk安装包 解压tomcat安装包 1.2 jdk环境变量配置 1.3 tomcat启动 1.4 MySQL的安装 二.部署前后端分离…

PostgreSQL逻辑管理结构

1.数据库逻辑结构介绍 2.数据库基本操作 2.1 创建数据库 CREATE DATABASE name [ [ WITH ] [ OWNER [] user_name ] [ TEMPLATE [] template ] [ ENCODING [] encoding ] [ LC_COLLATE [] lc_collate ] [ LC_CTYPE [] lc_ctype ] [ TABLESPACE [] tablespace ] [ CONNECTION L…

diffusers-Tasks

https://huggingface.co/docs/diffusers/using-diffusers/unconditional_image_generationhttps://huggingface.co/docs/diffusers/using-diffusers/unconditional_image_generation1.Unconditional image generation 无条件图像生成是一个相对简单的任务。模型仅生成图像&…

深度学习之基于Tensorflow人脸面部表情识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于Tensorflow的人脸面部表情识别系统是一种基于深度学习技术的图像处理应用,该系统主要通过人脸图像数…

Typecho V1.2.1 博客更换域名还原

网站老是到期或则要换服务器(IP地址),单独改IP老是有图片不能加载,出个完整的迁移教程: 系统环境:Ubuntu 2204 宝塔面板 8.0.3 Nginx1.22 PHP 8.1 MySQL 5.7 备份 进入宝塔将网站根目录直接压缩&#xff0…

网络编程套接字(2)——简单的TCP网络程序

文章目录 一.简单的TCP网络程序1.服务端创建套接字2.服务端绑定3.服务端监听4.服务端获取连接5.服务端处理请求6.客户端创建套接字7.客户端连接服务器8.客户端发起请求9.服务器测试10.单执行流服务器的弊端 二.多进程版的TCP网络程序1.捕捉SIGCHLD信号2.让孙子进程提供服务 三.…

通过xshell传输文件到服务器

一、user is not in the sudoers file. This incident will be reported. 参考链接: [已解决]user is not in the sudoers file. This incident will be reported.(简单不容易出错的方式)-CSDN博客 简单解释下就是: 0、你的root需要设置好密码 sudo …