【RAG入门教程02】Langchian的Embedding介绍与使用

2024-06-10 02:44

本文主要是介绍【RAG入门教程02】Langchian的Embedding介绍与使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Embedding介绍

词向量是 NLP 中的一种表示形式,其中词汇表中的单词或短语被映射到实数向量。它们用于捕获高维空间中单词之间的语义和句法相似性。

在词嵌入的背景下,我们可以将单词表示为高维空间中的向量,其中每个维度对应一个特定的特征,例如“生物”、“猫科动物”、“人类”、“性别”等。每个单词在每个维度上都分配有一个数值,通常在 -1 到 1 之间,表示该词与该特征的关联程度。


例如,“猫”这个词在“猫科动物”维度上可能具有较高的正值,而在“人类”维度上具有接近于零的值,这反映了它与猫科动物的紧密关联性,而与人类的关联性较低。


这种数值表示使我们能够捕捉单词之间的语义关系并对其执行数学运算,例如计算单词之间的相似度或将其用作 NLP 任务中 ML 模型的输入。

LangChain 可容纳来自不同来源的多种嵌入。

OpenAI

import os
os.environ["OPENAI_API_KEY"] = "your-key"from langchain_openai import OpenAIEmbeddingsembeddings = OpenAIEmbeddings()text = "Text"text_embedding = embeddings.embed_query(text)print(text_embedding)"""
[-0.0006077770551231004,-0.02036312831034526,0.0015661947077772864,-0.0008398058726938265,0.00801365303172794,0.01648443640533639,-0.015071485112588635,-0.006794635682304868,-0.009232670381151012,-0.004512441507728793,0.00296615975583046,0.02781575545470095,-0.004290802116650396,0.009204965399058554,-0.007286398183123463,0.01896402857732122,0.03457576177203527,0.01469746878566298,0.03812199202928964,-0.033024282774857694,-0.014143370075136358,-0.0016640276929606461,-0.00023289462736494386,-0.009856030615586264,-0.018867061139997622,
...-0.0007159994667987885,-0.024920590413974295,0.009017956769934473,0.005336663327995613,...]
"""print(len(text_embedding))"""
1536
"""

HuggingFace

from langchain_community.embeddings import HuggingFaceEmbeddings
embedding_path = r'H:\pretrained_models\bert\english\paraphrase-multilingual-mpnet-base-v2'embeddings = HuggingFaceEmbeddings(model_name=embedding_path)text = "This is a test document."text_embedding = embeddings.embed_query(text)print(len(text_embedding)) # 768

Google

from langchain_google_genai import GoogleGenerativeAIEmbeddings
os.environ["GOOGLE_API_KEY"] = "your-key"embeddings = GoogleGenerativeAIEmbeddings(model="models/embedding-001")
text_embedding = embeddings.embed_query("hello, world!")print(text_embedding) # 768

更多Embedding可以查看https://python.langchain.com/v0.2/docs/integrations/text_embedding/

计算相似性

我们可以使用嵌入来计算文本的相似度。

word_list = ["Cat", "Dog", "Car""Truck","Computer","Laptop","Apple","Orange", "Music","Dance"]embedding_model = OpenAIEmbeddings()embeds = [embedding_model.embed_query(word) for word in word_list]embeds
"""
[[-0.008174207879591734,-0.007511803310590743,-0.00995655437174355,-0.024788951157780095,-0.012790553094547429,0.006654775143594856,-0.0015151649503578363,-0.03783217392596492,-0.014422662356334227,-0.026250339680779597,0.017154227704543168,0.046327340706031526,0.0035646922858117093,0.004240754467349556,-0.032287098019987186,-0.004592443287070655,0.03955306057962428,0.005261676778755394,0.00789422251521935,-0.015501631209043845,-0.023723641081760536,0.0053197228543978925,0.014873371253461594,-0.012141805905252653,-0.006781109980413554,
...0.00566348496318421,0.01855802589283819,0.00531267762533671,0.02393075147421956,...]]
"""

我们引入另一个单词并计算相似度。

input_word = "Lion"input_embed = embedding_model.embed_query(input_word)
import numpy as npdef cosine_similarity(a, b):return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))similarity = cosine_similarity(embeds[0], input_embed)print(similarity) #0.8400893968591456
from sklearn.metrics.pairwise import cosine_similaritysimilarity = cosine_similarity(np.array([embeds[0]]), np.array([input_embed]))print(similarity) #array([[0.8400894]])
sims = [cosine_similarity(np.array([emb]), np.array([input_embed])) for emb in embeds]"""
[array([[0.8400894]]),array([[0.80272758]]),array([[0.79536215]]),array([[0.81627175]]),array([[0.82762581]]),array([[0.81705796]]),array([[0.82609729]]),array([[0.78917449]]),array([[0.79970112]])]
"""

考虑文本存储在 CSV 文件中,我们计划将其用作评估输入相似性的参考。

from langchain.document_loaders.csv_loader import CSVLoaderloader = CSVLoader(file_path='data.csv', csv_args={'delimiter': ',','quotechar': '"','fieldnames': ['Words']
})data = loader.load()
data"""
[Document(page_content='Words: Words', metadata={'source': 'data.csv', 'row': 0}),Document(page_content='Words: Cat', metadata={'source': 'data.csv', 'row': 1}),Document(page_content='Words: Dog', metadata={'source': 'data.csv', 'row': 2}),Document(page_content='Words: CarTruck', metadata={'source': 'data.csv', 'row': 3}),Document(page_content='Words: Computer', metadata={'source': 'data.csv', 'row': 4}),Document(page_content='Words: Laptop', metadata={'source': 'data.csv', 'row': 5}),Document(page_content='Words: Apple', metadata={'source': 'data.csv', 'row': 6}),Document(page_content='Words: Orange', metadata={'source': 'data.csv', 'row': 7}),Document(page_content='Words: Music', metadata={'source': 'data.csv', 'row': 8}),Document(page_content='Words: Dance', metadata={'source': 'data.csv', 'row': 9})]
"""

CSVLoader 类用于从 CSV 文件加载数据。我们将在系列后面介绍装载机。 我们可以利用FAISS结合LangChain来创建一个向量存储。

embeddings = OpenAIEmbeddings()from langchain_community.vectorstores import FAISSdb = FAISS.from_documents(data, embeddings)
user_input = "Lion"results = db.similarity_search(user_input)results"""
[Document(page_content='Words: Cat', metadata={'source': 'data.csv', 'row': 1}),Document(page_content='Words: Apple', metadata={'source': 'data.csv', 'row': 6}),Document(page_content='Words: Dog', metadata={'source': 'data.csv', 'row': 2}),Document(page_content='Words: Orange', metadata={'source': 'data.csv', 'row': 7})]
"""

这篇关于【RAG入门教程02】Langchian的Embedding介绍与使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1047012

相关文章

Python使用PIL库将PNG图片转换为ICO图标的示例代码

《Python使用PIL库将PNG图片转换为ICO图标的示例代码》在软件开发和网站设计中,ICO图标是一种常用的图像格式,特别适用于应用程序图标、网页收藏夹图标等场景,本文将介绍如何使用Python的... 目录引言准备工作代码解析实践操作结果展示结语引言在软件开发和网站设计中,ICO图标是一种常用的图像

使用Java发送邮件到QQ邮箱的完整指南

《使用Java发送邮件到QQ邮箱的完整指南》在现代软件开发中,邮件发送功能是一个常见的需求,无论是用户注册验证、密码重置,还是系统通知,邮件都是一种重要的通信方式,本文将详细介绍如何使用Java编写程... 目录引言1. 准备工作1.1 获取QQ邮箱的SMTP授权码1.2 添加JavaMail依赖2. 实现

MyBatis与其使用方法示例详解

《MyBatis与其使用方法示例详解》MyBatis是一个支持自定义SQL的持久层框架,通过XML文件实现SQL配置和数据映射,简化了JDBC代码的编写,本文给大家介绍MyBatis与其使用方法讲解,... 目录ORM缺优分析MyBATisMyBatis的工作流程MyBatis的基本使用环境准备MyBati

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

使用Python实现表格字段智能去重

《使用Python实现表格字段智能去重》在数据分析和处理过程中,数据清洗是一个至关重要的步骤,其中字段去重是一个常见且关键的任务,下面我们看看如何使用Python进行表格字段智能去重吧... 目录一、引言二、数据重复问题的常见场景与影响三、python在数据清洗中的优势四、基于Python的表格字段智能去重

使用Apache POI在Java中实现Excel单元格的合并

《使用ApachePOI在Java中实现Excel单元格的合并》在日常工作中,Excel是一个不可或缺的工具,尤其是在处理大量数据时,本文将介绍如何使用ApachePOI库在Java中实现Excel... 目录工具类介绍工具类代码调用示例依赖配置总结在日常工作中,Excel 是一个不可或缺的工http://

Java之并行流(Parallel Stream)使用详解

《Java之并行流(ParallelStream)使用详解》Java并行流(ParallelStream)通过多线程并行处理集合数据,利用Fork/Join框架加速计算,适用于大规模数据集和计算密集... 目录Java并行流(Parallel Stream)1. 核心概念与原理2. 创建并行流的方式3. 适

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

Python中配置文件的全面解析与使用

《Python中配置文件的全面解析与使用》在Python开发中,配置文件扮演着举足轻重的角色,它们允许开发者在不修改代码的情况下调整应用程序的行为,下面我们就来看看常见Python配置文件格式的使用吧... 目录一、INI配置文件二、YAML配置文件三、jsON配置文件四、TOML配置文件五、XML配置文件