理解全文并背诵 (理解融入)

嵌入(Embeddings)将项目(如单词、图像、用户、产品等)表示为数字向量。

它将高维数据转换为低维数据,同时保留关键方面,如关系或结构。

在单词方面,king(国王)和queen(女王)将有相似的数字列表(嵌入),表明它们之间的相似性。对于图像,两张狗的照片应该会产生相似的嵌入。

这些数字列表作为机器学习模型的输入,帮助做出更准确的预测。

我们来看一个关于单词的简单例子。假设我们有单词dog(狗)、cat(猫)、fish(鱼)和bicycle(自行车)。我们可以在一个非常简单的二维嵌入空间中表示这些单词,其中一个轴代表“动物性”而另一个轴代表“陆地性”。

“狗”可能被表示为 [0.9, 0.8],因为它是动物,并且主要是陆地生物。

“猫”可能是 [0.9, 0.7],因为它是动物,并且主要是陆地生物,但不如狗那么多。

“鱼”可能是 [0.9, 0.1],因为它是动物,但不是陆地生物。

“自行车”可能被表示为 [0.1, 0.8],因为它不是动物,但在陆地上使用。

嵌入通常是使用机器学习模型创建的。例如,Word2Vec、FastText 和 BERT 是用于创建词嵌入的流行模型。

理解建立在交流的基础上,理解融入

下面看看如何转换文本为嵌入向量:

import gensim.downloader as api # 导入gensim的*载下**器模块
from sklearn.manifold import TSNE # 导入t-SNE算法
import matplotlib.pyplot as plt # 导入绘图工具matplotlib的pyplot子库
import numpy as np # 导入科学计算库numpy

# 加载预训练的word2vec模型
model = api.load('word2vec-google-news-300')

# 定义要可视化的一组单词
words = ['king', 'queen', 'man', 'woman', 'boy', 'girl', 'bread', 'butter', 'doctor', 'nurse','hospital']

# 获取每个单词对应的向量表示
vectors = [model[word] for word in words]

# 将向量列表转换为numpy数组,以便进行t-SNE降维
n_samples = len(vectors)
vectors_array = np.array(vectors)

# 初始化t-SNE模型,设置perplexity为样本数减1
tsne = TSNE(n_components=2, perplexity=n_samples-1)
# 对词向量进行t-SNE降维
vectors_2d = tsne.fit_transform(vectors_array)

# 绘制二维平面上的词向量分布
plt.figure(figsize=(6, 6))
plt.scatter(vectors_2d[:, 0], vectors_2d[:, 1])

# 在对应的位置上标注每个单词
for i, word in enumerate(words):
 plt.annotate(word, (vectors_2d[i, 0], vectors_2d[i, 1]))

# 显示绘制的图像
plt.show()

理解建立在交流的基础上,理解融入

这段代码主要实现了利用t-SNE算法对一组预定义的单词的word2vec向量进行二维可视化。通过加载预训练的Google News word2vec模型获取单词向量,然后使用t-SNE降维方法将高维的向量空间映射到二维平面上,最后通过matplotlib库进行可视化展示。

创建图像嵌入,示例代码:

# 导入TensorFlow库
import tensorflow as tf

# 从Keras的applications模块中导入预训练的ResNet50模型及其预处理函数
from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input

# 导入CIFAR-10数据集
from tensorflow.keras.datasets import cifar10

# 引入t-SNE降维算法
from sklearn.manifold import TSNE

# 引入numpy用于科学计算
import numpy as np

# 引入matplotlib进行数据可视化
import matplotlib.pyplot as plt

# 加载CIFAR-10数据集,保留前10000个训练样本
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x_train = x_train[:10000]

# 初始化ResNet50模型,不包含顶层分类器,并加载预训练权重(基于ImageNet)
model = ResNet50(include_top=False, weights='imagenet', pooling='avg')

# 对训练集图片进行预处理
x_train_preprocessed = preprocess_input(x_train)

# 使用ResNet50模型对预处理后的训练图片提取特征向量
embeddings = model.predict(x_train_preprocessed)

# 应用t-SNE算法将高维特征向量降至二维空间
tsne = TSNE(n_components=2)
embeddings_2d = tsne.fit_transform(embeddings)

# 绘制二维嵌入空间中的点,颜色对应于训练样本的真实标签
plt.figure(figsize=(10, 10))
plt.scatter(embeddings_2d[:, 0], embeddings_2d[:, 1], c=y_train[:10000], cmap='tab10')
# 显示降维后的二维嵌入图
plt.show()

理解建立在交流的基础上,理解融入

Towhee 是一个开源的机器学习pipeline,它可以帮助我们将非结构化数据编码成嵌入。不需要编写任何代码。只需调用流水线然后进行转换即可。

理解建立在交流的基础上,理解融入

示例代码,将上述图片转换为嵌入向量:

from towhee import AutoPipes
import numpy as np

# 创建一个用于图像嵌入的自动管道
p = AutoPipes.pipeline('image-embedding')

# 对指定图片进行处理并获取输出结果
output = p('./files/towhee.png').get()

# 打印输出结果
# print(output)

# 打印输出结果的长度以及每个元素的内容,以了解其具体结构和内容
print("Output list 长度: ", len(output))
for i, feature in enumerate(output):
 print(f"元素 {i+1} 明细:")
 # 这里假设feature是一个numpy数组,你可以根据实际情况替换为相应类型的处理方式
 if isinstance(feature, np.ndarray):
 print("Shape: ", feature.shape)
 print("Data: ", feature.tolist())
 else:
 print(feature)

这段代码主要实现的功能是对指定图片使用预定义的图像嵌入管道提取特征,并详细展示提取出的所有特征向量(或特征矩阵)的信息。

输出信息:

理解建立在交流的基础上,理解融入

#记录我的2024#