2026/1/20 19:32:02
网站建设
项目流程
英文外贸网站制作,建设安全备案登入那个网站,做个电商网站需要怎么做,网站建设基础策划书原文#xff1a;towardsdatascience.com/how-to-create-powerful-ai-representations-by-combining-multimodal-information-a16d9474a572 在本文中#xff0c;我将讨论如何将不同模态的信息整合到您的机器学习系统中。这些模态可以是图像、文本或音频等信息。例如#xff0…原文towardsdatascience.com/how-to-create-powerful-ai-representations-by-combining-multimodal-information-a16d9474a572在本文中我将讨论如何将不同模态的信息整合到您的机器学习系统中。这些模态可以是图像、文本或音频等信息。例如也可以是从不同角度拍摄的同一种物体的多张图像。添加来自不同模态的信息为机器学习系统提供了更多的工作信息这反过来又可以提高系统的性能。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/82f511c968e4f390dd3e1414b08b6f72.png了解如何在本文中结合不同模态的信息。图由 ChatGPT 提供。“在机器学习中创建结合多模态信息的图像”提示。ChatGPT4OpenAI2024 年 4 月 1 日。chat.openai.com.动机我写这篇文章的动机是我目前正在解决一个有两个不同模态信息的问题。第一个模态是文档的视觉信息第二个模态是文档中的文本。单独来看机器学习系统仅使用文档的视觉数据或文档中的文本数据就能实现相当不错的性能。然而如果您只使用两种模态中的一种您需要向机器学习提供尽可能多的信息以实现最佳性能。因此您应该结合不同的模态以确保您的机器学习系统达到最佳性能。虽然在处理多模态系统时您通常有两个数据模态但您可以调整以下我讨论的所有方法以适应三个或更多数据模态。我主要使用两种模态是为了尽可能简单地描述这些方法。您可以看到我在本文中讨论的每种方法的总体框架。首先您至少需要两种信息模态图像和文档的文本。然后您为每种模态创建嵌入。这些嵌入随后在组合过程中被结合从而表示多模态信息。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/784497973ea1389232147153229b96b5.png这张图像代表了本文中讨论的每种方法的总体轮廓。你从不同的信息模态开始如图像和文本并从数据中创建嵌入。然后这些嵌入被组合起来创建多模态信息。图像由作者提供。目录· 动机 · 目录 · 使用多模态模型 · 训练一个神经网络来组合嵌入 · 创建一个多模态图 · 集成模型 · 结论使用多模态模型我将讨论的第一个方法是将来自不同模态的信息整合进来是使用多模态模型。多模态模型在其架构中考虑了不同的模态。在 HuggingFace上你可以找到一系列的多模态模型包括结合图像和文本视觉-语言多模态模型或音频和文本的模型。这些模型具有一个旨在结合两种信息模态的架构并且是在考虑了这两种模态的情况下进行下游任务训练的。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e0539acfa0ca1d7e8e5746fe8115b1a6.png这张图像展示了多模态模型的一般架构。我展示了一个模型它接受图像和文本模态作为输入这些输入被输入到多模态模型中从而创建了一个预测。图像由作者提供。使HuggingFace模型适合使用的原因是你可以在 HuggingFace 上找到的模型通常都是预训练的这意味着你可以直接使用它们来完成模型训练时的下游任务。使强大模型如此容易获得是 HuggingFace 的一个重要贡献。我也推荐查看 HuggingFace 通过博客提供的其他一些有趣贡献包括数据集供你训练模型使用以及空间供你托管模型。HuggingFace 模型可以是一种利用多个信息模态的强大方式我在关于如何创建强大的嵌入的文章中进行了更深入的讨论。然而缺点是这些模型是为特定任务训练的这仅与您的需求相匹配。如果您有一个 HuggingFace 上任何模型都没有执行的下游任务或者可用的模型不符合您的特定需求请考虑探索其他利用您可用的不同数据模态的选项。我将在本文的后面部分提到几个不同的选项。训练一个神经网络以组合嵌入您还可以训练您的神经网络以结合不同的数据模态。首先您需要为您的模态创建嵌入您可以在以下关于创建鲁棒嵌入的文章中了解如何创建如何从您的数据创建强大的嵌入以供您的 AI 使用这些嵌入代表了您的数据您需要组合这些嵌入以创建一个多模态嵌入。可以通过创建一个考虑每个模态嵌入的线性层来组合嵌入。组合嵌入可以通过首先连接嵌入然后创建一个线性层来实现该线性层接受连接后的嵌入并将嵌入的大小减少到与每个模态原始嵌入相同的形状。您可以在下面的图像中看到可视化此过程。# code to combine tensors with a linear layerimporttorchimporttorch.nnasnn tensor1torch.randn(5,3)tensor2torch.randn(5,3)combined_tensortorch.cat((tensor1,tensor2),dim1)withtorch.no_grad():#do not need gradients in this caselinear_layernn.Linear(in_features(tensor1.shape[1]tensor2.shape[1]),out_featurestensor1.shape[1])#output shape is original shapeoutput_tensorlinear_layer(combined_tensor)这将创建类似以下张量的结构https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c72e7b5682dbb73acbaa2a447f8b4a00.png该图像显示了运行上述代码后的我的张量。请注意嵌入是随机初始化的因此您将不会得到确切的数字尽管输出形状应该相同。此外线性层的权重也是随机初始化的因此即使您有相同的输入张量输出张量也不会相同。图由作者提供您可以使用下面的图像可视化上述代码执行的过程https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/21d15307d0163d6ddcf06e42a39139c3.png这是一张展示结合过程的图像。你从两个嵌入 A 和 B 开始。然后你将它们连接起来并发送到一个线性层。线性层随后恢复原始向量形状从而产生一个新的输出张量其形状与原始张量相同包含来自两个原始张量的信息。图由作者提供。训练一个神经网络来结合不同模态的嵌入可以创建包含来自其他模态信息的新稳健嵌入。这些嵌入可用于多个用例包括分类和聚类。你还可以通过阅读我关于理解嵌入质量的文章来测试你新创建嵌入的质量。通过这种方式你可以比较你原始和新生成的嵌入的质量这应该会在我关于理解嵌入质量的文章中讨论的嵌入质量指标上显示出性能的提升。然而这种方法的一个缺点是它需要标记的数据因为你在训练一个网络来结合嵌入。你需要微调你新创建的线性层的权重以便线性层可以学习如何最佳地整合来自不同模态的嵌入这个过程需要一个标记的数据集。如果没有标记数据你可以在我关于创建合成数据的文章中了解更多关于创建合成数据的信息或者你可以参考我在本文中提供的另一种方法。创建一个多模态图结合不同数据模态的另一种选项是创建一个多模态图并直接在此图上执行下游任务。如果你的问题适合使用图这可以是一种结合不同信息模态的稳健方法。我假设你为每个数据模态创建了不同的嵌入来创建多模态图。然后给定这些嵌入有几种图创建选项。你有的选项包括**使用 KMeans。**采用这种方法你找到与给定嵌入最相似的嵌入。然后在相似的嵌入之间建立边。**使用阈值。**在找到所有嵌入之间的余弦相似度之后你可以创建相似度高于阈值的嵌入之间的边。**使用百分位数。**通过设置百分位数你保留了最相似边的最高百分比。使用这种方法你可以为每个数据模态创建一个图。为了测试你每个图的品质你可以阅读我的关于测试图品质的文章。你可以像下面展示的那样以两种方式可视化你创建的多模态图。一种是一个多图其中每个模态组合几个图形成一个 3D 图。另一种可视化你的图的方法是你已经创建了一个异构图其中不同类型的边代表了数据各种模态之间的相似性。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/fdb44cc960b44e7a966e91bbe1eba8e1.png我在图片中展示了两种可视化多模态图的方法。选项 1 是将它可视化为一个 3D 图其中每个模态对应一个图。选项 2 是将它可视化为一个具有不同类型边的异构图。图片由作者提供。在创建你的图之后你现在可以在图上执行不同的机器学习任务。你可以立即执行的一个任务是社区检测即检测图中每个节点属于哪个社区。另一种你可以采取的方法是从你创建的图中创建嵌入关于这一点我下面已经写了一篇文章如何在图中从拓扑信息创建强大的嵌入从图的拓扑信息中创建的嵌入可以用来执行不同的机器学习任务如分类、回归、聚类等。然而从拓扑信息到嵌入的转换可能会使你丢失一些存储在图中的信息。基于图的方法存在的问题是并非所有机器学习中的任务都适合使用图尽管你可能能够调整你的任务或数据以适应这种方法。另一个缺点是你主要是在一个模态内比较信息而跨模态的信息组合较少在创建图时。结合向量此外你还可以结合嵌入以融合来自不同模态的信息。你主要有三种方法可以用来组合嵌入连接加法乘法如下图片所示https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/0ca8d1fbf85a685cea4e8f62726051a8.png图像展示了如何组合示例嵌入 A 和 B。图片由作者提供。在结合嵌入后你很可能还需要对向量进行归一化因为结合过程会改变数据的尺度。使用连接、加法或乘法结合嵌入是一种简单而有效的方法用于结合来自不同模态的信息。这种方法可以用几行 Python 代码实现如下所示。# Define vectors A and BAtorch.tensor([0.1,0.3,0.2])Btorch.tensor([0.5,0.1,0.4])res_concattorch.cat((A,B),0)res_additionAB res_multiplicationA*B# normalize the result vectorsres_concatres_concat/torch.norm(res_concat)res_additionres_addition/torch.norm(res_addition)res_multiplicationres_multiplication/torch.norm(res_multiplication)新创建的向量将包含用于创建新向量的原始向量的模态信息。为了测试你创建的向量你可以阅读我的关于测试嵌入质量的文章。这种方法的缺点是由于其简单性在结合向量后你将丢失每个模态的一些信息。例如将两个向量加在一起将创建一个表示原始两个向量的向量。然而这个新向量并不代表原始两个向量的全部信息以下示例可以说明这一点https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f0f3a320abec0735d9dff4c725fd548c.png一个示例展示了不同的向量A1, B1 和 A2, B2如何创建相同的组合向量C1 和 C2。这突出了使用加法或乘法作为组合嵌入工具的弱点。图片由作者提供。当乘以向量时同样的问题会出现。虽然将向量连接起来不会产生这个问题但你应该注意新的连接向量将与原始向量的形状不同。集成模型使用集成模型也是结合来自不同模态信息的一种有效方法。集成模型是通过创建多个模型然后结合每个模型的输出以创建组合预测来创建的。集成方法与我描述的用于训练神经网络以结合嵌入的方法类似。然而在这种情况下不同嵌入的结合发生在每个模型的输出之后与之前描述的方法相反其中模态的结合发生在网络中的较早阶段。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/56b37a03b2cad90dc783f683587fc094.png集成网络的例子是包含两个模型一个图像预测模型和一个文本预测模型的集成。每个模型生成其输出通过组合函数组合成一个集成输出。图由作者提供。集成模式之所以强大是因为它们利用了不同机器学习模型的力量来做出一个改进的预测同时考虑所有模型。你可以利用这一点将各种信息模态纳入你的机器学习模型。这种方法的缺点是根据你执行的机器学习任务它可能不适合你的用例。使用集成模型通常需要像分类这样的任务其中组合模型输出是一个简单的过程。模型的组合步骤可能是一个挑战。假设你训练一个新的机器学习模型来组合集成中每个模型的输出。在这种情况下你实际上是在做我在神经网络组合嵌入部分描述的同样的事情。使用线性层组合嵌入可能是一个好方法但如前所述这种策略依赖于你有一个标记的数据集这只有在某些情况下才可用。解决这个问题的方法之一是使用非机器学习方法来组合集成中每个模型的输出。对于一个分类任务例如这可以通过使用集成中置信度最高的模型或使用集成中大多数模型使用的预测来实现如果你在你的集成中有超过两个模型结论在这篇文章中我描述了你可以采取的几种方法来组合不同的数据模态。我讨论的方法包括使用多模态模型例如来自HuggingFace训练一个神经网络来组合嵌入创建一个多模态图通过加法、乘法或连接操作组合向量集成模型根据你的需求不同的方法可能更适合你。你应该考虑测试不同的方法以确定哪种最适合你的机器学习问题。你也可以阅读我在WordPress上的文章。