Search for documents with similar texts

題意:搜索具有相似文本的文檔

問題背景:

I have a document with three attributes: tags, location, and text.

我有一份文檔,包含三個屬性:標簽、位置和文本。

Currently, I am indexing all of them using LangChain/pgvector/embeddings.

目前,我正在使用 LangChain/pgvector/embeddings 對所有這些進行索引。

I have satisfactory results, but I want to know if there is a better way since I want to find one or more documents with a specific tag and location, but the text can vary drastically while still meaning the same thing. I thought about using embeddings/vector databases for this reason.

我目前的結果令人滿意,但我想知道是否有更好的方法,因為我想找到具有特定標簽和位置的一個或多個文檔,但文本可能變化很大而意思仍然相同。出于這個原因,我考慮過使用嵌入/向量數據庫。

Would it also be a case of using RAG (Retrieval-Augmented Generation) to "teach" the LLM about some common abbreviations that it doesn't know?

是否也可以利用 RAG(檢索增強生成)來“教授”大型語言模型(LLM)一些它不知道的常見縮寫呢?

import pandas as pdfrom langchain_core.documents import Document
from langchain_postgres import PGVector
from langchain_postgres.vectorstores import PGVector
from langchain_openai.embeddings import OpenAIEmbeddingsconnection = "postgresql+psycopg://langchain:langchain@localhost:5432/langchain"
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
collection_name = "notas_v0"vectorstore = PGVector(embeddings=embeddings,collection_name=collection_name,connection=connection,use_jsonb=True,
)# START INDEX# df = pd.read_csv("notes.csv")
# df = df.dropna()  # .head(10000)
# df["tags"] = df["tags"].apply(
#     lambda x: [tag.strip() for tag in x.split(",") if tag.strip()]
# )# long_texts = df["Texto Longo"].tolist()
# wc = df["Centro Trabalho Responsável"].tolist()
# notes = df["Nota"].tolist()
# tags = df["tags"].tolist()# documents = list(
#     map(
#         lambda x: Document(
#             page_content=x[0], metadata={"wc": x[1], "note": x[2], "tags": x[3]}
#         ),
#         zip(long_texts, wc, notes, tags),
#     )
# )# print(
#     [
#         vectorstore.add_documents(documents=documents[i : i + 100])
#         for i in range(0, len(documents), 100)
#     ]
# )
# print("Done.")### END INDEX### BEGIN QUERYresult = vectorstore.similarity_search_with_relevance_scores("EVTD202301222707",filter={"note": {"$in": ["15310116"]}, "tags": {"$in": ["abcd", "xyz"]}},k=10, # Limit of results
)### END QUERY

問題解決:

There is one primary unknown here, what is the approximate or average number of tokens in the "text" part of your input.

這里有一個主要的未知因素,即你輸入中“文本”部分的大致或平均token數是多少。

Scenario 1: You do not have a very long input (say, somewhere around 512 tokens)

場景1:你的輸入不是很長(大約512個token左右)

In this case, to get better results, you can train your own "embedding-model", please look at?my answer?here which has some info around it.

在這種情況下,為了獲得更好的結果,你可以訓練自己的“嵌入模型”。請參考我之前的回答,其中有一些相關信息。

Once you get right embedding model, you index corresponding text vectors in you RAG pipeline. There are a couple of other steps as well which are applicable to all the scenarios, so, I will add them at the end.

一旦你獲得了合適的嵌入模型,你就可以在你的RAG管道中索引相應的文本向量。還有一些其他步驟適用于所有場景,因此,我將在最后添加它們。

Scenario 2: You have a very long input per document, say, every "text" input is huge (say, ~8000 tokens, this number can be anything though). In this case you can leverage symbolic search instead of vector search. Symbolic search because, in any language, to describe something which really means the same or has similar context, there will surely be a lot of words overlap in source and target text. It will be very rare to find 10 pages text on a same topic that does not have a lot of work overlap.

場景2:每個文檔的輸入都非常長,例如,每個“文本”輸入都很大(大約8000個標記,盡管這個數字可以是任何數)。在這種情況下,你可以利用符號搜索而不是向量搜索。之所以選擇符號搜索,是因為在任何語言中,為了描述具有相同含義或相似上下文的內容,源文本和目標文本中肯定會有很多詞匯重疊。很難找到關于同一主題但文字重疊不多的10頁文本。

So, you can leverage symbolic search here, ensemble it with vector based validators and use an LLM service that allows long context prompts. So, you find some good candidates via symbolic searches, then, pass it on the long context LLM to for remaining parts.

因此,你可以在這里利用符號搜索,將其與基于向量的驗證器結合使用,并使用允許長上下文提示的大型語言模型(LLM)服務。首先,通過符號搜索找到一些好的候選文檔,然后將其傳遞給長上下文LLM以處理剩余部分。

Steps Applicable to all the scenarios:????????適用于所有場景的步驟:

1. You json object should also contain "tag", "location" along with "text" and "vector"

你的JSON對象應該同時包含“tag”(標簽)、“location”(位置)、“text”(文本)和“vector”(向量)

{"text":"some text",
"text_embedding":[...], #not applicable in symbolic search"location":"loc",
"tags":[]
}

2. This way, when you get matches from either vector search or symbolic search; you will further able to filter or sort based on other properties like tags and location

這樣,當你從向量搜索或符號搜索中獲得匹配項時,你將能夠基于其他屬性(如標簽和位置)進行進一步的過濾或排序。

Please comment if you have more doubts!????????如果你還有更多疑問,請隨時評論!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/36981.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/36981.shtml
英文地址,請注明出處:http://en.pswp.cn/web/36981.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

快速了解《大模型賦能下的AI2.0數字人平臺》白皮書

在生成式AI和大模型的賦能下,數字人迎來AI 2.0時代。它能否成為每個人的“數字分身”,轉化為新型的AI勞動力工具?商湯科技與上海市人工智能技術協會、零壹智庫、增強現實核心技術產業聯盟聯合發布《大模型賦能下的AI 2.0數字人平臺》。《白皮…

Kubernetes面試整理-PersistentVolumes和PersistentVolumeClaims的使用和配置

在 Kubernetes 中,PersistentVolumes (PV) 和 PersistentVolumeClaims (PVC) 提供了一種分離存儲和使用存儲的機制。PV 是集群中存儲資源的抽象表示,而 PVC 是用戶對存儲資源的請求。通過這種機制,用戶可以動態地申請和管理存儲資源。 PersistentVolumes (PV) PersistentVol…

【D3.js in Action 3 精譯】1.2.2 可縮放矢量圖形(二)

當前內容所在位置 第一部分 D3.js 基礎知識 第一章 D3.js 簡介 1.1 何為 D3.js?1.2 D3 生態系統——入門須知 1.2.1 HTML 與 DOM1.2.2 SVG - 可縮放矢量圖形 ?? 第一部分【第二部分】??第三部分(精譯中 ?) 1.2.3 Canvas 與 WebGL&#x…

自動化任務:在IPython中創建和運行腳本

在數據科學和編程中,自動化任務是提高效率的關鍵。IPython提供了多種方法來創建和運行腳本,使得重復性任務可以被輕松自動化。本文將介紹如何在IPython中創建和運行腳本,幫助你更高效地完成工作。 1. 創建和保存IPython腳本 使用文本編輯器…

Spring Boot 中的微服務監控與管理

微服務的概述 微服務架構的優點和挑戰 優點: 靈活性和可擴展性:微服務架構允許每個服務單獨部署和擴展,這使得系統可以更靈活地適應不同的業務需求和負載變化。 使團隊更加聚焦:每個微服務都有明確的職責,這使得開發團隊可以更加聚焦,專注于開發他們的服務。 技術和框…

讀AI新生:破解人機共存密碼筆記16對人工智能的治理

1. 愚蠢的、情緒化的人類 1.1. 與完美理性所設定的不可企及的標準相比,我們都是極其愚蠢的,我們受制于各種情緒的起伏,這些情緒在很大程度上支配著我們的行為 1.2. 為了充分了解人類的認知,我們(或者更確切地說&…

簡易跨平臺上傳文件,前后端demo

前端文件 <!DOCTYPE html> <html> <head><title>文件上傳</title> </head> <body> <h1>文件上傳1-相對慢&#xff0c;需要等待本地選擇的文件全部上傳完成后&#xff0c;服務器再保存</h1> <form id"uploadForm…

ORA-01775: 同義詞的循環鏈問題

一、問題描述 ORA-01775: 同義詞的循環鏈問題 二、 原因分析 同義詞對應的對象&#xff08;表等&#xff09;已刪除&#xff0c;不存在了。 可能原因&#xff1a; 刪除數據庫對象&#xff0c;但是忘記刪除同義詞。刪除一個用戶&#xff0c;但忘記刪除此用戶中相關的同義詞…

@Param參數

Param參數 當方法參數大于兩個的時候必須傳遞&#xff0c;只有一個的時候可以不傳。大于兩個的時候也可以用#{arg0}和#{arg1}。。。來取值 Param&#xff08;&#xff09;括號里面的值對應sql語句中 # {} 里面的值 看AI的解釋

模版方法模式詳解:使用和實現的指南

目錄 模版方法模式模版方法模式結構模版方法模式適合應用場景模版方法模式優缺點練手題目題目描述輸入描述輸出描述題解 模版方法模式 模板方法模式是一種行為設計模式&#xff0c; 它在超類中定義了一個算法的框架&#xff0c; 允許子類在不修改結構的情況下重寫算法的特定步…

《昇思25天學習打卡營第3天|張量 Tensor》

文章目錄 前言&#xff1a;今日所學&#xff1a;1. 創建張量2. 張量的屬性3.張量索引與運算4. NumPy與Tensor的轉換5. 稀疏張量 前言&#xff1a; 張量&#xff1f;張亮&#xff1f;張量是什么&#xff1f; 張量是一個可以用來表示在一些矢量、標量和其他張量之間的線性關系的…

高并發部署:基于 Gunicorn、Flask 和 Docker

一、準備工作 確保已經安裝以下軟件&#xff1a; DockerDocker ComposePython 3.x 二、創建 Flask 應用 首先&#xff0c;創建一個簡單的 Flask 應用。創建一個新的目錄并在其中創建以下文件&#xff1a; 1. app.py python fromflask importFlask, jsonifyapp Flask(__…

leetcode 第133場雙周賽 100333.統計逆序對的數目【計數dp/滾動數組/前綴和優化】

分析&#xff1a; 先考慮如下問題。 求長度為n&#xff0c;逆序對為m的排列數量。 可以考慮dp&#xff0c;dp[i][j]定義為長度為i&#xff0c;逆序對為j的排列數量。 dp[1][0] 1; //枚舉排列長度&#xff0c;或者認為枚舉當前需要插到長度為i-1的排列中的數字 for(int i 1…

OpenAI封殺不支持地區API:違規封號,7月9日生效

OpenAI 在檢測用戶使用其 API 的地區后&#xff0c;提示所有不支持位置的用戶 昨晚&#xff0c;很多大模型應用的開發者、程序員都收到了 OpenAI 的警告信&#xff0c;心里一驚。 OpenAI 在檢測用戶使用其 API 的地區后&#xff0c;提示所有不支持位置的用戶&#xff1a;即將封…

冒泡排序、選擇排序、插入排序~java版

1、冒泡排序&#xff08;Bubble Sort&#xff09; 冒泡排序的基本思想是多次遍歷待排序序列&#xff0c;每次遍歷時兩兩比較相鄰元素&#xff0c;如果順序不對則交換&#xff0c;直到整個序列有序為止。 public class BubbleSort {public static void bubbleSort(int[] arr) …

圖書管理系統(附源碼)

前言&#xff1a;前面一起和小伙伴們學習了較為完整的Java語法體系&#xff0c;那么本篇將運用這些知識連串在一起實現圖書管理系統。 目錄 一、總體設計 二、書籍與書架 書籍&#xff08;Book&#xff09; 書架&#xff08;Booklist&#xff09; 三、對圖書的相關操作 I…

已解決問題 | 該擴展程序未列在 Chrome 網上應用店中,并可能是在您不知情的情況下添加的

在Chrome瀏覽器中&#xff0c;如果你看到“該擴展程序未列在 Chrome 網上應用店中&#xff0c;并可能是在您不知情的情況下添加的”這樣的提示&#xff0c;通常是因為該擴展程序沒有通過Chrome網上應用店進行安裝。以下是解決這個問題的步驟&#xff1a; 解決辦法&#xff1a;…

Spring Boot整合Redis緩存的最佳實踐

Spring Boot整合Redis緩存的最佳實踐 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在現代應用開發中&#xff0c;緩存是提升系統性能和響應速度的關鍵技術之…

kali/ubuntu安裝vulhub

無須更換源&#xff0c;安裝docker-compose apt install docker.io docker -vdocker-compose #提示沒有&#xff0c;輸入y安裝mkdir -p /etc/docker vi /etc/docker/daemon.json #更換dockerhub國內源┌──(root?kali)-[/home/kali/vulhub-master/tomcat/CVE-2017-12615] …

【VScode】常規插件安裝

以下是VScode常規插件安裝&#xff1a; C/C C/C extension pack C/C themes Draw.io integration highlight 以上插件安裝完畢后&#xff0c;可實現 字體高亮&#xff0c;自動補齊&#xff0c;函數跳轉&#xff0c;主題切換&#xff0c;圖表生成等常用功能。