当前位置:首页 > 科技  > 软件

使用Ollama和Go基于文本嵌入模型实现文本向量化

来源: 责编: 时间:2024-05-09 09:25:40 80观看
导读基于RAG+大模型的应用已经成为当前AI应用领域的一个热门方向。RAG(Retrieval-Augmented Generation)将检索和生成两个步骤相结合,利用外部知识库来增强生成模型的能力(如下图来自网络)。图片在RAG赋能的大模型应用中,关

基于RAG+大模型的应用已经成为当前AI应用领域的一个热门方向。RAG(Retrieval-Augmented Generation)将检索和生成两个步骤相结合,利用外部知识库来增强生成模型的能力(如下图来自网络)。moN28资讯网——每日最新资讯28at.com

图片图片moN28资讯网——每日最新资讯28at.com

在RAG赋能的大模型应用中,关键的一步是将文本数据向量化后存储在向量数据库中(如上图的红框),以实现快速的相似度搜索,从而检索与输入查询相关的文本片段,再将检索到的文本输入给生成模型生成最终结果。moN28资讯网——每日最新资讯28at.com

本文是我学习开发大模型应用的一篇小记,探讨的是如何使用Ollama和Go语言实现文本数据的向量化处理,这是开发基于RAG的大模型应用的前提和基础。moN28资讯网——每日最新资讯28at.com

要进行文本向量化,我们首先要了解一下文本向量化的方法以及发展。moN28资讯网——每日最新资讯28at.com

纵观文本向量化技术的发展历程,我们可以看到从早期的词袋模型(Bag-of-Words)、主题模型(Topic Models),到词嵌入(Word Embedding)、句嵌入(Sentence Embedding),再到当前基于预训练的文本嵌入模型(Pretrained Text Embedding Models),文本向量化的方法不断演进,语义表达能力也越来越强。moN28资讯网——每日最新资讯28at.com

但传统的词袋模型忽略了词序和语义,主题模型又难以捕捉词间的细粒度关系,词嵌入模型(如Word2Vec、GloVe)虽然考虑了词的上下文,但无法很好地表征整个句子或文档的语义。近年来,随着预训练语言模型(如BERT、GPT等)的崛起,出现了一系列强大的文本嵌入模型,它们在大规模语料上进行预训练,能够生成高质量的句子/文档嵌入向量,广泛应用于各类NLP任务中。下图是抱抱脸(https://huggingface.co/)的最新文本嵌入模型的排行榜[1]:moN28资讯网——每日最新资讯28at.com

图片图片moN28资讯网——每日最新资讯28at.com

目前,基于大型预训练语言模型的文本嵌入已成为主流方法。这些模型在大规模无监督语料上预训练,学习到丰富的语义知识,生成的文本嵌入能较好地编码词语、短语和句子等多个层面的语义关系。Nomic AI[2]等组织发布了多种优秀的预训练文本嵌入模型,应用效果获得了较大提升。这种基于预训练的文本嵌入模型来实现文本数据向量化的方法也缓解了Go语言生态中文本向量化的相关库相对较少的尴尬,Gopher可以在预训练文本嵌入模型的帮助下将文本向量化。接下来,我们就来看看如何基于Ollama和Go基于文本嵌入模型实现文本向量化。moN28资讯网——每日最新资讯28at.com

考虑到实验环境资源有限,以及Ollama对Text Embedding模型的支持[3],这里我选择了Nomic AI开源发布的nomic-embed-text v1.5模型[4],虽然在抱抱脸上它的排名并不十分靠前。moN28资讯网——每日最新资讯28at.com

下面我们就用ollama下载nomic-embed-text:v1.5模型:moN28资讯网——每日最新资讯28at.com

$ollama pull nomic-embed-text:v1.5pulling manifestpulling manifestpulling 970aa74c0a90... 100% ▕██████████████████████████████████████████████████████████████████▏ 274 MB                         pulling c71d239df917... 100% ▕██████████████████████████████████████████████████████████████████▏  11 KB                         pulling ce4a164fc046... 100% ▕██████████████████████████████████████████████████████████████████▏   17 B                         pulling 31df23ea7daa... 100% ▕██████████████████████████████████████████████████████████████████▏  420 B                         verifying sha256 digestwriting manifestremoving any unused layerssuccess

算上之前的Llama3模型,目前本地已经有了两个模型:moN28资讯网——每日最新资讯28at.com

$ollama listNAME                       ID              SIZE      MODIFIED      llama3:latest              71a106a91016    4.7 GB    2 weeks ago      nomic-embed-text:v1.5      0a109f422b47    274 MB    3 seconds ago

不过与llama3的对话模型不同,nomic-embed-text:v1.5是用于本文嵌入的模型,我们不能使用命令行来run该模型并通过命令行与其交互:moN28资讯网——每日最新资讯28at.com

$ollama run nomic-embed-text:v1.5Error: embedding models do not support chat

一旦模型下载成功,我们就可以通过Ollama的HTTP API来访问该模型了,下面是通过curl将一段文本向量化的命令:moN28资讯网——每日最新资讯28at.com

$curl http://localhost:11434/api/embeddings -d '{  "model": "nomic-embed-text:v1.5",       "prompt": "The sky is blue because of Rayleigh scattering"}'{"embedding":[-1.246808409690857,0.10344144701957703,0.6935597658157349,-0.6157534718513489,0.4244955778121948,-0.7677388191223145,1.4136837720870972,0.012530215084552765,0.007208258379250765,-0.858286440372467,1.02878999710083,0.6512939929962158,1.0005667209625244,1.4231345653533936,0.30222395062446594,-0.4343869090080261,-1.358498215675354,-1.0671193599700928,0.3035725951194763,-1.5876567363739014,-0.9811925888061523,-0.31766557693481445,-0.32180508971214294,0.5726669430732727,-1.4187577962875366,-0.23533311486244202,-0.3387795686721802,0.02435961365699768,-0.9517765641212463,0.4120883047580719,-0.4619484841823578,-0.6658303737640381,0.010240706615149975,0.7687620520591736,0.9147310853004456,-0.18446297943592072,1.6336615085601807,1.006791353225708,-0.7928107976913452,0.3333768844604492,-0.9133707880973816,-0.8000166416168213,-0.41302260756492615,0.32945334911346436,0.44106146693229675,-1.3581880331039429,-0.2830675542354584,-0.49363842606544495,0.20744864642620087,0.039297714829444885,-0.6562637686729431,-0.24374787509441376,-0.22294744849205017,-0.664574921131134,0.5489196181297302,1.0000559091567993,0.45487216114997864,0.5257866382598877,0.25838619470596313,0.8648120760917664,0.32076674699783325,1.79911208152771,-0.23030932247638702,0.27912014722824097,0.6304138898849487,-1.1762936115264893,0.2685599625110626,-0.6646256446838379,0.332780659198761,0.1742674708366394,-0.27117523550987244,-1.1485087871551514,0.07291799038648605,0.7712352275848389,...,]}

注意:如果curl请求得到的应答是类似{"error":"error starting the external llama server: exec: "ollama_llama_server": executable file not found in $PATH "},可以尝试重启Ollama服务来解决:systemctl restart ollama。moN28资讯网——每日最新资讯28at.com

Ollama没有提供sdk,我们就基于langchaingo[6]的ollama包访问ollama本地加载的nomic-embed-text:v1.5模型,实现文本的向量化。下面是示例的源码:moN28资讯网——每日最新资讯28at.com

// textembedding.gopackage mainimport (        "context"        "fmt"        "log"        "github.com/tmc/langchaingo/llms/ollama")func main() {        llm, err := ollama.New(ollama.WithModel("nomic-embed-text:v1.5"))        if err != nil {                log.Fatal(err)        }        ctx := context.Background()        inputText := "The sky is blue because of Rayleigh scattering"        result, err := llm.CreateEmbedding(ctx, []string{inputText})        if err != nil {                log.Fatal(err)        }        fmt.Printf("%#v/n", result)        fmt.Printf("%d/n", len(result[0]))}

更新一下依赖:moN28资讯网——每日最新资讯28at.com

# go mod tidygo: finding module for package github.com/tmc/langchaingo/llms/ollamago: toolchain upgrade needed to resolve github.com/tmc/langchaingo/llms/ollamago: github.com/tmc/langchaingo@v0.1.9 requires go >= 1.22.0; switching to go1.22.3go: downloading go1.22.3 (linux/amd64)go: finding module for package github.com/tmc/langchaingo/llms/ollamago: found github.com/tmc/langchaingo/llms/ollama in github.com/tmc/langchaingo v0.1.9go: downloading github.com/stretchr/testify v1.9.0go: downloading github.com/pkoukk/tiktoken-go v0.1.6go: downloading gopkg.in/yaml.v3 v3.0.1go: downloading github.com/davecgh/go-spew v1.1.1go: downloading github.com/pmezard/go-difflib v1.0.0go: downloading github.com/google/uuid v1.6.0go: downloading github.com/dlclark/regexp2 v1.10.0

我本地的Go是1.21.4版本,但langchaingo需要1.22.0版本及以上,这里考虑向前兼容性[7],go下载了go1.22.3。moN28资讯网——每日最新资讯28at.com

接下来运行一下上述程序:moN28资讯网——每日最新资讯28at.com

$go run textembedding.go[][]float32{[]float32{-1.2468084, 0.10344145, 0.69355977, -0.6157535, 0.42449558, -0.7677388, 1.4136838, 0.012530215, 0.0072082584, -0.85828644, 1.02879, 0.651294, 1.0005667, 1.4231346, 0.30222395, -0.4343869, -1.3584982, -1.0671194, 0.3035726, -1.5876567, -0.9811926, -0.31766558, -0.3218051, 0.57266694, -1.4187578, -0.23533311, -0.33877957, 0.024359614, -0.95177656, 0.4120883, -0.46194848, -0.6658304, 0.010240707, 0.76876205, 0.9147311, -0.18446298, 1.6336615, 1.0067914, -0.7928108, 0.33337688, -0.9133708, -0.80001664, -0.4130226, 0.32945335, 0.44106147, -1.358188, -0.28306755, -0.49363843, 0.20744865, 0.039297715, -0.65626377, -0.24374788, -0.22294745, -0.6645749, 0.5489196, 1.0000559, 0.45487216, 0.52578664, 0.2583862, 0.8648121, 0.32076675, 1.7991121, -0.23030932, 0.27912015, 0.6304139, -1.1762936, 0.26855996, -0.66462564, 0.33278066, 0.17426747, -0.27117524, -1.1485088, 0.07291799, 0.7712352, -1.2570909, -0.6230442, 0.02963586, -0.4936177, -0.014295651, 0.5730515, ... ,  -0.5260737, -0.44808808, 0.9352375}}768

我们看到输入的文本成功地被向量化了,我们输出了这个向量的维度:768。moN28资讯网——每日最新资讯28at.com

注:文本向量维度的常见的值有200、300、768、1536等。moN28资讯网——每日最新资讯28at.com

我们看到,基于Ollama加载的预训练文本嵌入模型,我们可以在Go语言中实现高效优质的文本向量化。将文本数据映射到语义向量空间,为基于RAG的知识库应用打下坚实的基础。有了向量后,我们便可以将其存储在向量数据库中备用,在后续的文章中,我会探讨向量数据库写入与检索的实现方法。moN28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-87489-0.html使用Ollama和Go基于文本嵌入模型实现文本向量化

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 系统设计 | 多语言设计,你学会了吗?

下一篇: SpringBoot一个非常强大的数据绑定类

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • Mate60手机壳曝光 致敬自己的经典设计

    Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 一年经验在二线城市面试后端的经验分享

    一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • 腾讯盖楼,字节拆墙

    腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 大厂卷向扁平化

    大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 疑似小米14外观设计图曝光:后置相机模组变化不大

    疑似小米14外观设计图曝光:后置相机模组变化不大

    下半年的大幕已经开启,而谁将成为下半年手机圈的主角就成为了大家关注的焦点,其中被传有望拿下新一代骁龙8 Gen3旗舰芯片的小米14系列更是备受大家瞩
  • 三星Galaxy Z Fold/Flip 5国行售价曝光 :最低7499元/12999元起

    三星Galaxy Z Fold/Flip 5国行售价曝光 :最低7499元/12999元起

    据官方此前宣布,三星将于7月26日也就是明天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    据 DIGITIMES 消息,英伟达 AI GPU 出货逐季飙升,接下来 AMD MI 300 系列将在第 4 季底量产。而半导体业内人士表示,近日传出 AMD 的 AI 芯片将转单给
Top
Baidu
map