一、词向量(Word Vectors)是什么?
词向量是自然语言(NLP)中一种表示方法,他讲词汇映射到一个连续的向量空间中。每个向量通常有固定的长度,并且每个维度的值代表了词汇的某种语义属性。词向量是的计算机能够捕捉和理解词汇之间的关系,如相似性、类比等。
词向量有一下特点:
- 语义信息:词向量能够捕捉词汇的语义信息。例如:与“狗”相关的词向量和和“猫”的词向量在向量空间中会相对接近,因为他们具有相似的语义。
- 向量运算:词向量支持向量运算,如向量相加和相减。这样可以用来进行词义的推理,如“国王” - “男人” +“女人” 可能接近于“女王”
- 维度:词向量的维度可以根据模型和训练数据集的不同而变化。一般来说,较高的维度能够捕捉更多的信息,但同时也会增加计算复杂度。
- 上下文无关和上下文相关:有一些词向量模型生成的是不考虑上下的静态词向量(比如:word2vec),而另外一些模型则生成与上下文相关的动态词向量(比如:BERT)。
- 预训练和微调:许多词向量是通过在大规模的语料库上预训练得到的,然后可以在特定的任务上面进行微调。
- 应用:词向量在NLP的许多应用中都非常有用,比如:文本分类,情感分析,机器翻译,文档系统等。
二、向量数据库
2.1 什么是向量数据库
向量数据库是用于高效计算和管理大量向量数据的解决方案。向量数据库是一种专门用于存储和检索向量数据(embedding)的数据库系统。它与传统的基于关系模型的数据库不同,它主要关注的是向量数据的特性和相似性。
在向量数据库中,数据被表示为向量形式,每个向量代表一个数据项。这些向量可以是数字、文本、图像或其他类型的数据。向量数据库使用高效的索引和查询算法来加速向量数据的存储和检索过程。
2.2 常见的向量库
数据库名称 | 概述 | 优点 | 缺点 |
---|---|---|---|
Milvus | 一个开源的向量数据库,用于嵌入向量的存储、检索和分析。 | - 开源,社区支持活跃 - 支持多种距离度量和索引结构 | - 需要一定的技术背景来使用 |
Pinecone | 一个云原生的向量数据库,支持快速的向量搜索和检索。 | - 易于上手,完全云原生 - 无需了解向量化或索引知识9 | - 完全专有,依赖外部托管服务 |
Weaviate | 开源的向量搜索引擎,支持向量搜索和多种数据类型的搜索。 | - 支持多种数据类型的搜索 - 提供商业云支持 | - 可能需要更多的资源来部署和维 |
Vespa | 一个大数据平台,具有向量数据库的功能。 | - 适用于大规模数据处理 - 高可扩展性 | - 架构复杂,可能需要专业知识来实施 |
Qdrant | 开源的向量数据库,使用Rust编写,支持高效的向量检索。 | - 高检索效率和RPS(Requests Per Second) - 开源 | - 相对较新,可能缺乏长期社区支持 |
Chroma | 轻量级的向量数据库,专为NLP和机器学习设计。 | - 专为NLP和机器学习优化 - 支持多种搜索算法 | - 可能不如其他数据库功能全面 |
三、常见的开放 embedding API
Open AI embedding :嵌入|API参考 - OpenAI v4.0 中文开发文档手册
文心千帆 embedding:Embedding-V1 - 千帆大模型平台 | 百度智能云文档
智普embedding:智谱AI开放平台
3.1 智谱embedding调用示例
#智谱有封装好的SDK,我们调用即可。
from zhipuai import ZhipuAI
def zhipu_embedding(text: str):
api_key = os.environ['ZHIPUAI_API_KEY']
client = ZhipuAI(api_key=api_key)
response = client.embeddings.create(
model="embedding-2",
input=text,
)
return response
text = '要生成 embedding 的输入文本,字符串形式。'
response = zhipu_embedding(text=text)
Copy to clipboardErrorCopied
response为zhipuai.types.embeddings.EmbeddingsResponded类型,我们可以调用object、data、model、usage来查看response的embedding类型、embedding、embedding model及使用情况。
print(f'response类型为:{type(response)}')
print(f'embedding类型为:{response.object}')
print(f'生成embedding的model为:{response.model}')
print(f'生成的embedding长度为:{len(response.data[0].embedding)}')
print(f'embedding(前10)为: {response.data[0].embedding[:10]}')
Copy to clipboardErrorCopied
response类型为:<class 'zhipuai.types.embeddings.EmbeddingsResponded'>
embedding类型为:list
生成embedding的model为:embedding-2
生成的embedding长度为:1024
embedding(前10)为: [0.017892399802803993, 0.0644201710820198, -0.009342825971543789, 0.02707476168870926, 0.004067837726324797, -0.05597858875989914, -0.04223804175853729, -0.03003198653459549, -0.016357755288481712, 0.06777040660381317]