Cohere


关于 cohere


文章/教程


公司介绍

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)
  • 生成文本(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、安装库

pip install cohere

2、获取 秘钥

https://dashboard.cohere.ai/


基于 Cohere AI 实现语义搜索


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)

api_key = ''

co = cohere.Client(api_key)

获取问题分类数据集
这里将使用trec数据集来演示,trec数据集由问题及其类别组成。

# 获取数据集
dataset = load_dataset("trec", split="train")

# 将其导入到pandas的dataframe中,只取前1000行
df = pd.DataFrame(dataset)[:1000]

# 预览数据以确保已正确加载
df.head(10)

文档嵌入

可以使用Cohere对问题文本进行嵌入。
使用Cohere库的embed函数对问题进行嵌入。生成一千个这样长度的嵌入大约需要15秒钟。

# 获取嵌入
embeds = co.embed(texts=list(df['text']),
                  model="large",
                  truncate="RIGHT").embeddings
                  
# 检查嵌入的维度
embeds = np.array(embeds)
embeds.shape

使用索引和最近邻搜索进行搜索
使用annoy库的AnnoyIndex函数,一种优化快速搜索的方式存储嵌入。
在给定集合中找到距离给定点最近(或最相似)的点的优化问题被称为最近邻搜索。
这种方法适用于大量的文本(其他选项包括Faiss、ScaNN和PyNNDescent)。

构建索引后,我们可以使用它来检索现有问题的最近邻,或者嵌入新问题并找到它们的最近邻。

# 创建搜索索引,传入嵌入的大小
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')

查找数据集中示例的邻居
如果我们只对数据集中的问题之间的距离感兴趣(没有外部查询),一种简单的方法是计算我们拥有的每对嵌入之间的相似性。

# 选择一个示例(我们将检索与之相似的其他示例)
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

查找用户查询的邻居

我们可以使用诸如嵌入之类的技术来找到用户查询的最近邻居。
通过嵌入查询,我们可以衡量它与数据集中项目的相似性,并确定最近的邻居。

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(周一)

### Cohere Embedding 技术概述 Embedding 是一种将文本转换成数值向量的技术,这些向量可以捕捉到词语之间的语义关系。Cohere 提供了一种强大的 API 来生成高质量的 embedding 向量[^1]。 通过 Cohere 的 API 可以轻松获取任何给定文本的高维嵌入表示。这种嵌入能够用于多种自然语言处理任务,比如相似度计算、分类以及聚类分析等应用领域[^2]。 ### 使用 Cohere 获取 Text Embeddings 为了使用 Cohere 的 Embedding 功能,首先需要安装 `cohere` Python 库并设置 API 密钥: ```bash pip install cohere ``` 接着可以通过如下方式调用 API 接口来获得指定文本对应的 embeddings: ```python import cohere client = cohere.Client('YOUR_API_KEY') response = client.embed( texts=["这是一个测试句子"], model='large', # 或者 'small' ) embeddings = response.embeddings print(embeddings) ``` 上述代码片段展示了如何利用 Cohere 客户端对象发起请求,并接收返回的结果作为响应对象。其中包含了所请求文本列表中每一项对应的一个浮点数数组形式的 embedding 表达[^3]。 ### 参数说明 - **texts**: 需要被转化为embedding的一组字符串组成的列表。 - **model**: 指定使用的模型大小,默认有 "small" 和 "large" 两种选项可供选择。通常来说较大的模型会提供更精确但是也更加耗时的结果[^4]。 ### 输出解释 当成功执行以上命令之后将会得到一个包含多个维度(通常是768维)float类型的numpy array结构的数据集。每一个这样的array都代表输入序列中的某一句话在整个多维空间里的位置描述——即其特征向量[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程乐园

请我喝杯伯爵奶茶~!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值