亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

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

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

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

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

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

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

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

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

好的,接下來我們需要獲取數(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)建完成,我們還需要創(chuàng)建集合,而不是傳統(tǒng)的表,因為在向量數(shù)據(jù)庫中,它們被稱為集合。因此,我們接下來要創(chuàng)建集合。

創(chuàng)建集合

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

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

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

在之前講解私人知識庫的時候,我會單獨引入其他embedding模型,因為向量數(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)。實際上,它們的原理與MySQL和其他數(shù)據(jù)庫相似,只是存儲的內(nèi)容和術(shù)語發(fā)生了變化。我們可以將其視為數(shù)據(jù)庫操作。

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

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

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

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

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

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

doc_lists = coll.searchByText(
                 embeddingItems=['天下大勢,分久必合,合久必分'],
                 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的寫法,我們還可以通過界面來進行精確查詢。只需要在界面中填寫where后的條件即可。

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

總結(jié)

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

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

相關(guān)文章

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

    python sorted方法和列表使用解析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    python自動下載圖片的方法示例

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

    python讀取excel文件的方法

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

最新評論