AI 大模型之美
徐文浩
bothub 创始人
32335 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
AI 大模型之美
15
15
1.0x
00:00/00:00
登录|注册

09|语义检索,利用Embedding优化你的搜索功能

使用Embedding进行语义搜索的效果
“小米手机”可能的搜索结果
处理更大数据量
高维向量相似性搜索
Facebook AI Similarity Search
大数据量下的性能瓶颈
语义相似度推荐
新商品或平台缺乏行为数据
语义相似度搜索
计算余弦距离
文本语义向量化
同义词问题
倒排索引
分词
清洗数据
加载到DataFrame
生成特定品类商品标题
设计提示语
文案撰写、文本摘要、机器翻译等
聊天机器人
应用于分类、聚类等机器学习场景
适合作为中间结果
搜索歧义问题
Faiss加速搜索过程
Embedding优化搜索和推荐
AI生成数据
向量数据库
使用Faiss库
搜索效率问题
利用Embedding向量距离
冷启动问题
推荐算法依托用户行为
利用Embedding接口
传统搜索的局限性
搜索原理
数据处理
利用AI生成实验数据
Completion接口
Embedding向量
课后练习
小结
搜索过程的加速
商品推荐的冷启动
语义搜索
数据生成
Embedding和Completion接口
语义检索与Embedding优化搜索功能

该思维导图由 AI 生成,仅供参考

你好,我是徐文浩。
在过去的 8 讲里面,相信你已经对 Embedding 和 Completion 接口非常熟悉了。Embedding 向量适合作为一个中间结果,用于传统的机器学习场景,比如分类、聚类。而 Completion 接口,一方面可以直接拿来作为一个聊天机器人,另一方面,你只要善用提示词,就能完成合理的文案撰写、文本摘要、机器翻译等一系列的工作。
不过,很多同学可能会说,这个和我的日常工作又没有什么关系。的确,日常我们的需求里面,最常使用自然语言处理(NLP)技术的,是搜索、广告、推荐这样的业务。那么,今天我们就来看看,怎么利用 OpenAI 提供的接口来为这些需求提供些帮助。

让 AI 生成实验数据

在实际演示代码之前,我们需要一些可以拿来实验的数据。之前,我们都是在网上找一些数据集,或者直接使用一些机器学习软件包里面自带的数据集。但是,并不是所有时候我们都能很快找到合适的数据集。这个时候,我们也可以利用 AI,我们直接让 AI 帮我们生成一些数据不就好了吗?
import openai, os
openai.api_key = os.environ.get("OPENAI_API_KEY")
COMPLETION_MODEL = "text-davinci-003"
def generate_data_by_prompt(prompt):
response = openai.Completion.create(
engine=COMPLETION_MODEL,
prompt=prompt,
temperature=0.5,
max_tokens=2048,
top_p=1,
)
return response.choices[0].text
prompt = """请你生成50条淘宝网里的商品的标题,每条在30个字左右,品类是3C数码产品,标题里往往也会有一些促销类的信息,每行一条。"""
data = generate_data_by_prompt(prompt)
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何利用OpenAI的Embedding和Completion接口来优化搜索功能和商品推荐的冷启动。作者首先指出了传统搜索引擎存在的不足,并介绍了利用OpenAI的Embedding接口将搜索词转换成向量,并通过计算余弦距离实现语义搜索的方法。接着,演示了如何利用生成的商品标题数据进行搜索实验,并展示了搜索结果的有效性。此外,文章还介绍了如何利用Embedding信息进行商品推荐的冷启动,通过计算商品名称的语义相似度来进行推荐。通过实际代码演示,读者可以了解到如何利用AI技术来优化搜索功能和商品推荐,提高搜索结果的质量和效率。文章还介绍了如何利用Faiss这个Python包来加速搜索过程,以及如何利用向量数据库进行快速搜索相似性。最后,作者总结了三个主要教学点,包括如何利用AI生成数据、利用Embedding进行语义搜索优化以及如何通过Faiss等工具快速进行向量检索。整体来说,本文通过实例展示了如何利用OpenAI的接口来生成实验数据,为搜索功能和商品推荐提供帮助,为读者提供了一种新的思路和方法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《AI 大模型之美》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(28)

  • 最新
  • 精选
  • 廉烨
    老师,请问是否有开源的embedding组件,能够达到或接近openai embedding能力的?能够用于中文问答搜索

    作者回复: 我们之前用过开源的t5-base,embedding也还不错 你可以选择 flan-t5 系列,或者后面介绍开源平替的 sentence_transformers 只是embedding的话,可以选的还是不少的

    2023-04-11归属地:上海
    10
  • 金
    这门课程主要讲nlp吗?

    作者回复: 主要是如何运用现在的AI工具做应用开发。自然语言是其中的一部分,核心也不是自然语言处理知识,而是怎么利用好大语言模型直接开发应用。

    2023-04-03归属地:广东
    5
  • eagle
    过几天openAI的模型版本升级了,这些保存的embedding会失效吗?

    作者回复: 类似 text-ada-embedding 之类的小模型不会改变 升级往往是提供一个新模型 特定模型也有带日期的快照版本,选取那些快照版本就好了。

    2023-04-05归属地:江苏
    4
  • Jelly
    当使用Llama Index导入一篇产品介绍的时候,问:本产品的特征是什么,向量匹配不准确。使用XXX的特征就没问题。当导入年报的时候问:2022年营收是多少?向量匹配也不准确,直接问:营收是多少就可以。请问怎么让用户问的问题更智能?

    作者回复: 有几种做法 1. 不只是用embedding来做文本召回,llama还提供了更多的数据结构,可以深入看一遍文档,试一下其他的indices 2. 对于文本,通过 self-ask,先让OpenAI生成很多针对内容的问题。然后和问题做匹配。

    2023-04-23归属地:广东
    2
  • Yezhiwei
    请问老师可以把关系型数据库的结构化数据embedding 到向量数据库吗?比如财务报表的数据,然后通过自然语言的方式查询数据,谢谢

    作者回复: 可以,但是我会建议反过来操作。把数据库的表信息和需求提供给大语言模型的上下文,然后让大语言模型自动生成查询的SQL,也许效果更好一些。

    2023-04-12归属地:北京
    2
    2
  • Joe Black
    embedding的实现是否也需要基础模型的知识沉淀呢?比如文字上虽然不相同,但是含义相近的句子生成的向量是相似的,这个是依靠模型之前学习的知识是吗?那这样自然就是越大的模型embedding的效果越好?可以这样理解吗?

    作者回复: embedding就是基础模型啊,只是不是拿来生成文本,只是用了最后一层Transformer里的输出向量。 所以的确是越大的模型,embedding按道理应该越好。

    2023-05-11归属地:北京
    1
  • 渔樵耕读
    请问有遇到安装faiss时提示:PackagesNotFoundError的没?改为pip install faiss 报错: ERROR: Could not find a version that satisfies the requirement faiss (from versions: none) ERROR: No matching distribution found for faiss

    作者回复: pip install faiss-cpu 或者 pip install faiss-gpu

    2023-04-11归属地:北京
    2
    1
  • xbc
    cosine_similarity 也可以传入多个embeddings. scores = cosine_similarity(list[list[float]], list[float]) indices = np.argsort(scores)[::-1]

    作者回复: 👍

    2023-04-04归属地:海南
    1
  • Oli张帆
    考虑到我的服务器硬件资源有限(300MB的软限制,500MB的硬限制,现在已经占到了450MB),而且我已经在进行其他任务时使用了很多资源,当我在OpenAI之上构建AI机器人时,我考虑使用这个策略。请老师看看是否能行得通。 每当用户发送请求时,我首先检测他的意图。我可以使用小的embeddings来帮助意图检测。甚至可以有其他方式,如缓存和预先一些意图让用户来点击,来加速意图检测。 在我检测到用户意图后,我可以调用不同的embeddings库。例如,我的客服embeddings库将仅有50个项目,这对于余弦相似性来说非常快速和高效。我还可以将新闻embeddings库限制为最新的100篇文章,以便它可以轻松地通过余弦相似性处理。 尽管这种方法可能不像搜索单个大型嵌入数据库那样准确,但如果我为用户提供足够的指导,您认为它能产生足够好的用户体验吗?例如,在我的界面中,我可以向用户显示他们当前正在讨论“最新的AI发展”或“客户服务”。然后,也可以允许用户快速地改变当前的话题。 请老师看看,这个办法能不能跑通。还没有什么我没有想到的地方?

    作者回复: 这个办法当然不是不可以。但是为什么要限制自己用那么小的内存呢?毕竟现在服务器的成本并不高啊。 不用faiss,直接搞个云托管的向量数据库好了?大部分都有免费档位都比你自己的100条资源要多啊?

    2023-04-03归属地:北京
    3
    1
  • 黄智荣
    这个挺有意思的。不过这种性能应该会降低很多,就算有这种通过faiss计算。原来通过倒排索引,用很低的资源就可以实现,用这faiss 数据量一大,估计都要用显卡才可以,量大对显存要求也很高

    作者回复: faiss其实还是很快的,百万量级的faiss similarity通过CPU计算也只需要10ms以内

    2023-05-07归属地:福建
收起评论
显示
设置
留言
28
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部