大模型实战 P9 根据OpenAI句向量召回相似文本
上节课当中,给大家介绍了文本向量化的方法,在这个问答的项目当中,向量化之后,还需要做一个相似文本的召回。这节课我们先用一种直观的方法,来实现这个召回的过程。
1、查询语句向量化
# openai_06_retrieval.py from openai import OpenAI from dotenv import load_dotenv import numpy as np load_dotenv() client = OpenAI() query = '感冒吃什么药效果好?可以吃阿莫西林吗?' # 查询语句向量化 query_resp = client.embeddings.create( model="text-embedding-ada-002", input=query ) query_vec = np.array(query_resp.data[0].embedding)
2、备选文本向量化
# 备选文本向量化 question_texts = [ '什么叫感冒? / 感冒是一种什么病?', '感冒一般是由什么引起的?/ 什么会导致感冒?', '感冒会有哪些症状?/ 感冒有哪些临床表现?', '感冒吃什么药好得快?/ 感冒怎么治?', '得了感冒去医院挂什么科室的号?', '感冒要怎么预防?', '感冒换着有什么禁忌?/ 感冒不能吃什么?', '感冒要做哪些检查?', '感冒能治好吗?/ 感冒治好的几率有多大?', '感冒的并发症有哪些?', '阿莫西林能治那些病?' ] question_resp = client.embeddings.create( model="text-embedding-ada-002", input=question_texts ) question_vecs = [] for item in question_resp.data: question_vecs.append(np.array(item.embedding))
3、计算欧式距离
距离越小,相似度越高,取前三条最相似的文本。
# 计算欧式距离,距离越小,相似度越高 import numpy as np l2_distances = np.linalg.norm(query_vec - question_vecs, axis=1) closest_indices = np.argsort(l2_distances)[:3] # print(closest_indices) for idx in closest_indices: print(question_texts[idx])
好的,到目前为止,关于 OpenAI 大模型调用的方法,就基本给大家讲完了,下节课,就正式进入 LangChain 框架部分的学习,其他大模型的内容,会在项目成型之后,再做补充。
本文链接:http://ichenhua.cn/edu/note/688
版权声明:本文为「陈华编程」原创课程讲义,请给与知识创作者起码的尊重,未经许可不得传播或转售!