譯者 | 李睿
審校 | 重樓
為了設定場景,假設有一系列關于各種技術主題的文本,并希望查找與“機器學習” (Machine Learning)相關的信息。接下來將研究關鍵字搜索、相似性搜索和語義搜索如何提供不同程度的深度和理解,從簡單的關鍵字匹配到識別相關概念和場景。
首先看看程序使用的標準代碼組件。
Python import os import re from whoosh.index import create_in from whoosh.fields import Schema, TEXT from whoosh.qparser import QueryParser from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity from transformers import pipeline import numpy as np
在這個塊中導入了以下必要的庫:
Python # Sample documents used for demonstrating all three search techniques documents = [ "Machine learning is a field of artificial intelligence that uses statistical techniques.", "Natural language processing (NLP) is a part of artificial intelligence that deals with the interaction between computers and humans using natural language. ", "Deep learning models are a subset of machine learning algorithms that use neural networks with many layers.", "AI is transforming the world by automating tasks, providing insights through data analysis, and enabling new technologies like autonomous vehicles and advanced robotics. ", "Natural language processing can be challenging due to the complexity and variability of human language. ", "The application of machine learning in healthcare is revolutionizing the way diseases are diagnosed and treated.", "Autonomous vehicles rely heavily on AI and machine learning to navigate and make decisions.", "Speech recognition technology has advanced considerably thanks to deep learning models. " ]
定義一個示例文檔列表,其中包含與人工智能、機器學習和自然語言處理中的各種主題相關的文本。
Python def highlight_term(text, term): return re.sub(f"({term})", r'/033[1;31m/1/033[0m', text, flags=re.IGNORECASE)
用于美化輸出,以突出顯示文本中的搜索詞。
將搜索查詢與文檔中找到的精確或部分關鍵字相匹配的傳統方法。
嚴重依賴于精確的詞匹配和簡單的查詢操作符(AND、OR、NOT)。
由于搜索查詢是“機器學習”(Machine Learning),因此關鍵字搜索會查找精確的文本匹配,并且只返回包含“機器學習”(Machine Learning)的文本。一些將被返回的文本示例是“機器學習正在改變許多行業。”“最近開設了一門機器學習的課程。”
Python # Function for Keyword Search using Whoosh def keyword_search(query_str): schema = Schema(content=TEXT(stored=True)) if not os.path.exists("index"): os.mkdir("index") index = create_in("index", schema) writer = index.writer() for doc in documents: writer.add_document(content=doc) writer.commit() with index.searcher() as searcher: query = QueryParser("content", index.schema).parse(query_str) results = searcher.search(query) highlighted_results = [(highlight_term(result['content'], query_str), result.score) for result in results] return highlighted_results
使用了Whoosh庫來執行關鍵字搜索。
Schema和TEXT采用單個字段內容定義模式。
將在本文后面檢查關鍵字搜索輸出和其他搜索技術。
該方法根據相關單詞或主題的存在等特征,將提供的文本與其他文本進行比較,從而找到與搜索查詢相似的文本。
回到之前相同的搜索查詢“機器學習”,相似度搜索將返回概念上類似的文本,例如“醫療保健中的人工智能應用使用機器學習技術”和“預測建模通常依賴于機器學習”。
Python # Function for Similarity Search using Scikit-learn def similarity_search(query_str): vectorizer = TfidfVectorizer() tfidf_matrix = vectorizer.fit_transform(documents) query_vec = vectorizer.transform([query_str]) similarity = cosine_similarity(query_vec, tfidf_matrix) similar_docs = similarity[0].argsort()[-3:][::-1] # Top 3 similar documents similarities = similarity[0][similar_docs] highlighted_results = [(highlight_term(documents[i], query_str), similarities[idx]) for idx, i in enumerate(similar_docs)] return highlighted_results
使用Scikit-learn庫編寫了一個函數來執行相似性搜索。
現在進入了強大搜索技術的領域。此方法理解搜索詞的含義/場景,并使用該概念返回文本,即使沒有直接提到搜索詞。
同樣的搜索查詢“機器學習”(Machine Learning),當與語義搜索一起應用時,會產生與機器學習概念相關的文本,例如“人工智能和數據驅動的決策正在改變行業”和“神經網絡是許多人工智能系統的。”
Python # Function for Semantic Search using Transformersdef semantic_search(query_str): semantic_searcher = pipeline("feature-extraction", model="distilbert-base-uncased") query_embedding = semantic_searcher(query_str)[0][0] def get_similarity(query_embedding, doc_embedding): return cosine_similarity([query_embedding], [doc_embedding])[0][0] doc_embeddings = [semantic_searcher(doc)[0][0] for doc in documents] similarities = [get_similarity(query_embedding, embedding) for embedding in doc_embeddings] sorted_indices = np.argsort(similarities)[-3:][::-1] highlighted_results = [(highlight_term(documents[i], query_str), similarities[i]) for i in sorted_indices] return highlighted_results
使用Hugging Face transformers庫執行語義搜索的函數。
在semantic_searcher = pipeline("feature-extraction", model="distilbert-base-uncased")代碼片段中,有很多操作在進行。
既然已經了解了各種搜索技術的場景,并且已經設置了文檔以進行搜索,現在查看一下基于每個搜索技術的搜索查詢的輸出。
Python # Main execution if __name__ == "__main__": query = input("Enter your search term: ") print("/nKeyword Search Results:") keyword_results = keyword_search(query) for result, score in keyword_results: print(f"{result} (Score: {score:.2f})") print("/nSimilarity Search Results:") similarity_results = similarity_search(query) for result, similarity in similarity_results: print(f"{result} (Similarity: {similarity * 100:.2f}%)") print("/nSemantic Search Results:") semantic_results = semantic_search(query) for result, similarity in semantic_results: print(f"{result} (Similarity: {similarity * 100:.2f}%)")
現在使用搜索詞“機器學習”(Machine Learning)和下面的搜索結果圖像來搜索文檔。
搜索結果中的亮點:
(1)highlighted_results函數幫助高亮搜索詞。
(2)相似性搜索和語義搜索只返回3個結果,這是因為其代碼將這兩種搜索技術的搜索結果限制為3個。
(3)關鍵詞搜索使用TF-IDF根據文檔中相對于查詢的術語出現的頻率和重要性來計算分數。
(4)相似性搜索使用向量化和余弦相似性來度量文檔在向量空間中與查詢的相似程度。
(5)語義搜索使用來自轉換器模型的嵌入和余弦相似度來捕獲文檔與查詢的語義和相關性。
(6)需要注意,由于語義搜索的強大功能,它檢索了與自然語言處理相關的文本,因為自然語言處理在的場景中與機器學習更為接近。
現在使用其他搜索詞“Artificially Intelligent”和“Artificial Intelligence”的搜索結果(需要注意,“Artificially”的拼寫錯誤是故意的),并討論結果。
搜索結果中的亮點:
(1)搜索“人工智能”(Artificially Intelligent),由于缺乏精確或部分匹配的術語,關鍵詞搜索沒有結果。
(2)由于向量表示或相似度不匹配,相似度搜索的結果為零。
(3)語義搜索可以有效地找到場景相關的文檔,顯示出理解和匹配概念的能力,而不僅僅是精確的單詞。
(4)在第二次搜索中,拼寫錯誤的“人工智能”(Artificial Intelligence)沒有正確地產生關鍵字搜索結果,但由于匹配的情況,其中一個文本產生了相似性得分。在智能、語義搜索方面,像往常一樣,從文檔中檢索到場景匹配的文本。
現在已經了解了各種搜索技術的性能,以下了解一些關鍵要點:
(1)搜索方法的正確選擇應取決于任務的要求。對任務進行徹底的分析,并插入正確的搜索方法以獲得最佳性能。
(2)使用關鍵字搜索進行簡單、直接的術語匹配。
(3)當需要查找具有輕微術語變化但仍然基于關鍵字匹配的文檔時,可以使用相似度搜索。
(4)對需要深入理解內容的任務使用語義搜索,例如在處理各種術語或需要捕獲查詢的底層含義時。
(5)還可以考慮將這些方法結合起來,以實現良好的平衡,利用每種方法的優勢來提高總體性能。
(6)每種搜索技術都有進一步優化的余地,本文沒有對此進行介紹。
以下參考文獻的文本已被這個文檔用于本文的搜索:
原文標題:Unlocking the Power of Search: Keywords, Similarity, and Semantics Explained,作者:Pavan Vemuri
本文鏈接:http://www.tebozhan.com/showinfo-26-100739-0.html解鎖搜索的力量:關鍵詞、相似性和語義解釋
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com