开源模型应用落地-工具使用篇-获取文本向量(五)

news2024/9/22 17:25:11

一、前言

    在之前学习的"
开源模型应用落地-工具使用篇"系列文章中,我们已经学会了如何使用向量数据库。然而,还有一个问题一直未解决,那就是如何处理文本向量。在本文中,我们将继续深入学习关于向量的知识,特别是如何处理文本向量。


二、术语

2.1、文本向量

    是将文本表示为数值向量的一种方法。文本向量可以捕捉到文本的语义和语法信息,使得我们可以在向量空间中对文本进行比较、计算相似度或应用机器学习等算法进行文本分类、情感分析、机器翻译等自然语言处理任务。

常见的文本向量表示方法包括:

  • One-Hot向量:将每个单词表示为一个高维向量,其中只有一个维度为1,其余维度为0。每个单词都有一个独特的向量表示。
  • 词袋模型(Bag-of-Words):将文本表示为单词的计数向量。每个维度表示一个单词,向量中的值表示该单词在文本中出现的次数。
  • TF-IDF向量:根据词频-逆文档频率(TF-IDF)计算每个单词在文本中的重要性,并将文本表示为TF-IDF值的向量。
  • 词嵌入向量:通过将单词映射到一个低维连续向量空间中,捕捉单词之间的语义关系。常见的词嵌入模型包括Word2Vec、GloVe和FastText。
  • 句子向量:将整个句子或文本表示为一个向量。这可以通过对文本中所有词嵌入向量取平均值或使用更复杂的模型(如循环神经网络或Transformer)来实现。

2.2、获取文本向量的方法

  • 基于预训练模型的词嵌入:使用预训练的词嵌入模型(例如Word2Vec、GloVe或FastText)可以将每个单词映射到一个向量空间中的固定维度向量。为了获取整个文本的向量表示,可以简单地对文本中所有单词的向量取平均值或加权平均值。
  • 基于深度学习的模型:使用深度学习模型(如循环神经网络(RNN)或卷积神经网络(CNN))可以学习文本的表示。这些模型可以将整个文本作为输入,并输出一个固定维度的向量表示。例如,在自然语言处理任务(如情感分析或文本分类)中,可以使用RNN或CNN模型对文本进行建模,并使用模型中最后一个隐藏层的输出作为文本的向量表示。
  • 基于Transformer的模型:Transformer模型,如BERT(Bidirectional Encoder Representations from Transformers),可以学习上下文相关的词嵌入表示。BERT模型可以将整个文本作为输入,并为每个单词生成一个向量表示。为了获取整个文本的向量表示,可以使用BERT模型中的特定层的输出,例如CLS(分类)标记的输出。
  • 使用已训练的向量表示:有一些已经训练好的文本向量表示可供使用,如Universal Sentence Encoder(USE)或InferSent。这些模型已经在大规模文本语料库上进行了训练,并可以将整个文本映射到一个固定维度的向量空间中。

三、技术实现

3.1、通过开源模型实现

# 下载模型文件,例如qwen模型

def loadTokenizer(model_path):
    tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
    return tokenizer

def getVector(model_path, content):
    tokenizer = loadTokenizer(model_path)

    inputs = tokenizer(content, return_tensors='pt')
    # 设置打印选项,禁用科学计数法
    torch.set_printoptions(sci_mode=False)

    return inputs["input_ids"].float().numpy()[0]

if __name__ == '__main__':
    model_path = 'E:\\model\\qwen-7b-chat'
    input = "今天天气晴朗,心态正好"
    vector = getVector(model_path,input)
    print(vector)

输出:

#换成baichuan的模型

if __name__ == '__main__':
    model_path = 'E:\\model\\baichuan2-7B-chat'
    input = "今天天气晴朗,心态正好"
    vector = getVector(model_path,input)
    print(vector)

输出:

3.2、通过GPT实现

# 若未安装openai包,请先执行pip install openai

# 安装其他依赖包,pip install numpy

def normalize_l2(x):
    x = np.array(x)
    if x.ndim == 1:
        norm = np.linalg.norm(x)
        if norm == 0:
            return x
        return x / norm
    else:
        norm = np.linalg.norm(x, 2, axis=1, keepdims=True)
        return np.where(norm == 0, x, x / norm)

def getVector(dim,input):
    client = OpenAI(api_key=API_KEY)

    response = client.embeddings.create(
        model="text-embedding-3-small", input=input, encoding_format="float"
    )

    cut_dim = response.data[0].embedding[:dim]
    norm_dim = normalize_l2(cut_dim)
    return norm_dim

if __name__ == '__main__':
    dim = 128
    input = "今天天气晴朗,心态正好"
    vector = getVector(dim,input)
    print(type(vector))
    print(vector)

输出:


四、附带说明

4.1、from openai import OpenAI报错

报错原因是:openai包的版本太低,当前openai版本为0.27.0

解决方案:升级openai包

pip install openai --upgrade

4.2、生成的文本向量需要根据实际情况进行裁剪或补位,例如计算需要256维向量,生成的文本向量不足256维的情况下,需要在尾部添加占位符(通常为0)

4.3、生成的文本向量需要进行预处理(如归一化)后,才进行计算

4.4、使用GPT,则可以根据需要选择不同的模型(https://platform.openai.com/docs/guides/embeddings/embedding-models

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

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

相关文章

缓存篇—缓存雪崩

什么是缓存雪崩 通常我们为了保证缓存中的数据与数据库中的数据一致性,会给 Redis 里的数据设置过期时间,当缓存数据过期后,用户访问的数据如果不在缓存里,业务系统需要重新生成缓存,因此就会访问数据库,并…

Docker后台启动镜像,如何查看日志信息

执行 docker run -d -p 9090:8080 core-backend-image 命令后,Docker 会在后台运行一个新的容器实例,并映射宿主机的 9090 端口到容器的 8080 端口。要查看启动的容器日志,您需要先获取容器的 ID 或名称,然后使用 docker logs 命令…

如何设置路由器的端口映射?

路由器端口映射是一种常用的网络配置方式,可以将外部网络请求转发到内部网络上的指定设备。通过设置端口映射,我们可以实现远程访问局域网内的设备,使其在任何网络环境下都可以被访问。本文将介绍如何设置路由器的端口映射,以便实…

【前端素材】推荐优质后台管理系统Spica Admin平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具,它通常作为一个独立的后台界面存在,供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能: 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

C#最优队列PriorityQueue使用比较器

对30个对象进行优先选择前4个,这个4个根据该对象的Info属性进行判断,它是自定义类型,所以需要用比较器来比较它的大小。 public class CustomType{public int? ID { get; set; }}public class RecSample{public int Name { get; set; }publi…

NLP_构建GPT模型并完成文本生成任务

文章目录 搭建GPT模型(解码器)构建文本生成任务的数据集训练过程中的自回归文本生成中的自回归(贪婪搜索)完整代码小结 搭建GPT模型(解码器) GPT 只使用了 Transformer的解码器部分,其关键组件…

江科大stm32学习笔记——【3-2】GPIO输出:LED闪烁LED流水灯蜂鸣器

(一) 硬件连接 1.LED闪烁 LED灯正极连接面包板电源正极,LED负极连接单片机A0口 (也可以LED负极连面包板负极,LED正极连接单片机A0口) 跳线连接单片机3.3和面包板正极,连接单片机GND和面包板负极 2.LED流水灯 3.蜂鸣…

DevOps的3大核心基础架构

原文链接:DevOps的3大核心基础架构_软件开发生产线 CodeArts_理论实践_DevOps概览 由于近年DevOps概念的火热,加之DevOps的涵盖面非常广,因此有很多文章和技术都在和DevOps强行关联,使很多想要了解学习DevOps的开发者迷惑不解。 …

Draw.io绘制UML图教程

一、draw.io介绍 1、draw.io简介 draw.io 是一款强大的免费在线图表绘制工具,支持创建流程图、组织结构图、时序图等多种图表类型。它提供丰富的形状库、强大的文本编辑和样式设置功能,使用户能够轻松创建专业级图表。draw.io 具有用户友好的界面&…

Hive【内部表、外部表、临时表、分区表、分桶表】【总结】

目录 Hive的物种表结构特性 一、内部表 建表 使用场景 二、外部表 建表:关键词【EXTERNAL】 场景: 外部表与内部表可互相转换 三、临时表 建表 临时表横向对比​编辑 四、分区表 建表:关键字【PARTITIONED BY】 场景: 五、分桶表 …

ssm+springmvc基于springboot的宠物领养系统的设计与实现_j5fk4

宠物领养系统主要是为了提高管理员的工作效率,满足管理员对更方便、更快、更好地存储所有信息和数据检索功能的要求。通过对多个类似网站的合理分析,确定了宠物领养系统的各个模块。考虑到用户的可操作性,经过深入调查研究,遵循系…

django rest framework 学习笔记-实战商城2

01收货地址模型类和视图定义_哔哩哔哩_bilibili 本博客借鉴至大佬的视频学习笔记 地址信息的管理:增删改查的实现 # 序列化器配置 class AddrSerializer(serializers.ModelSerializer):"""收货地址的模型序列化器"""class Meta:mo…

NXP实战笔记(六):S32K3xx基于RTD-SDK在S32DS上配置PWM发波

目录 1、概述 2、SDK配置 2.1、Port配置 2.2、Emios_Mcl_Ip 2.3、Emios_Pwm 2.4、代码示例 1、概述 针对S32K3xx芯片,产生PWM的硬件支持单元仅有两个,分别是eMiosx与Flexio. 生成PWM的顺序,按照单片机所用资源进行初始化执行如下 初始化…

ELK入门(四)-logstash

Logstash Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的存储库中。 Logstash 能够动态地采集、转换和传输数据,不受格式或复杂度的影响。利用 Grok 从非结构化数据中…

Kotlin基础 7

1.apply函数详解 1.1. DSL /*** 为什么要传入扩展函数(泛型),而不是一个普通的匿名函数* T.()->Unit* 扩展函数里自带了接收者对象的this隐式调用* 为什么是泛型的扩展函数?* 因为是由this 隐式调用 this 类型就是泛型类型, 相当于this的扩展函数,…

短剧小程序开发,重塑视频观看体验的科技革命

随着科技的飞速发展,人们的娱乐方式也在不断变化。短剧小程序作为新兴的数字娱乐形式,以其独特的魅力和巨大的市场潜力,正逐渐成为科技与娱乐结合的代表。本文将探讨短剧小程序的发展背景、优势特点、开发流程以及未来展望。 一、短剧小程序…

MySQL数据库集群技术主从复制 一主一从详细讲解

集群技术 集群概述 MySQL复制技术 集群目的 负载均衡 解决高并发 高可用HA 服务可用性 远程灾备 数据有效性 类型 一主一从 一主双从 双主双从 原理 概念 在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中…

RISC-V知识总结 —— 指令集

资源1: RISC-V China – RISC-V International 资源2: RISC-V International – RISC-V: The Open Standard RISC Instruction Set Architecture 资源3: RV32I, RV64I Instructions — riscv-isa-pages documentation 1. 指令集架构的类型 在讨论RISC-V或任何处理器架构时&…

Code Release Process

Code Control Process-CSDN博客 代码发布流程(Code Release Process)

Java毕业设计-基于ssm的校园二手交易管理系统-第67期

获取源码资料,请移步从戎源码网:从戎源码网_专业的计算机毕业设计网站 项目介绍 基于ssm的校园二手交易管理系统:前端jsp、jquery,后端 springmvc、spring、mybatis,集成商品管理、订单管理、销售管理、采购管理、购…