欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python快速進(jìn)修指南之向量數(shù)據(jù)庫文本搜索

 更新時(shí)間:2024年02月01日 11:58:39   作者:努力的小雨  
這篇文章主要為大家介紹了Java開發(fā)快速進(jìn)修Python指南之向量數(shù)據(jù)庫文本搜索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

如果說Python是跟隨我的步伐學(xué)習(xí)的話,我覺得我在日常開發(fā)方面已經(jīng)沒有太大的問題了。然而,由于我沒有Python開發(fā)經(jīng)驗(yàn),我思考著應(yīng)該寫些什么內(nèi)容。我回想起學(xué)習(xí)Java時(shí)的學(xué)習(xí)路線,直接操作數(shù)據(jù)庫是其中一項(xiàng)重要內(nèi)容,無論使用哪種編程語言,與數(shù)據(jù)庫的交互都是不可避免的。然而,直接操作MySQL數(shù)據(jù)庫似乎缺乏趣味性,畢竟每天都在寫SQL語句。突然我想到了我之前寫過的一系列私人知識(shí)庫文章,于是我想到了向量數(shù)據(jù)庫,畢竟這是當(dāng)前非常熱門的技術(shù)之一。

如果AI離開了向量數(shù)據(jù)庫,就好像失去了靈魂一樣。市面上有很多向量數(shù)據(jù)庫產(chǎn)品,我選擇了最近騰訊推出的向量數(shù)據(jù)庫,并且我還有一張免費(fèi)試用卡,趁著還沒過期,我決定寫一些相關(guān)文章。而且我看了一下,這個(gè)數(shù)據(jù)庫對(duì)于新手來說非常友好,因?yàn)樗锌梢暬缑?。?duì)于一個(gè)新手來說,能夠看到實(shí)際效果是最客觀的。就像當(dāng)初學(xué)習(xí)SQL時(shí),如果沒有Navicat這個(gè)可視化工具,就會(huì)感覺力不從心一樣。

向量數(shù)據(jù)庫

向量數(shù)據(jù)庫具有將復(fù)雜的非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)化為多維邏輯坐標(biāo)值的能力,簡(jiǎn)而言之,它可以將我們所了解的所有事物轉(zhuǎn)化為可計(jì)算的數(shù)字。一旦數(shù)據(jù)進(jìn)入數(shù)學(xué)領(lǐng)域,我們就能夠?qū)ζ溥M(jìn)行計(jì)算。此外,向量數(shù)據(jù)庫還可以作為一個(gè)外部知識(shí)庫,為大型模型提供最新、最全面的信息,以應(yīng)對(duì)需要及時(shí)回答的問題。同時(shí),它也能夠賦予大型語言模型長期記憶的能力,避免在對(duì)話過程中產(chǎn)生"斷片"的情況。可以說,向量數(shù)據(jù)庫是大型語言模型的最佳合作伙伴。

如果你對(duì)任何內(nèi)容有任何疑問,請(qǐng)看以下官方文檔鏈接查看更多信息:

https://d7e.jb51.net//202401/tools/1113tusoutuanli.rar

雖然這是官方的文檔,里面存在許多錯(cuò)誤,我已經(jīng)積極提供了反饋,但可惜沒有得到有效處理。盡管如此,這并不會(huì)妨礙我們的閱讀。文檔最后還有一個(gè)官方的案例代碼倉庫,對(duì)于有興趣的同學(xué)可以直接滑動(dòng)到最后進(jìn)行查閱。不過,對(duì)于新手而言,可能并不太友好,原因在于代碼量較大,很難一下子消化。就好比剛學(xué)習(xí)Java的時(shí)候,要看別人的業(yè)務(wù)邏輯一樣,即使有大量注釋,也會(huì)感到吃力。

建立數(shù)據(jù)庫連接

領(lǐng)取完畢后,你需要?jiǎng)?chuàng)建一個(gè)新的免費(fèi)示例,這個(gè)過程不難,大家都會(huì)。成功之后,你需要開啟外網(wǎng)訪問,否則無法進(jìn)行本地的測(cè)試和聯(lián)調(diào)。在開啟外網(wǎng)訪問時(shí),需要將外網(wǎng)白名單ip設(shè)置為0.0.0.0/0,這將接受所有IP的請(qǐng)求。

好的,接下來我們需要獲取數(shù)據(jù)庫的登錄名和密碼。這些信息將用于連接和管理數(shù)據(jù)庫。

創(chuàng)建數(shù)據(jù)庫

import tcvectordb
from tcvectordb.model.enum import FieldType, IndexType, MetricType, ReadConsistency

#create a database client object
client = tcvectordb.VectorDBClient(url='http://*******', username='root', key='1*******', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
# create a database
db = client.create_database(database_name='db-xiaoyu')

print(db.database_name)

# list databases
db_list = client.list_databases()
for db in db_list:
         print(db.database_name)

好的,我們現(xiàn)在開始替換所需的內(nèi)容,完成數(shù)據(jù)庫的創(chuàng)建。一旦數(shù)據(jù)庫創(chuàng)建完成,我們還需要?jiǎng)?chuàng)建集合,而不是傳統(tǒng)的表,因?yàn)樵谙蛄繑?shù)據(jù)庫中,它們被稱為集合。因此,我們接下來要?jiǎng)?chuàng)建集合。

創(chuàng)建集合

創(chuàng)建集合和創(chuàng)建表的過程類似,但前提是集合需要存儲(chǔ)向量,而表用于存儲(chǔ)數(shù)據(jù)。在這里,我們選擇使用集成了embedding的集合。如果不使用集成的embedding,你需要使用其他embedding模型來輸出向量,然后將其輸入到集合中進(jìn)行存儲(chǔ)。除非你想手動(dòng)輸入向量值,否則這是必要的。

設(shè)計(jì)索引(不是設(shè)計(jì) Collection 的結(jié)構(gòu))

在使用向量對(duì)應(yīng)的文本字段時(shí),不建議建立索引。這樣做會(huì)占用大量內(nèi)存資源,而且沒有實(shí)際作用。除了向量對(duì)應(yīng)的文本字段外,如果需要進(jìn)行業(yè)務(wù)過濾,也就是在查詢時(shí)需要使用where條件,那么必須單獨(dú)為這個(gè)條件字段定義一個(gè)索引。也就是說,你需要用哪個(gè)字段進(jìn)行過濾,就必須為該字段定義一個(gè)索引。向量數(shù)據(jù)庫支持動(dòng)態(tài)模式(Schema),在寫入數(shù)據(jù)時(shí)可以寫入任意字段,無需提前定義,類似于MongoDB。目前,主鍵id和向量字段vector是固定且必需的,字段名稱也必須一致,否則會(huì)報(bào)錯(cuò)。

在之前講解私人知識(shí)庫的時(shí)候,我會(huì)單獨(dú)引入其他embedding模型,因?yàn)橄蛄繑?shù)據(jù)庫沒有繼承這些模型。不過,騰訊已經(jīng)將embedding模型集成在了他們的系統(tǒng)中,這樣就不需要來回尋找模型了。需要注意的是,為了確保一致性,你選擇的embedding模型后面的vector字段要設(shè)置為768維。

db = client.database('db-xiaoyu')
# -- index config
index = Index(
    FilterIndex(name='id', field_type=FieldType.String, index_type=IndexType.PRIMARY_KEY),
    VectorIndex(name='vector', dimension=768, index_type=IndexType.HNSW,
                metric_type=MetricType.COSINE, params=HNSWParams(m=16, efconstruction=200)),
    FilterIndex(name='author', field_type=FieldType.String, index_type=IndexType.FILTER),
    FilterIndex(name='bookName', field_type=FieldType.String, index_type=IndexType.FILTER)
)

# Embedding config
ebd = Embedding(vector_field='vector', field='text', model=EmbeddingModel.BGE_BASE_ZH)

# create a collection
coll = db.create_collection(
    name='book-xiaoyu',
    shard=1,
    replicas=0,
    description='this is a collection of test embedding',
    embedding=ebd,
    index=index
)
print(vars(coll))

我們已經(jīng)成功創(chuàng)建了數(shù)據(jù)庫和集合,并且現(xiàn)在讓我們來看一下它們的結(jié)構(gòu)。實(shí)際上,它們的原理與MySQL和其他數(shù)據(jù)庫相似,只是存儲(chǔ)的內(nèi)容和術(shù)語發(fā)生了變化。我們可以將其視為數(shù)據(jù)庫操作。

插入/替換數(shù)據(jù)

當(dāng)插入數(shù)據(jù)時(shí),如果集合中已經(jīng)存在具有相同ID的文檔,則會(huì)刪除原始文檔并插入新的文檔數(shù)據(jù)。需要注意的是,很多字段我們都沒有指定,例如page、text等。你可以繼續(xù)添加這些字段,因?yàn)樗鼈冾愃朴贛ongoDB。但請(qǐng)注意,text字段必須與你在配置embedding時(shí)指定的字段相同,否則無法將其轉(zhuǎn)換為向量。

coll = db.collection('book-emb')
# 寫入數(shù)據(jù)。
# 參數(shù) build_index 為 True,指寫入數(shù)據(jù)同時(shí)重新創(chuàng)建索引。
res = coll.upsert(
            documents=[
                Document(id='0001', text="話說天下大勢(shì),分久必合,合久必分。", author='羅貫中', bookName='三國演義', page=21),
                Document(id='0002', text="混沌未分天地亂,茫茫渺渺無人間。", author='吳承恩', bookName='西游記', page=22),
                Document(id='0003', text="甄士隱夢(mèng)幻識(shí)通靈,賈雨村風(fēng)塵懷閨秀。", author='曹雪芹', bookName='紅樓夢(mèng)', page=23)  
            ],
            build_index=True
        )

當(dāng)我們完成數(shù)據(jù)插入后,我們可以立即執(zhí)行查詢操作。但請(qǐng)注意,如果你將 “build_index” 字段設(shè)置為 “false”,即使插入成功,查詢時(shí)也無法檢索到數(shù)據(jù)。因此,如果要立即生效并能查詢到數(shù)據(jù),你必須將其設(shè)置為 “true”。這個(gè)是重建索引的過程

查詢數(shù)據(jù)

這里的查詢可以分為精確查詢和相似度查詢兩種。精確查詢是指除了向量字段外的其他字段查詢條件都是精確匹配的。由于我們?cè)诮⑺饕龝r(shí)已經(jīng)對(duì)作者(author)和書名(bookName)建立了索引,所以我們可以直接對(duì)它們進(jìn)行數(shù)據(jù)過濾,但是我不會(huì)在這里演示?,F(xiàn)在我將演示一下模糊查詢,即對(duì)向量字段匹配后的結(jié)果進(jìn)行查詢,并同時(shí)加上過濾條件。

doc_lists = coll.searchByText(
                 embeddingItems=['天下大勢(shì),分久必合,合久必分'],
                 filter=Filter(Filter.In("bookName", ["三國演義", "西游記"])),
                 params=SearchParams(ef=200),
                 limit=3,
                 retrieve_vector=False, # 不返回向量
                 output_fields=['bookName','author']
             )
# printf
for i, docs in enumerate(doc_lists.get("documents")):
                for doc in docs:
                        print(doc)

除了上面提到的Python的寫法,我們還可以通過界面來進(jìn)行精確查詢。只需要在界面中填寫where后的條件即可。

要進(jìn)行模糊查詢,可以直接使用text文字進(jìn)行查詢,或者定義過濾字段來進(jìn)行查詢優(yōu)化。

總結(jié)

剩下的刪除數(shù)據(jù)這部分我就不演示了。今天先跟向量數(shù)據(jù)庫熟悉一下界面操作,感覺就像在使用Kibana查詢ES數(shù)據(jù)一樣。不知道你們有沒有類似的感覺。好了,今天我們先只關(guān)注文本操作,下一期我會(huì)嘗試處理圖像或者視頻數(shù)據(jù)。總的來說,相比Java,Python的SDK使用起來更加舒適。如果你曾經(jīng)使用過Java SDK與平臺(tái)接口對(duì)接,就會(huì)發(fā)現(xiàn)Python SDK上手更快。

以上就是Java開發(fā)快速進(jìn)修Python指南之向量數(shù)據(jù)庫文本搜索的詳細(xì)內(nèi)容,更多關(guān)于Python向量數(shù)據(jù)庫文本搜索的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python sorted方法和列表使用解析

    python sorted方法和列表使用解析

    這篇文章主要介紹了python sorted方法和列表使用解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python如何實(shí)現(xiàn)wifi自動(dòng)連接,解決電腦wifi經(jīng)常斷開問題

    python如何實(shí)現(xiàn)wifi自動(dòng)連接,解決電腦wifi經(jīng)常斷開問題

    這篇文章主要介紹了python實(shí)現(xiàn)wifi自動(dòng)連接,解決電腦wifi經(jīng)常斷開的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Python決策樹之基于信息增益的特征選擇示例

    Python決策樹之基于信息增益的特征選擇示例

    這篇文章主要介紹了Python決策樹之基于信息增益的特征選擇,結(jié)合實(shí)例形式分析了決策樹中基于信息增益的特征選擇原理、計(jì)算公式、操作流程以及具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-06-06
  • Python 數(shù)據(jù)結(jié)構(gòu)之堆棧實(shí)例代碼

    Python 數(shù)據(jù)結(jié)構(gòu)之堆棧實(shí)例代碼

    這篇文章主要介紹了Python 數(shù)據(jù)結(jié)構(gòu)之堆棧實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Python flask框架實(shí)現(xiàn)瀏覽器點(diǎn)擊自定義跳轉(zhuǎn)頁面

    Python flask框架實(shí)現(xiàn)瀏覽器點(diǎn)擊自定義跳轉(zhuǎn)頁面

    這篇文章主要介紹了Python flask框架實(shí)現(xiàn)瀏覽器點(diǎn)擊自定義跳轉(zhuǎn)頁面,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • PyTorch搭建雙向LSTM實(shí)現(xiàn)時(shí)間序列負(fù)荷預(yù)測(cè)

    PyTorch搭建雙向LSTM實(shí)現(xiàn)時(shí)間序列負(fù)荷預(yù)測(cè)

    這篇文章主要為大家介紹了PyTorch搭建雙向LSTM實(shí)現(xiàn)時(shí)間序列負(fù)荷預(yù)測(cè),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python使用Flask Migrate模塊遷移數(shù)據(jù)庫

    Python使用Flask Migrate模塊遷移數(shù)據(jù)庫

    Flask-Migrate是一個(gè)為Flask應(yīng)用處理SQLAlchemy數(shù)據(jù)庫遷移的擴(kuò)展,使得可以通過Flask的命令行接口或者Flask-Scripts對(duì)數(shù)據(jù)庫進(jìn)行操作
    2022-07-07
  • Python3和PyCharm安裝與環(huán)境配置【圖文教程】

    Python3和PyCharm安裝與環(huán)境配置【圖文教程】

    這篇文章主要介紹了Python3和PyCharm安裝與環(huán)境配置,結(jié)合圖文形式詳細(xì)分析了Python3和PyCharm的安裝、環(huán)境配置、測(cè)試命令及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • python自動(dòng)下載圖片的方法示例

    python自動(dòng)下載圖片的方法示例

    這篇文章主要介紹了python自動(dòng)下載圖片的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • python讀取excel文件的方法

    python讀取excel文件的方法

    文章介紹了在Python中讀取Excel文件的兩種方法:使用pandas庫和使用openpyxl庫,pandas適合數(shù)據(jù)分析和處理,而openpyxl提供了更多的Excel文件操作功能,感興趣的朋友跟隨小編一起看看吧
    2024-11-11

最新評(píng)論