在數(shù)字時代,搜索引擎在通過瀏覽互聯(lián)網(wǎng)上的大量可用信息來檢索數(shù)據(jù)方面發(fā)揮著重要作用。 此方法涉及用戶在搜索欄中輸入特定術(shù)語或短語,期望搜索引擎返回與這些確切關(guān)鍵字匹配的結(jié)果。
雖然關(guān)鍵字搜索對于簡化信息檢索非常有價值,但它也有其局限性。 主要缺點之一在于它對詞匯匹配的依賴。 關(guān)鍵字搜索將查詢中的每個單詞視為獨立的實體,通常會導(dǎo)致結(jié)果可能與用戶的意圖不完全一致。 此外,不明確的查詢可能會產(chǎn)生不同的解釋,從而導(dǎo)致混合或不準(zhǔn)確的結(jié)果。
當(dāng)處理上下文嚴(yán)重影響含義的語言時,會出現(xiàn)另一個關(guān)鍵限制。 詞語的含義在很大程度上取決于具體情況。 單獨使用關(guān)鍵字可能無法正確捕獲這些查詢,這可能會導(dǎo)致誤解。
隨著我們的數(shù)字環(huán)境不斷發(fā)展,我們對更精致、更直觀的搜索體驗的期望也在不斷變化。 這為語義搜索的出現(xiàn)鋪平了道路,語義搜索是一種旨在超越傳統(tǒng)基于關(guān)鍵字的方法的局限性的方法。 通過關(guān)注搜索查詢的意圖和上下文含義,語義搜索為關(guān)鍵字搜索帶來的挑戰(zhàn)提供了一種有前景的解決方案。
如上面的圖片所示,如果我們通過 keyword 來進行搜索,我們想搜索的是 apple 水果,但是我們最終可能得到是關(guān)于 apple(蘋果)公司的有關(guān)信息。其實它并不是我們想要的。
什么是語義搜索?
語義搜索是在互聯(lián)網(wǎng)上搜索內(nèi)容的高級方式。 它不僅僅是匹配單詞,而是理解你真正在尋找的內(nèi)容。 它能找出你的話背后的含義以及它們之間的關(guān)系。
這項技術(shù)使用人工智能和理解人類語言等技術(shù)。 幾乎就像它在說人類一樣! 它著眼于大局,檢查具有相似含義的單詞以及與你所問問題相關(guān)的其他想法。
基本上,語義搜索可以幫助你從互聯(lián)網(wǎng)上的大量內(nèi)容中準(zhǔn)確獲取所需的內(nèi)容。 這就像與一個超級聰明的搜索引擎交談,它不僅可以獲取你所說的單詞,還可以獲取你真正想要查找的內(nèi)容。 這使得它非常適合做研究、查找信息,甚至獲得符合你興趣的建議。
語義搜索的好處
- 精確度和相關(guān)性:語義搜索通過理解用戶意圖和上下文提供高度相關(guān)的結(jié)果。
- 自然語言理解:它理解復(fù)雜的查詢,使自然語言交互更加有效。
- 消除歧義:它解決歧義查詢,根據(jù)用戶行為和上下文提供準(zhǔn)確的結(jié)果。
- 個性化:語義搜索從用戶行為中學(xué)習(xí)以獲取定制結(jié)果,從而隨著時間的推移提高相關(guān)性。
Elastic Search 中的語義搜索
Elastic Search 提供語義搜索,重點關(guān)注搜索查詢的含義和上下文,而不僅僅是匹配關(guān)鍵字。 它使用自然語言處理(NLP)和向量搜索來實現(xiàn)這一目標(biāo)。 Elastic 有自己的預(yù)訓(xùn)練表示模型,稱為 Elastic Learned Sparse EncodeR (ELSER)。
在進入 ELSER 之前,讓我們更多地了解 NLP 和向量搜索。
自然語言處理(NLP)
自然語言處理是人工智能的一個分支,致力于使計算機能夠以有價值且有用的方式理解、解釋和生成人類語言。
NLP 涉及一組允許計算機處理和分析大量自然語言數(shù)據(jù)的技術(shù)和算法。 這包括以下任務(wù):
- 文本理解:NLP 幫助計算機理解一篇文章的內(nèi)容。 它可以找出文本中的重要內(nèi)容,例如姓名、關(guān)系和感受。
- 文本處理:這涉及將句子分解為單詞或短語、將單詞簡化為其基本形式以及識別句子的不同部分等任務(wù)。
- 命名實體識別 (NER):NLP 可以識別文本中的特殊事物,例如人名、地名或組織名稱。 這有助于理解正在討論的內(nèi)容。
向量搜索
向量搜索是一種涉及將數(shù)據(jù)點或信息表示為多維空間中的向量的技術(shù)。 空間的每個維度代表文檔或數(shù)據(jù)點的不同特征或?qū)傩浴?/p>
在這個向量空間中,相似的文檔或數(shù)據(jù)點彼此距離更近。 這允許有效的基于相似性的搜索。 例如,如果你正在搜索與給定文檔相似的文檔,則可以計算表示文檔的向量之間的相似度以查找最接近的匹配項。
向量搜索廣泛用于各種應(yīng)用,包括:
- 推薦系統(tǒng):它有助于根據(jù)用戶的喜好向他們推薦類似的項目。
- 信息檢索:它允許在大型語料庫中查找相似的文檔。
- 異常檢測:它有助于識別異?;虍惓?shù)據(jù)點。
NLP 與向量搜索的工作原理
1)Vector embedding:
????????在此步驟中,NLP 涉及將文本數(shù)據(jù)轉(zhuǎn)換為數(shù)值向量。 使用詞嵌入等技術(shù)將文本中的每個單詞轉(zhuǎn)換為高維向量
2.相似度分?jǐn)?shù):
????????引擎將向量化查詢與向量化文檔進行比較以確定它們的相似性。
3)人工神經(jīng)網(wǎng)絡(luò)算法:
????????近似最近鄰 (ANN) 算法可有效查找高維空間中的近似最近鄰。
4)查詢處理:
????????用戶的查詢經(jīng)歷與文檔類似的處理以生成向量表示。
5)距離計算:
????????引擎計算向量化查詢和文檔之間的距離(相似度分?jǐn)?shù))。
6)最近鄰搜索:
????????引擎查找嵌入最接近查詢嵌入的文檔。
7)排名結(jié)果:
????????結(jié)果根據(jù)相似度分?jǐn)?shù)進行排名。
ELSER
ELSER 是一個經(jīng)過專門設(shè)計的預(yù)訓(xùn)練模型,可以出色地理解上下文和意圖,而無需進行復(fù)雜的微調(diào)。 ELSER 目前僅適用于英語,其開箱即用的適應(yīng)性使其成為各種自然語言處理任務(wù)的寶貴工具。 它對稀疏向量表示的利用提高了處理文本數(shù)據(jù)的效率。 ELSER 的詞匯表中包含約 30,000 個術(shù)語,通過用上下文相關(guān)的對應(yīng)項替換術(shù)語來優(yōu)化查詢,確保精確而全面的搜索結(jié)果。
讓我們深入探討如何利用 ELSER 的潛力來增強 Elasticsearch 中的搜索能力。你可以參考文章 “Elasticsearch:部署 ELSER - Elastic Learned Sparse EncoderR” 來配置自己的 ELSER。
第 1 步:創(chuàng)建具有所需映射的索引
- 在 Elasticsearch 中,“索引 (index)” 是指具有共同特征或?qū)儆谙嗨祁悇e的文檔的集合。 它類似于關(guān)系數(shù)據(jù)庫中的表或其他一些 NoSQL 數(shù)據(jù)庫中的類型。 索引中的每個文檔都分配有一個唯一標(biāo)識符,并且包含 JSON 格式的結(jié)構(gòu)化數(shù)據(jù)。
- 定義索引的映射,該映射將包含模型根據(jù)您的輸入生成的 token。 該索引必須有一個 rank_features 字段類型的字段來索引 ELSER 輸出。
PUT <index-name>
{
"mappings": {
"properties": {
"ml.tokens": {
"type": "rank_features"
},
"name": {
"type": "text"
}
}
}
}
第 2 步:使用推理處理器創(chuàng)建攝取管道
- Elasticsearch 中的攝取管道使您能夠在索引之前對數(shù)據(jù)應(yīng)用各種轉(zhuǎn)換。 這些轉(zhuǎn)換包括字段刪除、文本值提取和數(shù)據(jù)豐富等任務(wù)。
- 管道包含一組稱為處理器的可定制任務(wù)。 這些處理器以順序方式運行,對傳入文檔實施特定修改。使用推理處理器創(chuàng)建攝取管道,以使用 ELSER 對正在攝取的數(shù)據(jù)進行推理。
PUT _ingest/pipeline/<pipeline-name>
{
"processors": [
{
"inference": {
"model_id": ".elser_model_1",
"target_field": "ml",
"field_map": {
"text": "text_field"
},
"inference_config": {
"text_expansion": {
"results_field": "tokens"
}
}
}
}
]
}
第 3 步:將數(shù)據(jù)添加到索引
- 索引映射和攝取管道已設(shè)置,現(xiàn)在我們可以開始向索引添加數(shù)據(jù)。
- 攝取管道作用于傳入數(shù)據(jù)并將相關(guān)標(biāo)記添加到文檔中
curl -X POST 'https://<url>/<index-name>/_doc?pipeline=<ingest-pipeline-name'
-H 'Content-Type: application/json'
-H 'Authorization: ApiKey <Replace_with_created_API_key>'
-d '{
"name" : "How to Adapt Crucial Conversations to Global Audiences"
}'
攝取管道作用于傳入數(shù)據(jù)并將相關(guān) token 添加到文檔中:
{
"name" : "How to Adapt Crucial Conversations to Global Audiences",
"ml":{
"tokens": {
"voice": 0.057680283,
"education": 0.18481751,
"questions": 0.4389099,
"adaptation": 0.6029656,
"language": 0.4136539,
"quest": 0.082507774,
"presentation": 0.035054933,
"context": 0.2709603,
"talk": 0.17953876,
"communication": 1.0619682,
"international": 0.38651025,
"different": 0.25769454,
"conversation": 1.03593,
"train": 0.021380302,
"audience": 0.97641367,
"development": 0.33928272,
"adapt": 0.90020984,
"certification": 0.45675382,
"cultural": 0.63132435,
"distraction": 0.38943478,
"success": 0.09179027,
"cultures": 0.82463825,
"essay": 0.2730616,
"institute": 0.21582486,
},
"model_id":".elser_model_1"
}
}
第 4 步:執(zhí)行語義搜索
- 使用 text expansion 查詢來執(zhí)行語義搜索。 提供查詢文本和 ELSER 模型 ID。
- 文本擴展查詢使用自然語言處理模型將查詢文本轉(zhuǎn)換為 token 權(quán)重對列表,然后將其用于針對 rank_features 字段的查詢。
GET <index-name>/_search
{
"query":{
"text_expansion":{
"ml.tokens":{
"model_id":".elser_model_1",
"model_text":<query_text>
}
}
}
}
第 5 步:將語義搜索與其他查詢結(jié)合起來
- 我們還可以將 text_expansion 與復(fù)合查詢中的其他查詢結(jié)合起來,以獲得更精細的結(jié)果。
GET my-index/_search
{
"query": {
"bool": {
"should": [
{
"text_expansion": {
"ml.tokens": {
"model_text": <query_text>,
"model_id": ".elser_model_1",
}
}
},
{
"query_string": {
"query": <query_text>,
}
}
]
}
}
}
我們還可以將 text_expansion 與復(fù)合查詢中的其他查詢結(jié)合起來,以獲得更精細的結(jié)果。
與 Elasticsearch 中的其他查詢相比,text_expansion 查詢通常會產(chǎn)生更高的分?jǐn)?shù)。 我們可以使用 boost 參數(shù)調(diào)整相關(guān)性分?jǐn)?shù)。
更多閱讀:
-
Elasticsearch:部署 ELSER - Elastic Learned Sparse EncoderR
-
Elasticsearch:使用 ELSER 進行語義搜索文章來源:http://www.zghlxwxcb.cn/news/detail-718119.html
-
Elasticsearch:使用 ELSER 釋放語義搜索的力量:Elastic Learned Sparse EncoderR文章來源地址http://www.zghlxwxcb.cn/news/detail-718119.html
到了這里,關(guān)于Elasticsearch:使用 Elasticsearch 進行語義搜索的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!