分类 技术志 下的文章

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

本文永久链接 – https://tonybai.com/2024/05/09/text-vectorization-using-ollama-and-go-based-on-text-embedding-models

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

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

本文是我学习开发大模型应用的一篇小记,探讨的是如何使用Ollama和Go语言实现文本数据的向量化处理,这是开发基于RAG的大模型应用的前提和基础。

要进行文本向量化,我们首先要了解一下文本向量化的方法以及发展。

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

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

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

考虑到实验环境资源有限,以及Ollama对Text Embedding模型的支持,这里我选择了Nomic AI开源发布的nomic-embed-text v1.5模型,虽然在抱抱脸上它的排名并不十分靠前。

在《使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B》一文中,我已经粗略介绍过Ollama在本地运行大模型的基本步骤,如果你对Ollama的操作还不是很了解,可以先阅读一下那篇文章。

下面我们就用ollama下载nomic-embed-text:v1.5模型:

$ollama pull nomic-embed-text:v1.5
pulling manifest
pulling manifest
pulling 970aa74c0a90... 100% ▕██████████████████████████████████████████████████████████████████▏ 274 MB
pulling c71d239df917... 100% ▕██████████████████████████████████████████████████████████████████▏  11 KB
pulling ce4a164fc046... 100% ▕██████████████████████████████████████████████████████████████████▏   17 B
pulling 31df23ea7daa... 100% ▕██████████████████████████████████████████████████████████████████▏  420 B
verifying sha256 digest
writing manifest
removing any unused layers
success

算上之前的Llama3模型,目前本地已经有了两个模型:

$ollama list
NAME                       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该模型并通过命令行与其交互:

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

一旦模型下载成功,我们就可以通过Ollama的HTTP API来访问该模型了,下面是通过curl将一段文本向量化的命令:

$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。

Ollama没有提供sdk,我们就基于langchaingo的ollama包访问ollama本地加载的nomic-embed-text:v1.5模型,实现文本的向量化。下面是示例的源码:

// textembedding.go
package main

import (
        "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]))
}

更新一下依赖:

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

我本地的Go是1.21.4版本,但langchaingo需要1.22.0版本及以上,这里考虑向前兼容性,go下载了go1.22.3。

接下来运行一下上述程序:

$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。

注:文本向量维度的常见的值有200、300、768、1536等。

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


Gopher部落知识星球在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时,我们也会加强代码质量和最佳实践的分享,包括如何编写简洁、可读、可测试的Go代码。此外,我们还会加强星友之间的交流和互动。欢迎大家踊跃提问,分享心得,讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落,享受coding的快乐! 欢迎大家踊跃加入!

img{512x368}
img{512x368}

img{512x368}
img{512x368}

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻) – https://gopherdaily.tonybai.com

我的联系方式:

  • 微博(暂不可用):https://weibo.com/bigwhite20xx
  • 微博2:https://weibo.com/u/6484441286
  • 博客:tonybai.com
  • github: https://github.com/bigwhite
  • Gopher Daily归档 – https://github.com/bigwhite/gopherdaily

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

那些可免费使用的在线大语言模型服务

本文永久链接 – https://tonybai.com/2024/05/06/those-free-to-use-online-llm-services

2022年底以ChatGPT为代表的大语言模型的出现掀起了人工智能应用的新浪潮。这些庞大的语言模型经过对海量文本数据的训练,能够理解和生成逼近人类水平的自然语言,在对话、问答、文本生成、代码编写等领域展现出了惊人的能力。

最初这种能力“垄断”在OpenAI公司的手里,世界各地的AI爱好者们为了能尽快拿到ChatGPT的使用账号,使出了浑身解数,国内朋友更是如此。

不过随着Google、MetaAnthropicxAI等公司的逐步赶上(当然国内像百度、阿里等巨头的也投入巨量研发和成本)以及开源大模型的持续涌现,时隔一年多以后,目前互联网上的大模型服务已成“百花齐放”之势。无论在推理能力还是模型数量上,都有极大的提升,而使用成本则大幅降低。我们再无需局限于OpenAI这一家公司的大模型了,通过一些免费的在线大模型服务即可享受到多样化、高质量的AI服务。

在这篇短文中,我就来简单说说我使用过的那些免费在线大模型服务,供各位读者参考。

对于国内的朋友来说,本文介绍的大多数国外在线大模型服务的使用前提是你拥有一个价位合理、连接稳定的加速器服务。

1. 大语言模型聚合平台

我们先来看看一类典型的大语言模型服务平台,它们被称作大语言模型聚合平台,在这类平台上,我们可以使用超过一种的专有模型或开源LLM模型服务。

1.1 poe.com

poe.com是我日常使用的大语言模型服务的第一选择。它由美版知乎Quora平台开发运营。平台上的人工智能服务由多个不同公司训练的模型提供支持,并针对不同的任务进行了优化。Poe目前支持的机器人包括:OpenAI的ChatGPT、GPT-4和DALL-E 3,Anthropic的Claude Instant、Claude 2和Claude 3,Stability AI的StableDiffusionXL,Google的PaLM 和Gemini-Pro,Meta的Llama 3,Playground的Playground-v2,Mistral的Mistral-Medium,以及大量由社区用户自己创建的机器人。

poe.com提供的默认机器人Assistant由gpt-3.5-turbo和Claude 3 Haiku提供技术支持,这个是完全免费的。其他机器人如GPT4、Claude3 Opus、Mistral-Large、Gemini 1.5 Pro等顶级AI机器人则是使用受限的,需要付费订阅用户才能使用。而中间级别的机器人,如Claude-3-Sonnet、Mistral-Medium等则是有条数限制。开源模型的机器人,比如Llama3 70B则是免费使用的,至少我没碰到限制。

总之,poe.com上聚合的AI大模型通常足矣满足日常工作所需。

1.2 you.com

如果你就使用了poe.com的中级机器人,还达到的其条数限制的上限,我们还可以使用you.com作为备用的聚合大模型平台,当然如果你喜欢you.com的风格与交互方式,你完全可以将其作为你的第一选择。就像上面截图中那样,you.com支持大多数的主流的AI大模型,虽然品种不如poe.com多。

1.3 主流开源大模型的聚合平台

下面说一下以仅聚合开源大模型的一些平台,如果你只想体验、对比和使用开源大模型的话,也可以试试这些平台,目前这些平台没有设置使用条数等限制。

1.3.1 perplexity labs

1.3.2 huggingface chat

抱抱脸(huggingface)是AI界的github,他也提供了一些开源大模型的在线聚合服务:

1.3.3 together.ai

together.ai提供的开源ai大模型非常全面,并且如上图所示,用户可以自己调整大模型参数,比如Temperature、Top-P、Top-K等,非常适合一些开源大模型的深度研究者:

1.3.4 groq cloud

我们看到:groq cloud也提供一定的大模型参数调整能力(比如Temperature),但groq提供的开源大模型种类较少,可做备用之选。

2. 独立的大语言模型服务

各大AI大模型的先驱者和驱动主力,比如OpenAI、Google、Meta、Anthropic等也都提供了独立的官方大语言模型服务,我们逐一来看看:

2.1 ChatGPT

OpenAI的ChatGPT在今年提供了免费服务,即使你不注册OpenAI账号也可以在线免费使用chatgpt 3.5,只是不能保存历史:

2.2 Google gemini

Google是AI领军人物,但OpenAI的异军突起打了他一个“措手不及”,不过Google实力还在,从最先推出的bard,到目前全面升级为gemini后,与OpenAI的能力差距在日益缩小。

2.3 Claude

由多家巨头公司共同投资的Anthropic推出的Claude系列大模型能力是与日俱增,最新的Claude 3系列已经基本追上了OpenAI,Anthropic也在自己的官方站点提供了sonnet、haiku的免费服务,只有最高端的opus是需要付费的:

2.4 Meta

Meta(前身Facebook)是开源大语言模型世界的核心力量,它开源的Llama系列大模型已经成为开源界大模型的基石。Meta在其ai官网也提供了在线版的Llama的体验服务,最新版是Llama3。

2.5 mistral.ai

Mistral AI是一家销售人工智能产品的法国公司。它由 Meta Platforms 和 Google DeepMind 的前员工于 2023 年 4 月创立。他也提供了针对其自身产品mistral的在线免费体验服务:

3. 国内提供的大语言模型服务

国内的公司虽然在算力上受到了政治因素的制约,但大模型能力也是在不断进步的,并且国内大模型大多都提供了在线体验服务以及app。但由于工作原因,国内大模型用的较少,这里就仅给出一个列表和访问方式,大家可以自行体验。

4. 小结

随着时间的推移,越来越多的公司和开源项目加入了大语言模型的竞争,使得互联网上的大模型服务变得百花齐放。本文列举了一些免费的在线大语言模型服务供读者参考。

首先介绍了大语言模型聚合平台,如poe.com和you.com,它们集成了多种专有模型和开源模型,可以满足日常工作需求。然后文章还提到了一些仅聚合开源模型的平台,如perplexity labs、huggingface chat、together.ai和groq cloud,它们适合体验、对比和使用开源模型。

接下来是独立的大语言模型服务,包括一些知名公司和项目。我们提到了OpenAI的ChatGPT,提供免费的在线使用;Google gemini,与OpenAI能力逐渐接近;Anthropic的Claude,提供免费的sonnet和haiku服务;Meta的Llama,作为开源界的核心力量;以及Mistral AI的在线免费体验服务。

对于国内大模型,笔者使用较少,这里仅提供列表和链接。

如果你要是拥有一个Google gmail账号,无论是前面提到的聚合平台,还是专有大模型服务(国内大模型服务除外),基本都可以sign with google account快速注册和登录到平台并开启大模型体验之旅。


Gopher部落知识星球在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时,我们也会加强代码质量和最佳实践的分享,包括如何编写简洁、可读、可测试的Go代码。此外,我们还会加强星友之间的交流和互动。欢迎大家踊跃提问,分享心得,讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落,享受coding的快乐! 欢迎大家踊跃加入!

img{512x368}
img{512x368}

img{512x368}
img{512x368}

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻) – https://gopherdaily.tonybai.com

我的联系方式:

  • 微博(暂不可用):https://weibo.com/bigwhite20xx
  • 微博2:https://weibo.com/u/6484441286
  • 博客:tonybai.com
  • github: https://github.com/bigwhite
  • Gopher Daily归档 – https://github.com/bigwhite/gopherdaily

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言进阶课 Go语言精进之路1 Go语言精进之路2 Go语言第一课 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats