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

一、前言

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


二、术语

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 tokenizerdef 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 xreturn x / normelse: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_dimif __name__ == '__main__':dim = 128input = "今天天气晴朗,心态正好"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.mzph.cn/news/696393.shtml

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

相关文章

常见消息中间件

ActiveMQ 我们先看ActiveMQ。其实一般早些的项目需要引入消息中间件,都是使用的这个MQ,但是现在用的确实不多了,说白了就是有些过时了。我们去它的官网看一看,你会发现官网已经不活跃了,好久才会更新一次。 它的单机吞…

2024年学习的最高薪酬编程语言

2024年学习的最高薪酬编程语言 10. Scala Scala是一种在Java虚拟机(JVM)上运行的函数式编程语言。它通常用于大数据处理、机器学习和后端Web开发。 关于Scala编程语言及其常见用途的要点如下: Scala是一种通用编程语言,运行在J…

mac真的安装不了vmware吗 mac如何安装crossover crossover序列号从哪里买 购买正版渠道

有些用户可能想在mac上运行一些只能在windows上运行的软件,比如游戏、专业软件等。这时候,就需要用到虚拟机技术,也就是在mac上安装一个可以模拟其他操作系统的软件,比如vmware或者crossover。那么,mac真的安装不了vmw…

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

一、需求分析 当我们从多个层次来详细分析后台管理系统时,可以将其功能和定义进一步细分,以便更好地理解其在不同方面的作用和实际运作。 1. 功能层次 a. 用户管理功能: 用户注册和登录:管理用户账户的注册和登录过程。权限管…

K8S故障处理指南:网络问题排查思路

1. 前言 对于私有化环境,客户的网络架构,使用的云平台存在着各种差异,K8S网络可能会出现各种问题,此文着重讲解遇到此种问题的排查方法和思路,不会涉及相关网络底层技术描述. 环境说明 由于我们的k8s网络组件默认使…

5.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-测试需求与需求拆解

内容参考于:易道云信息技术研究院VIP课 上一个内容:模拟游戏登陆器启动游戏并且完成注入 首先正常分析软件程序有没有漏洞,需要通过它的操作侵入,比如买东西,就通过买东西的按钮它背后有源代码就看源代码&#xff0c…

【PythonGIS】基于Python融合矢量数据(多面合一)

之前发过使用批量合并矢量数据的文章:【Python&GIS】基于Python批量合并矢量数据,正好前段时间有需求把矢量数据进行融合,然后就编了一段融合矢量数据的代码。今天就和大家分享一下如何使用Python对矢量数据实现融合的操作。 1.定义 首先…

基于Embedding召回和DSSM双塔模型

文章目录 基于Embedding召回介绍基于Embedding召回算法分类I2I召回U2I召回 DSSM模型DSSM双塔模型层次 基于Embedding召回介绍 基于embedding的召回是从内容文本信息和用户查询的角度出发,利用预训练的词向量模型或深度学习模型,将文本信息转换成向量进行…

三、创建脚手架和脚手架分析

三、创建脚手架 一、环境准备 1、安装node.js **下载地址:**https://nodejs.org/zh-cn/界面展示 2、检查node.js版本 查看版本的两种方式 node -vnode -version 出现版本号则说明安装成功(最新的以官网为准) 3、为了提高我们的效率&…

深度学习从入门到不想放弃-7

上一章的内容 深度学习从入门到不想放弃-6 (qq.com) 今天讲的也算基础(这个系列后来我一寻思,全是基础 ),但是可能要着重说下,今天讲前向计算和反向传播,在哪儿它都永远是核心,不管面对什么模型 前向计算: 有的叫也叫正向传播,正向计算的,有的直接把前向的方法梯度下…

祖龙娱乐 x Incredibuild

关于祖龙娱乐 祖龙娱乐有限公司(下文简称“祖龙娱乐”)是一家总部位于北京的移动游戏开发公司,成立于 2014 年,拥有成功的大型多人在线角色扮演游戏移动游戏组合,如《六龙争霸》、《梦幻诛仙》和《万王之王 3D》。公司…

微信小程序 ---- 慕尚花坊 项目初始化

目录 项目介绍 01. 项目概述 02. 项目演示 03. 项目技术栈 04. 接口文档 申请开发权限 项目初始化 01. 创建项目与项目初始化 02. 自定义构建 npm 集成Sass 03. 集成项目页面文件 04. VsCode 开发小程序项目 项目介绍 01. 项目概述 [慕尚花坊] 是一款 同城鲜花订购…

Context Capture无法量测连接点,Survey提示Read only只读模式

Context Capture无法量测连接点,Surveys提示Read only只读模式 出现这个问题一般是因为当前block已经完成三维重建,所以无法再编辑稀疏重建(空三)结果。只能把当前block复制一份,在复制的block上量测新的连接点。如下…

PowerDesigner 安装

PowerDesigner 安装汉化破解使用过程 - 沦陷 - 博客园 (cnblogs.com)https://www.cnblogs.com/huangting/p/12654057.html

不要浪费

解法&#xff1a; 记录一下tle的代码 #include <iostream> #include <vector> #include <algorithm> using namespace std; #define endl \n bool check(vector<int>& a, int l,int k) {int sum 0;for (int i 0; i < a.size() && l…

vue3中使用 tui-image-editor进行图片处理,并上传

效果图 下载包 pnpm i tui-image-editor pnpm i tui-color-picker调用组件 //html部分 <el-dialog v-model"imgshow" destroy-on-close width"40%" draggable align-center :show-close"true":close-on-click-modal"false">&l…

基于springboot+vue的视频网站系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Stable Diffusion 模型分享:FenrisXL(芬里斯XL)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十

IO进程线程第6天

1.使用有名管道完成两个进程的相互通信 send.c代码如下&#xff1a; #include <myhead.h>int main(int argc, const char *argv[]) {pid_t pidfork();if(pid>0){//父进程//从管道1中读取数据int fd-1;if((fdopen("./mkfifo1",O_RDONLY))-1){perror("…

【安卓基础3】Activity(一)

&#x1f3c6;作者简介&#xff1a;|康有为| &#xff0c;大四在读&#xff0c;目前在小米安卓实习&#xff0c;毕业入职 &#x1f3c6;本文收录于 安卓学习大全&#xff0c;欢迎关注 &#x1f3c6;安卓学习资料推荐&#xff1a; 视频&#xff1a;b站搜动脑学院 视频链接 &…