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、安装库

shell 复制代码
pip install cohere

2、获取 秘钥

https://dashboard.cohere.ai/


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