文章目录
-
- [关于 cohere](#关于 cohere)
- [API 使用](#API 使用)
-
- [基于 Cohere AI 实现语义搜索](#基于 Cohere AI 实现语义搜索)
关于 cohere
- PYPI : https://pypi.org/project/cohere
- 官网 : https://cohere.com
- github : https://github.com/cohere-ai/cohere-python
- 文档:https://docs.cohere.com
文章/教程
-
硅谷科技评论:Cohere,为企业提供大模型
https://mp.weixin.qq.com/s/H-FNecz6rhfVkWg_ayoKKg -
如何使用 Cohere AI 文本嵌入技术实现语义搜索
https://mp.weixin.qq.com/s/wWeYopgO3t6vyjHlA85sBQ -
每个人都能做NLP开发:cohere及开源平替测试
https://www.bilibili.com/video/BV1ov4y1U7Au/
公司介绍
Aidan Gomez(首席执行官)、Nick Frosst 和 Ivan Zhu 于 2019 年创立了 Cohere。
其中 Aidan Gomez 于 2017 年 6 月与人合著论文《Attention Is All You Need》,这个的分量大家都知道,在此不赘述。
2023 年初,YouTube 前首席财务官 Martin Kon(总裁兼首席运营官)加入团队。
目标:构建大模型基础设施
Gomes : "刚开始时,我们并不真正知道我们想要构建什么产品...我们只是专注于构建基础设施,以使用我们可以获得的任何计算在超级计算机上训练大型语言模型。很快在我们启动 Cohere 后,GPT-3 出现了,这是一个巨大的突破时刻,非常有效,并给了我们[一个指示],表明我们正在走上正确的道路。"
产品
Cohere 为各种阅读和写作任务训练大型语言模型 (LLMs),例如摘要、内容创建和情感分析。
其语言模型针对三个主要用例进行了优化:
- 检索文本(retrieving text)
- Embed(嵌入)
- Semantic Search(语义搜索)
- Rerank(重新排名)
- 生成文本(generating text)
- Summarize(总结)
- Generate(生成)
- Command Model:遵循业务应用程序的用户命令
- 分类文本(classifying text)
根据您的隐私/安全要求,有多种方式可以访问Cohere:
- Cohere的API:这是最简单的选择,只需从仪表板中获取一个API键,并开始使用Cohere托管的模型。
- 云人工智能平台:此选项提供了易用性和安全性的平衡。您可以在各种云人工智能平台上访问Cohere,如Oracle的GenAI服务、AWS的Bedrock和Sagemaker平台、谷歌云和Azure的AML服务。
- 私有云部署:Cohere的模型可以在大多数虚拟私有云(VPC)环境中进行私有部署,提供增强的安全性和最高程度的定制。有关信息,请联系销售人员。
商业模式
Cohere 承担着构建每个模型的大量前期成本和持续的推理成本。
它通过基于使用量的定价来收回成本,并提供三种不同的定价等级:
- 免费:访问所有 Cohere API 端点,并限速使用,用于学习和原型设计。
- 产品:增加对所有 Coheres API 端点的访问速率限制、增强客户支持以及根据提供的数据训练自定义模型的能力。
Cohere 根据其所有 API 端点的Token数量(Token基本上是数字、字母或符号)进行收费,端点的价格各不相同,从每个Token 0.0000004 美元(嵌入)到 0.001 美元(重新排序)不等。 - 企业:专用模型实例、最高级别的支持和自定义部署选项。企业级的定价未公开。
API 使用
准备
1、安装库
shell
pip install cohere
2、获取 秘钥
基于 Cohere AI 实现语义搜索
python
import cohere
import numpy as np
import re
import pandas as pd
from tqdm import tqdm
from datasets import load_dataset
import umap
import altair as alt
from sklearn.metrics.pairwise import cosine_similarity
from annoy import AnnoyIndex
import warnings
warnings.filterwarnings('ignore')
pd.set_option('display.max_colwidth', None)
python
api_key = ''
co = cohere.Client(api_key)
获取问题分类数据集
这里将使用trec数据集来演示,trec数据集由问题及其类别组成。
python
# 获取数据集
dataset = load_dataset("trec", split="train")
# 将其导入到pandas的dataframe中,只取前1000行
df = pd.DataFrame(dataset)[:1000]
# 预览数据以确保已正确加载
df.head(10)
文档嵌入
可以使用Cohere对问题文本进行嵌入。
使用Cohere库的embed函数对问题进行嵌入。生成一千个这样长度的嵌入大约需要15秒钟。
python
# 获取嵌入
embeds = co.embed(texts=list(df['text']),
model="large",
truncate="RIGHT").embeddings
# 检查嵌入的维度
embeds = np.array(embeds)
embeds.shape
使用索引和最近邻搜索进行搜索
使用annoy库的AnnoyIndex函数,一种优化快速搜索的方式存储嵌入。
在给定集合中找到距离给定点最近(或最相似)的点的优化问题被称为最近邻搜索。
这种方法适用于大量的文本(其他选项包括Faiss、ScaNN和PyNNDescent)。
构建索引后,我们可以使用它来检索现有问题的最近邻,或者嵌入新问题并找到它们的最近邻。
python
# 创建搜索索引,传入嵌入的大小
search_index = AnnoyIndex(embeds.shape[1], 'angular')
# 将所有向量添加到搜索索引中
for i in range(len(embeds)):
search_index.add_item(i, embeds[i])
search_index.build(10) # 10 trees
search_index.save('test.ann')
查找数据集中示例的邻居
如果我们只对数据集中的问题之间的距离感兴趣(没有外部查询),一种简单的方法是计算我们拥有的每对嵌入之间的相似性。
python
# 选择一个示例(我们将检索与之相似的其他示例)
example_id = 7
# 检索最近的邻居
similar_item_ids = search_index.get_nns_by_item(example_id,10,
include_distances=True)
# 格式化并打印文本和距离
results = pd.DataFrame(data={'texts': df.iloc[similar_item_ids[0]]['text'],
'distance': similar_item_ids[1]}).drop(example_id)
print(f"问题:'{df.iloc[example_id]['text']}'\n最近的邻居:")
results
查找用户查询的邻居
我们可以使用诸如嵌入之类的技术来找到用户查询的最近邻居。
通过嵌入查询,我们可以衡量它与数据集中项目的相似性,并确定最近的邻居。
python
query = "世界上最高的山是什么?"
# 获取查询的嵌入
query_embed = co.embed(texts=[query],
model="large",
truncate="RIGHT").embeddings
# 检索最近的邻居
similar_item_ids = search_index.get_nns_by_vector(query_embed[0],10,
include_distances=True)
# 格式化结果
results = pd.DataFrame(data={'texts': df.iloc[similar_item_ids[0]]['text'],
'distance': similar_item_ids[1]})
print(f"问题:'{query}'\n最近的邻居:")
results
伊织 2024-03-04(周一)