AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


吴恩达DeepLearning.AI课程系列 —— 大模型检索增强生成(三):向量数据库及嵌入
发布日期:2025-01-04 18:03:26 浏览次数: 1564 来源:机智流



引言

前面的课程中,我们讲述了如何将文档进行导入以及将文档根据需要切分成不同的块。正常情况下,我们传统的数据库其实完全没有必要去将其切分成很多块,因为无论你怎么去切分都会导致一定的信息丢失。而之所以我们需要将导入的内容进行切分,其实最主要的原因就是向量数据库的特性

  • 首先,文档切分可以提高查询的准确性。通过将大块内容拆分成更小的内容块(chunks),这些块可以更精细地表达文档中的具体信息。对于向量数据库而言,这些小块可以更准确地进行向量化表示,从而在相似度搜索时,匹配到更加相关和精准的内容,提高查询结果的准确性。
  • 其次,切分文档还可以便于向量化处理。当文档被切分为小块后,每个块的信息量更小,更适合向量化处理。向量化的过程需要对文本进行特征提取,而当文档过长时,特征提取的难度和复杂度会显著增加。而短文本能够更加有效地进行特征提取,从而使得最终生成的向量更具代表性。
  • 另外,切分文档还可以提升检索效率。向量数据库中通常需要对大量数据进行相似度计算,切分后的小块可以减少每次计算的复杂度,从而提高检索效率。同时,通过切分,更容易将用户的查询需求与小块信息进行匹配,快速找到合适的内容。
  • 最后,文档切分还可以实现更好的信息覆盖。长文档中可能包含多个主题或不同的信息点,直接将整个文档进行向量化处理可能会导致某些信息点被稀释或忽略。而通过切分,每个小块可以代表不同的主题或信息点,使得向量数据库中的信息覆盖更加全面,这样在进行查询时可以提供更丰富的响应。

因此,在使用一定的技术对文本内容进行划分形成一个个的chunk(块)后,下一步我们就是要将这些内容存储起来了。对于信息的管理而言,存储是至关重要的,因为假如信息不被存储起来,后续在我们需要时就无法顺利地调用出来。而将这些切分后的块存储到向量数据库中,也为后续的精准检索和高效利用奠定了坚实的基础。

向量化处理

对于每一个经过切分的块,我们第一步就是要进行Embeddings(向量化)的工作。Embeddings 的本质是将一段文本转化为一长串的向量,这些向量实际上是对文字的一种数字化表示。换句话说,就是把文本内容翻译成机器可以理解和操作的数字形式。当这些高维度的信息被映射到一个高维度的空间中时,我们会发现,如果两段话的语义相近,那么它们在这个高维度语义空间中的距离也会更接近。这种距离的相近性正是向量化的一个重要特征,它帮助我们在处理文本时,更容易捕捉到语义上的相似性。

构建向量数据库

当所有的块都被转化为向量形式后,我们将这些向量统一放置在一个高维度的空间中,这样就搭建起了一个向量数据库。在这种数据库中,每个向量代表着一个文本块的语义特征。当用户输入一个问题时,这个问题也首先会被转化为一个向量,然后将该向量放入整个向量空间中,通过计算找到与这个向量距离最近的几个向量。这些距离最近的向量代表着与用户问题语义最相似的文本块。我们通过这些向量作为索引,找到对应的文本内容,然后将这些内容返回,作为大语言模型的输入。

提升大语言模型的回答质量

通过这种方式,大语言模型的回答不仅仅依赖于它自身预训练时所获取的知识,还可以结合向量数据库中存储的丰富外部信息。因此,大语言模型在回答用户问题时,不仅更加专业化,而且更能紧密地贴合真实的使用场景和实际需求。结合了外部数据的支持,模型的回答显得更加灵活且充满上下文关联性,极大地提升了模型的实用性和回答的准确性。

这种架构使得我们能够在处理各种复杂问题时,提供基于真实数据的动态响应,尤其是当信息需要不断更新或者有针对特定领域的高精度需求时,这种结合了向量数据库的方式显得尤为重要。通过将内部知识与外部数据库相结合,我们能够在更广泛的场景下提供更加高质量、个性化的响应。

实战演练

下面就让我们进入实战的环节来尝试一下如何实现文本向量化吧!主要包的环境版本如下所示:

langchain                0.3.0
langchain-community      0.3.0
pypdf                    5.0.0
openai                   1.47.0
beautifulsoup4           4.12.3
chromadb                 0.5.15

那首先在进行词向量嵌入前,我们还是需要先导入文件且进行切分。这里我们还是选择使用网页的内容,并且在最后打印一下切分的块数。

from langchain_community.document_loaders import WebBaseLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 文件导入
loader = WebBaseLoader("https://zh.d2l.ai/")
docs = loader.load()

# 文本切分
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size = 1500,
    chunk_overlap = 150
)
splits = text_splitter.split_documents(docs)
print(len(splits))

在运行后我们可以看到,基于我们的切分方式,这部分内容最后被切分为了18块,下面我们就需要选择一个合适的embedding模型来将这部分内容转化为数字的表达并存储在向量空间之中。对于langchain而言,支持程度最高的当属OpenAI的embedding模型,但是由于我们国内的网络无法直接使用OpenAI的服务,因此我们需要前往Langchain的官网查看其他可用的embedding模型。

在搜索的过程中,我发现了两个在langchain中支持了百度的千帆以及百川的embedding模型。这里我们以百川的embedding模型为例来进行实战的演示。那首先第一步,我们需要先在百川智能的官网注册一个新账户。然后跟随者新手指导创建自己的API Key。

最后我们还需要完成内部的实名认证。这样我们就可以看到我们的账户上有了赠送金80元了。也就完全足够我们完成后续的文本嵌入工作了。

我们可以简单的用一个句子来检验一下自己的向量数据库是否能够成功的运行。

from langchain_community.embeddings import BaichuanTextEmbeddings

embeddings = BaichuanTextEmbeddings(baichuan_api_key="sk-*"# 这里写入刚刚创建的API Key
text_1 = "今天天气不错"

query_result = embeddings.embed_query(text_1)
print(query_result)

假如在运行后成功显示了这一串数字的列表就意味着我们成功配置好了模型。

[-0.00758009730.05336676-0.0177813640.0351530430.05473809-0.0034863392-0.0177256220.03400442-0.00156182980.0370489020.023895627-0.045087088-0.0064525804-0.0049004983-0.064887315-0.0158250180.0227727760.00602170360.0259142720.024085524-0.014776563-0.050150223-0.026934989-0.016943432-0.0153038970.00236849070.0560524540.04980960.0548103150.014616517-0.01088041250.0424616450.0150645840.0562639940.027121587-0.022202492-0.027525024-0.008664351-0.036344998-0.016571270.0145279890.028132828-0.0147384820.0094140090.072366090.012243288-0.022873089-0.00107111040.00669326-0.074453940.010032093-0.0126827555-0.013846456-0.03963767-0.0015490066-0.0143728030.0133660170.035709277-0.000436081350.03880523-0.0295188110.17903462-0.0133019150.0396015980.007936066-0.022787375-0.043096073-0.015623084-0.006984037-0.054434070.014602836-0.010637717-0.024930496-0.005672862-0.030609699-0.04613513-0.005200756-0.0019113886-0.00103692680.063646220.0017903518-0.013281618-0.0493084560.0055903164-0.0390540550.038039792-0.0372850450.090783335-0.0156229920.016203934-0.0542140570.039612820.026360435-0.0183532520.0165196710.041751813-0.0144770770.0127489995-0.0304552820.0248511380.019062009-0.017065959-0.026276550.02258509-0.048475640.073734246-0.041269477-0.016923170.022543054-0.0034427822-0.0146818850.02256325-0.010713156-0.005427022-0.05921746-0.0115020230.022751710.0374949130.047674343-0.0265840010.044121840.0557254180.007986744-0.021016385-0.023211442-0.0361633040.0167203040.033081684-0.0032843906-0.0426558140.007911628-0.0244656150.015406191-0.010756438-0.03702144-0.02317689-0.054836072-0.031834766-0.02790807-0.0328537040.019062275-0.0468429920.0173806530.0141153850.0149310910.010515374-0.05607991-0.00195742350.0138543380.0123914230.0182312130.0764546540.008188162-0.0376390070.045298122-0.0738484560.068050385-0.027059750.023622544-0.00422085780.0337943-0.0229923760.058268270.0118581040.015696070.042661842-0.0172099840.0216942950.0075052090.011397206-0.0223968680.006295061-0.02817121-0.020757983-0.0292395430.0175802060.00535751370.0047285426-0.008169297-0.0250380410.066698330.035822890.0050918288-0.0277236350.00014384017-0.02224188-0.015801586-0.018485880.050851304-0.09774136-0.0175761360.0572992270.0004421710.0134984930.0556377470.01241353250.0484081540.0079209590.0095843775-0.025519110.078900434-0.018005438-0.043834610.0061333530.0077908253-0.015221063-0.0068961675-0.004510117-0.003239107-0.016756145-0.0010812985-0.0125407540.061546940.033851653-0.03275014-0.0319581630.034976978-0.0070638503-0.0107440045-0.01419383-0.0208392220.0170759690.022541199-0.022424642-0.0083917530.027798742-0.0160507620.00740321170.01274655850.0540578440.02783872-0.020913660.039579363.540524e-05-0.020640220.016737267-0.020010721-0.0286514570.0128146420.0123343960.019623990.009970842-0.00164172240.0199761280.022435250.0088748890.0163828450.0532240270.015183802-0.027056694-0.017940272-0.052429568-0.0210749020.00820863250.013914038-0.0017846578-0.00287915670.04976489-0.029251110.0517947930.0394456130.00066636136-0.020006057-0.0280571930.0090573540.0322072950.03994987-0.0092765220.004099356-0.00171982460.0081182590.0376284530.0037252930.0041883890.0101375370.009433222-0.017439801-0.0138818650.03614680.02582073-0.016355189-0.048937950.006175331-0.0023281380.0312244970.021124806-0.0479539520.0184111730.00625073540.032359783-0.0161025080.0168118980.00614631360.0197904610.07498880.02312070.0370504260.0382117-0.0061309210.0334407130.044845060.00641651820.0146068720.0310423410.042838850.0254145060.0107755070.0378864040.0489667650.024765946-0.014064301-0.035776360.03747178-0.0263693390.011620050.008283756-0.0358968560.018269759-0.00182168380.0379739370.0071238307-0.021558587-0.056917723-0.036986127-0.0181916880.0039297420.0149206440.046500735-0.003899504-0.0254252870.069072930.0033958552-0.011529156-0.010054631-0.0411076620.0264931380.019427532-0.008603713-0.0218176260.083132950.0196523480.044305550.0168187080.0087628390.024853677-0.0064103690.0282464680.0031200290.0264482440.0213689620.0203414730.0327071440.010048966-0.00529577160.0118404060.0055092510.027914446-0.031125596-0.0553852840.030866420.0176250860.0071002766-0.0283319190.0093888920.011837206-0.02456342-0.07309796-0.00057860994-0.0152536350.0382933430.0213596840.029337738-0.019162798-0.046192612-0.0072253780.0029910330.0222186040.0272695440.0196657810.045284394-0.0138705885-0.02697327-0.02061466-0.020470670.027559392-0.02104657-0.0058107083-0.029897332-0.0207705890.015403516-0.008580397-0.026312502-0.019879675-0.0307391320.036861204-0.0087012950.017366812-0.0560299750.018073070.049722634-0.02142505-0.025946185-0.054207556-0.00232041670.016083129-0.0342650040.06520241-0.0015073599-0.048764326-0.013347777-0.022093870.039798964-0.0207320560.029141719-0.0314829950.0326820460.0010684143-0.0097546335-0.0427862930.0140758010.070676920.0371680150.036651330.0130993830.045177884-0.004970739-0.011883725-0.017102279-0.003542377-0.00557566340.0031541680.018256243-0.003425703-0.0221929660.017587043-0.0498685-0.0367886830.00650187260.05418345-0.00614991230.023049217-0.0450259630.033544380.0047220130.0259993190.0023555926-0.0255824220.010080429-0.0073075320.00128635370.019033063-0.070112355-0.013475271-0.00657555830.116088230.004442146-0.047035020.001603611-0.00151364850.049734406-0.002725904-0.034830157-0.0061635147-0.052926670.0022673467-0.059685270.0203964950.0425368850.035687473-0.008441101-0.0050368826-0.0102412150.026221493-0.0126067760.0052525415-0.0130986240.021647796-0.032603852-0.01961021-0.0014802065-0.013694488-0.026213555-0.004319692-0.0024521998-0.033362728-0.015006008-0.000116681340.006287778-0.0263084790.0051860493-0.0064577810.022501219-0.0609342050.02888547-0.0136715860.014401986-0.0139429330.023061465-0.0160804670.0460328420.009503975-0.04311421-0.0298682640.0053920350.077726334-0.0032545268-0.030466318-0.0369483570.021784065-0.0139244150.0051887096-0.024259165-0.0034383263-0.006792153-0.01465431-0.00283333220.031919274-0.0043740.0095611710.0088258770.039027380.02316122-0.00442539340.009838579-0.05157412-0.016854126-0.036437070.0051199044-0.033243462-0.0201014150.00626063630.00292478150.045445547-0.0033785962-0.0196103660.035537380.08627263-0.017463442-0.0327489820.0269608440.0349854230.024329964-0.0217338150.046590810.070167870.0291603110.009318909-0.045971920.0092878340.011963390.005629870.00341885890.03260338-0.0179492510.0062056463-0.00607117-0.0342859630.0047241860.006547158-0.05276999-0.00294034070.0289966950.0063203387-0.0128724035-0.0113595810.0105191070.0238029420.0220687690.0531985870.0384773650.008498884-0.029403154-0.0448048080.0014762741-0.010704774-0.0158298970.0076172580.013373788-0.060882020.034654226-0.0205307080.038792215-0.027131623-0.023142476-0.0098300220.00865907-0.03165655-0.014819898-0.0056369120.0158550740.04296683-0.00611402330.00010367572-0.0072180540.01453267-0.0260577840.015334749-0.067188405-0.021128211-0.041068982-0.025423573-0.042716593-0.0206458290.00426546620.0046950225-0.0180721880.00816476-0.018691676-0.043077044-0.0125768830.04691853-0.0088852390.014005581-0.033840520.0136735960.0065266970.05935537-0.005123774-0.034266487-0.0073368180.023922260.040810507-0.0250578840.06466703-0.03366888-0.041856468-0.014158450.048406634-0.0535563270.018411247-0.00248659290.00512672630.0051485550.0076659825-0.0073553440.0263270920.0151249730.01254597-0.035107430.0130271970.0213248730.00373969720.011446163-0.049029667-0.06374169-0.035224453-0.0085309570.013979153-0.052223757-0.077933770.00195916070.00366651220.018972708-0.0547220560.011637819-0.045765080.020068552-0.0140406630.0057487655-0.028714720.0003392991-0.05118145-0.0089246860.055410165-0.0141646630.012071178-0.0890326650.061980903-0.0132053780.011523452-0.010561611-0.0314809460.0177897770.015061673-0.018700680.0050982414-0.037708025-0.037060946-0.024205728-0.0051698796-0.047261383-0.010686779-0.0091998010.0263955030.014988068-0.056384664-0.019924317-0.0207959950.029633936-0.058036490.013602117-0.0267998950.02065851-0.0377127160.00120445520.022238478-0.030268280.017173570.0122454455-0.022047512-0.030403102-0.038185170.00229593090.057572440.04599548-0.034720577-0.045416710.0357211750.0253376830.015104129-0.024553472-0.01204572150.0111366740.0113479940.011413503-0.05628646-0.036509324-0.0073100314-0.0157579520.0258755370.0242118540.033534613-0.0070441454-0.0112673305-0.015626570.0186280630.01170824750.00696831150.0028892006-0.0326038970.04310698-0.0300785580.0198549520.00202023590.0113821380.0673073460.0153360125-0.036706623-0.06758915-0.0092905350.00323765330.021220103-0.049745810.0061763430.020831260.008996937-0.012759147-0.022663713-0.052332110.05656895-0.03491627-0.073676620.0012407355-0.0213052520.0013611852-0.002151927-0.010974503-0.018530773-0.015555192-0.0039501754-0.034966897-0.058117830.003567218-0.035145250.02981192-0.031437088-7.947596e-050.06417666-0.017109170.042598553-0.024223894-0.0054067250.004249046-0.0027075368-0.048399337-0.067284755-0.026074586-0.00038019277-0.006811091-0.075666060.082352220.053955197-0.03657168-0.003544574-0.0796156150.039517120.00240601320.038426884-0.02753584-0.06644118-0.0315971230.04755233-0.023949284-0.0325635340.045649310.06101583-0.0521965960.01139768-0.047797628-0.039955243-0.051755790.01297511-0.0412492380.0198373380.049250647-0.0141288470.043208480.010422725-0.07393222-0.0061604380.00272814320.00303571420.008153918-0.0114379560.03710885-0.00606464830.041081015-0.0504446-0.0077678473-0.018858869-0.00126652570.00119342720.008902389-0.0045399130.017090350.03139153-0.0156242870.0196613240.031275284-0.027015321-0.050437905-0.00128377460.0087303180.039631095-0.038035190.0276571440.00461841330.0479205770.026898373-0.0138883360.0244676150.0466194380.00733927730.0266158790.0051005054-0.0010000536-0.02616397-0.019414691-0.0218268220.06719448-0.04384584-0.0149135370.018902838-0.03909702-0.037313778-0.0250588930.040213257-0.05010741-0.009008712-0.03383378-0.012926460.017064018-0.02641823-0.0013774060.04626737-0.016107187-0.042900816-0.032694705-0.0358680370.0537559760.0405138470.0390839170.016084548-0.021831522-0.018332051-0.00186002530.0173216260.0151342310.010182116-0.0333889540.0137456120.03670928-0.0120792445-0.034577135-0.037432150.0192355480.053698860.00608434160.0282000450.029757240.0304955750.0010913435-0.007207034-0.019063968-0.039667630.0454961320.0210014770.0231161660.0066026025-0.03898141-0.0073256157-0.04920679-0.045882054-0.02638399-0.0224207160.0084250270.022284094-0.03773097-0.025559437-0.103974216-0.005242592-0.06716960.0261144860.0257666610.0066235885-0.027907312-0.023954913-0.079194210.022901187-0.04137246-0.0090224035-0.000757759030.05223202-0.0239989720.0138458490.0200671480.0273504330.0101061850.0270080960.0042664250.0053291633-0.0235292870.00368593940.022047544-0.0052554810.02131725-0.0109661370.021549305-0.032396805-0.006565986-0.004006749-0.0071045044-0.07429621-0.00216828820.0363547020.0266766270.004047951-0.0135827810.0350647160.00576151860.0203037650.0442832220.0222949670.0057405480.02587493-0.0172690710.0017926773-0.0266927720.03899112-0.00149206570.01090971-0.0246066580.00379006290.065766014-0.02223905-0.017547399-0.00333358020.070884410.015989626-0.011706954-0.03484610.0160820060.032375330.017515019-0.037049048-0.028268043-0.05145202-0.0076028937-0.0209031810.005214950.02538109-0.0415649340.0847226160.028442240.013816085-0.018994967-0.0161605350.0109367690.004741091-0.0089521830.01748413-0.015781391-0.00272523520.0097493330.002431545-0.016886959-0.016557302-0.0085301430.046074543-0.00335963020.0054472997-0.0338974-0.0041198754-0.051638987-0.010516797-0.00138985450.025756834-0.0276471430.017510960.00407430060.0172285960.0417116320.002354791-0.009751058-0.0137705690.0352327150.023409935-0.03652178-0.0030414755-0.0471948870.004529896-0.042122014-0.012359320.027848661]

在准备好了embedding模型后,我们还需要解决的一个问题是用哪一个向量数据库进行向量的存储。在Langchain的官方文档中我们可以看到,Langchain最常支持的有四个向量数据库,包括Chroma、Pinecone、FAISS以及Lance。那这里我就以Chroma为例来展示一下具体的使用方式:

我们先跟着官方文档的要求安装一下Chorma这个库。

pip install langchain-chroma

安装完成后,我们就可以开始设置一下我们向量数据库存放的位置然后进行设置了。

from langchain_chroma import Chroma
# 存放文件路径设置
persist_directory = r'D:\langchain'

# 创建向量数据库
vectordb = Chroma.from_documents(
    documents=splits,
    embedding=embeddings,
    persist_directory=persist_directory
)
print(vectordb._collection.count())

最后假如也是打印出18的话就代表向量数据库创建完成。此时我们就可以在存放的路径处找到一个名为chorma.sqlite3的文件以及一个存放了内容的文件夹。这个就是我们所设置的向量数据库了。

我们可以尝试对我们建立的数据库进行内容的检索,看看能不能找到最相关的块。

# 检索
question = "图像识别"
docs = vectordb.similarity_search(question,k=3)
print(len(docs))
print(docs[0].page_content)

我们发现其找到的内容里就包括了计算机视觉的相关内容,因此其实是成功的找到比较相关的内容的!

13. 计算机视觉
13.1. 图像增广
13.2. 微调
13.3. 目标检测和边界框
13.4. 锚框
13.5. 多尺度目标检测
13.6. 目标检测数据集
13.7. 单发多框检测(SSD)
13.8. 区域卷积神经网络(R-CNN)系列
13.9. 语义分割和数据集
13.10. 转置卷积
13.11. 全卷积网络
13.12. 风格迁移
13.13. 实战 Kaggle 比赛:图像分类 (CIFAR-10)
13.14. 实战Kaggle比赛:狗的品种识别(ImageNet Dogs)

本节课中完整的代码如下所示:

from langchain_community.document_loaders import WebBaseLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.embeddings import BaichuanTextEmbeddings
from langchain_chroma import Chroma
# 文件导入
loader = WebBaseLoader("https://zh.d2l.ai/")
docs = loader.load()

# 文本切分
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size = 1500,
    chunk_overlap = 150
)
splits = text_splitter.split_documents(docs)
print(len(splits))

# 文本嵌入
embeddings = BaichuanTextEmbeddings(baichuan_api_key="sk-83842453061e34d80b392edba11f62fe")

# 测试
# text_1 = "今天天气不错"

# query_result = embeddings.embed_query(text_1)
# print(query_result)

# 路径设置
persist_directory = r'D:\langchain'

# 向量库创建
vectordb = Chroma.from_documents(
    documents=splits,
    embedding=embeddings,
    persist_directory=persist_directory
)
print(vectordb._collection.count())

# 检索
question = "图像识别"
docs = vectordb.similarity_search(question,k=3)
print(len(docs))
print(docs[0].page_content)

结语

以上就是本节课的主要内容!我们探讨了向量数据库(VectorStore)和嵌入(Embedding)的概念,并通过 Langchain 和百川 API 的结合,成功实现了向量数据库的创建。这使得我们能够在高效管理语义信息的基础上,为后续的大模型对话系统提供强有力的支持。



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询