当前位置: 首页 > news >正文

银河盛世网站建设网站建设网站建设教程

银河盛世网站建设,网站建设网站建设教程,深圳龙岗招聘设计,智鼎互联网站建设一、什么是向量 向量是一种有大小和方向的数学对象。它可以表示为从一个点到另一个点的有向线段。例如#xff0c;二维空间中的向量可以表示为 (#x1d465;,#x1d466;) #xff0c;表示从原点 (0,0)到点 (#x1d465;,#x1d466;)的有向线段。 1.1、文本向量 1…一、什么是向量 向量是一种有大小和方向的数学对象。它可以表示为从一个点到另一个点的有向线段。例如二维空间中的向量可以表示为 (,) 表示从原点 (0,0)到点 (,)的有向线段。 1.1、文本向量 1、将文本转成一组 维浮点数即文本向量又叫 Embeddings。 2、向量之间可以计算距离距离远近对应语义相似度大小。 1.2、向量相似度计算 相似度计算过程中欧式距离越小越好余弦距离越大越好。 import numpy as np from numpy import dot from numpy.linalg import normfrom openai import OpenAI import os # 加载环境变量 client OpenAI(api_key模型key,base_url模型的base_url) def cos_sim(a, b):余弦距离 -- 越大越相似return dot(a, b)/(norm(a)*norm(b)) def l2(a, b):欧氏距离 -- 越小越相似x np.asarray(a)-np.asarray(b)return norm(x) def get_embeddings(texts, modeltext-embedding-3-large, dimensionsNone):封装 OpenAI 的 Embedding 模型接口if model text-embedding-ada-002:dimensions Noneif dimensions:data client.embeddings.create(inputtexts, modelmodel, dimensionsdimensions).dataelse:data client.embeddings.create(inputtexts, modelmodel).datareturn [x.embedding for x in data] test_query [测试文本] vec get_embeddings(test_query)[0]# query 国际争端 # 且能支持跨语言 query global conflictsdocuments [联合国就苏丹达尔富尔地区大规模暴力事件发出警告,土耳其、芬兰、瑞典与北约代表将继续就瑞典“入约”问题进行谈判,日本岐阜市陆上自卫队射击场内发生枪击事件 3人受伤,国家游泳中心水立方恢复游泳、嬉水乐园等水上项目运营,我国首次在空间站开展舱外辐射生物学暴露实验, ]query_vec get_embeddings([query])[0]doc_vecs get_embeddings(documents)print(Query与自己的余弦距离: {:.2f}.format(cos_sim(query_vec, query_vec))) print(Query与Documents的余弦距离:) for vec in doc_vecs:print(cos_sim(query_vec, vec))print(Query与自己的欧氏距离: {:.2f}.format(l2(query_vec, query_vec))) print(Query与Documents的欧氏距离:) for vec in doc_vecs:print(l2(query_vec, vec))1.3、 Embedding 模型 2024 年 1 月 25 日OpenAI 新发布了两个 Embedding 模型text-embedding-3-large和text-embedding-3-small。其最大特点是支持自定义的缩短向量维度从而在几乎不影响最终效果的情况下降低向量检索与相似度计算的复杂度。通俗的说越大越准、越小越快。 model text-embedding-3-large dimensions 128query 国际争端# 且能支持跨语言 # query global conflictsdocuments [联合国就苏丹达尔富尔地区大规模暴力事件发出警告,土耳其、芬兰、瑞典与北约代表将继续就瑞典“入约”问题进行谈判,日本岐阜市陆上自卫队射击场内发生枪击事件 3人受伤,国家游泳中心水立方恢复游泳、嬉水乐园等水上项目运营,我国首次在空间站开展舱外辐射生物学暴露实验, ]query_vec get_embeddings([query], modelmodel, dimensionsdimensions)[0] doc_vecs get_embeddings(documents, modelmodel, dimensionsdimensions)print(向量维度: {}.format(len(query_vec)))print()print(Query与Documents的余弦距离:) for vec in doc_vecs:print(cos_sim(query_vec, vec))print()print(Query与Documents的欧氏距离:) for vec in doc_vecs:print(l2(query_vec, vec))二、向量数据库 向量数据库是专门问向量检索设计的中间件。 # !pip install chromadb from pdfminer.high_level import extract_pages from pdfminer.layout import LTTextContainer import chromadb from chromadb.config import Settingsdef extract_text_from_pdf(filename, page_numbersNone, min_line_length5):从 PDF 文件中按指定页码提取文字paragraphs []buffer full_text # 提取全部文本for i, page_layout in enumerate(extract_pages(filename)):# 如果指定了页码范围跳过范围外的页if page_numbers is not None and i not in page_numbers:continuefor element in page_layout:if isinstance(element, LTTextContainer):full_text element.get_text() \n# 按空行分隔将文本重新组织成段落lines full_text.split(\n)for text in lines:if len(text) min_line_length:buffer ( text) if not text.endswith(-) else text.strip(-)elif buffer:paragraphs.append(buffer)buffer if buffer:paragraphs.append(buffer)return paragraphsclass MyVectorDBConnector:def __init__(self, collection_name, embedding_fn):chroma_client chromadb.Client(Settings(allow_resetTrue)) # chroma_client chromadb.HttpClient(hostlocalhost, port8000)# 为了演示实际不需要每次 reset() # chroma_client.reset()# 创建一个 collectionself.collection chroma_client.get_or_create_collection(namecollection_name)self.embedding_fn embedding_fndef add_documents(self, documents):向 collection 中添加文档与向量self.collection.add(embeddingsself.embedding_fn(documents), # 每个文档的向量documentsdocuments, # 文档的原文ids[fid{i} for i in range(len(documents))] # 每个文档的 id)def search(self, query, top_n):检索向量数据库results self.collection.query(query_embeddingsself.embedding_fn([query]),n_resultstop_n)return results# 创建一个向量数据库对象 vector_db MyVectorDBConnector(demo, get_embeddings) # 向向量数据库中添加文档 vector_db.add_documents(paragraphs)user_query Llama 2有多少参数 results vector_db.search(user_query, 2)for para in results[documents][0]:print(para\n)澄清几个概念 1、向量数据库的意义是快速的检索 2、向量数据库本身不生成向量向量是由Embedding 模型产生的 3、向量数据库与传统的关系型数据库是互补的不是替代关系在实际应用中根据实际需求经常同时使用。 2.1、主流向量数据库 - FAISS: Meta 开源的向量检索引擎 https://github.com/facebookresearch/faiss - Pinecone: 商用向量数据库只有云服务 https://www.pinecone.io/ - Milvus: 开源向量数据库同时有云服务 https://milvus.io/ - Weaviate: 开源向量数据库同时有云服务 https://weaviate.io/ - Qdrant: 开源向量数据库同时有云服务 https://qdrant.tech/ - PGVector: Postgres 的开源向量检索引擎 https://github.com/pgvector/pgvector - RediSearch: Redis 的开源向量检索引擎 https://github.com/RediSearch/RediSearch - ElasticSearch 也支持向量检索 https://www.elastic.co/enterprise-search/vector-search2.2、基于向量检索的RAG class RAG_Bot:def __init__(self, vector_db, llm_api, n_results2):self.vector_db vector_dbself.llm_api llm_apiself.n_results n_resultsdef chat(self, user_query):# 1. 检索search_results self.vector_db.search(user_query, self.n_results)# 2. 构建 Promptprompt build_prompt(prompt_template, contextsearch_results[documents][0], queryuser_query)# 3. 调用 LLMresponse self.llm_api(prompt)return response# 创建一个RAG机器人 bot RAG_Bot(vector_db,llm_apiget_completion )user_query llama 2有多少参数?response bot.chat(user_query)print(response)2.3、国产大模型 import json import requests import os# 通过鉴权接口获取 access tokendef get_access_token():使用 AKSK 生成鉴权签名Access Token:return: access_token或是None(如果错误)url https://aip.baidubce.com/oauth/2.0/tokenparams {grant_type: client_credentials,client_id: os.getenv(ERNIE_CLIENT_ID),client_secret: os.getenv(ERNIE_CLIENT_SECRET)}return str(requests.post(url, paramsparams).json().get(access_token))# 调用文心千帆 调用 BGE Embedding 接口def get_embeddings_bge(prompts):url https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/embeddings/bge_large_en?access_token get_access_token()payload json.dumps({input: prompts})headers {Content-Type: application/json}response requests.request(POST, url, headersheaders, datapayload).json()data response[data]return [x[embedding] for x in data]# 调用文心4.0对话接口 def get_completion_ernie(prompt):url https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token get_access_token()payload json.dumps({messages: [{role: user,content: prompt}]})headers {Content-Type: application/json}response requests.request(POST, url, headersheaders, datapayload).json()return response[result]# 创建一个向量数据库对象 new_vector_db MyVectorDBConnector(demo_ernie,embedding_fnget_embeddings_bge ) # 向向量数据库中添加文档 new_vector_db.add_documents(paragraphs)# 创建一个RAG机器人 new_bot RAG_Bot(new_vector_db,llm_apiget_completion_ernie )user_query how many parameters does llama 2 have? response new_bot.chat(user_query) print(response)
http://www.w-s-a.com/news/274275/

相关文章:

  • 状元村建设官方网站长春做网站seo的
  • 做金融资讯网站需要哪些牌照海珠营销型网站制作
  • 学做网站需要买什么书手机网络
  • 寻找做电影网站团队合作西宁网站建设君博首选
  • 兴仁县城乡建设局网站爱站关键词查询
  • 漳州网站建设公司推荐wordpress更改主机
  • c2c商城网站建设方案英文网站注册
  • 电子商务网站的运营一般需要做哪些准备宣传片拍摄思路
  • 网站建设网页制作百度怎么做自己网站
  • 建设设计网站公司巴州建设局网站
  • 淘宝建设网站的好处韶关市网站建设招标
  • 佛山高端网站免费招聘网站建设
  • 申请网站就是做网站吗wordpress tag 优化
  • 建站系统排行榜菏泽机关建设网站
  • 网站群建设费用科技通信网站模板下载
  • 网站开发的流程是怎样的自己做自媒体在哪个网站比较好
  • 网站的html代码在哪网页线上开发制作
  • 免费商用自媒体图片网站做网站好的公司有哪些
  • 阿雷网站建设公司中国建筑考试网官网首页
  • 厦门网站制作网页无法跳转到建设银行网站
  • 怎么建设自己网站简述网页布局的几种方法
  • 软文营销文案100篇如何优化搜索引擎的搜索功能
  • 做网站创意杭州家具网站建设方案
  • 福州seo网站推广优化乐清建网站
  • 莆田cms建站模板简述网站设计流程
  • 班级网站建设组织机构建设注册中心网站首页
  • 即墨网站建设地址怎么在文档中做网站一点就开
  • 做网站联系方式互联网行业分析
  • 杭州网站建设索q479185700高淳网站建设
  • 有什么做任务拿钱的网站精准的搜索引擎优化