丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能開發(fā)者 正文
發(fā)私信給AI研習(xí)社-譯站
發(fā)送

0

FAISS + SBERT實(shí)現(xiàn)的十億級語義相似性搜索

本文作者: AI研習(xí)社-譯站 2020-11-14 10:30
導(dǎo)語:這是一個(gè)基本的實(shí)現(xiàn),在語言模型部分和索引部分仍然需要做很多工作。

譯者:AI研習(xí)社(FIONAbiubiu

雙語原文鏈接:Billion-scale semantic similarity search with FAISS+SBERT


FAISS + SBERT實(shí)現(xiàn)的十億級語義相似性搜索

介紹

語義搜索是一種關(guān)注句子意義而不是傳統(tǒng)的關(guān)鍵詞匹配的信息檢索系統(tǒng)。盡管有許多文本嵌入可用于此目的,但將其擴(kuò)展到構(gòu)建低延遲api以從大量數(shù)據(jù)集合中獲取數(shù)據(jù)是很少討論的。在本文中,我將討論如何使用SOTA語句嵌入(語句轉(zhuǎn)換器)和FAISS來實(shí)現(xiàn)最小語義搜索引擎。

句子Transformers

它是一個(gè)框架或一組模型,給出句子或段落的密集向量表示。這些模型是transformer網(wǎng)絡(luò)(BERT、RoBERTa等),它們專門針對語義文本相似性的任務(wù)進(jìn)行了微調(diào),因?yàn)锽ERT在這些任務(wù)中執(zhí)行得不是很好。下面給出了不同模型在STS基準(zhǔn)測試中的性能。

FAISS + SBERT實(shí)現(xiàn)的十億級語義相似性搜索

 圖片來源:句子 transformers

我們可以看到句子transformer模型比其他模型有很大的優(yōu)勢。

但是如果你用代碼GLUE來看看排行榜,你會(huì)看到很多的模型超過90。為什么我們需要句子transformers?

在這些模型中,語義文本相似度被視為一個(gè)回歸任務(wù)。這意味著,每當(dāng)我們需要計(jì)算兩個(gè)句子之間的相似度得分時(shí),我們需要將它們一起傳遞到模型中,然后模型輸出它們之間的數(shù)值分?jǐn)?shù)。雖然這對于基準(zhǔn)測試很有效,但是對于實(shí)際的用例來說,它的伸縮性很差,原因如下。

1.當(dāng)你需要搜索大約10k個(gè)文檔時(shí),你需要進(jìn)行10k個(gè)獨(dú)立的推理計(jì)算,不可能單獨(dú)計(jì)算嵌入量而只計(jì)算余弦相似度。見作者的解釋。
2.最大序列長度(模型一次可以接受的單詞/標(biāo)記的總數(shù))在兩個(gè)文檔之間共享,這會(huì)導(dǎo)致的表示的含義由于分塊而被稀釋

FAISS

Faiss是一個(gè)基于C++的庫,由FacebookAI構(gòu)建,在Python中有完整的包裝器,用于索引矢量化數(shù)據(jù)并對其進(jìn)行有效的搜索。Faiss基于以下因素提供了不同的索引。

  • 搜索時(shí)間

  • 搜索質(zhì)量

  • 每個(gè)索引向量使用的內(nèi)存

  • 訓(xùn)練時(shí)間

  • 無監(jiān)訓(xùn)練需要外部數(shù)據(jù)

因此,選擇合適的指數(shù)將是這些因素之間的權(quán)衡。

加載模型并對數(shù)據(jù)集執(zhí)行推理

首先,讓我們安裝并加載所需的庫

!pip install faiss-cpu
!pip install -U sentence-transformersimport numpy as np
import torch
import os
import pandas as pd
import faiss
import time
from sentence_transformers import SentenceTransformer

加載一個(gè)包含一百萬個(gè)數(shù)據(jù)點(diǎn)的數(shù)據(jù)集

我使用了一個(gè)來自Kaggle的數(shù)據(jù)集,其中包含了17年來出版的新聞標(biāo)題。

df=pd.read_csv("abcnews-date-text.csv")
data=df.headline_text.to_list()

加載預(yù)訓(xùn)練模型并且進(jìn)行推斷

model = SentenceTransformer('distilbert-base-nli-mean-tokens')encoded_data = model.encode(data)

為數(shù)據(jù)集編制索引

我們可以根據(jù)我們的用例通過參考指南來選擇不同的索引選項(xiàng)。

讓我們定義索引并向其添加數(shù)據(jù)

index = faiss.IndexIDMap(faiss.IndexFlatIP(768))index.add_with_ids(encoded_data, np.array(range(0, len(data))))

序列化索引

faiss.write_index(index, 'abc_news')

將序列化的索引導(dǎo)出到托管搜索引擎的任何計(jì)算機(jī)中

反序列化索引

index = faiss.read_index('abc_news')

執(zhí)行語義相似性搜索

讓我們首先為搜索構(gòu)建一個(gè)包裝函數(shù)

def search(query):
  t=time.time()
  query_vector = model.encode([query])
  k = 5
  top_k = index.search(query_vector, k)
  print('totaltime: {}'.format(time.time()-t))
  return [data[_id] for _id in top_k[1].tolist()[0]]

執(zhí)行搜索

query=str(input())
results=search(query)
print('results :')
for result in results:
  print('\t'

CPU中的結(jié)果

現(xiàn)在讓我們看看搜索結(jié)果和響應(yīng)時(shí)間

FAISS + SBERT實(shí)現(xiàn)的十億級語義相似性搜索

只需1.5秒,就可以在僅使用CPU后端的百萬文本文檔的數(shù)據(jù)集上執(zhí)行基于意義的智能搜索。

GPU中的結(jié)果

首先讓我們關(guān)閉CPU版本的Faiss并重啟GPU版本

!pip uninstall faiss-cpu
!pip install faiss-gpu

之后執(zhí)行相同步驟,但是最后將索引移到GPU上。

res = faiss.StandardGpuResources()
gpu_index = faiss.index_cpu_to_gpu(res, 0, index)

現(xiàn)在讓我們轉(zhuǎn)移這個(gè)搜索方法并用GPU執(zhí)行這個(gè)搜索

FAISS + SBERT實(shí)現(xiàn)的十億級語義相似性搜索

很好,你可以在0.02秒內(nèi)得到結(jié)果,使用GPU(在這個(gè)實(shí)驗(yàn)中使用了Tesla T4),它比CPU后端快75倍

但是為什么我不能僅僅序列化編碼數(shù)據(jù)的NumPy數(shù)組而不是索引它們呢?如果我能等幾秒鐘的話,使用余弦相似性呢?

因?yàn)镹umPy沒有序列化函數(shù),因此唯一的方法是將其轉(zhuǎn)換為JSON,然后保存JSON對象,但是大小將增加五倍。例如,在768維向量空間中編碼的一百萬個(gè)數(shù)據(jù)點(diǎn)具有正常的索引,大約為3GB,將其轉(zhuǎn)換為JSON將使其成為15GB,而普通機(jī)器無法保存它的RAM。因此,每次執(zhí)行搜索時(shí),我們都要運(yùn)行一百萬次計(jì)算推理,這是不實(shí)際的。

最后的想法

這是一個(gè)基本的實(shí)現(xiàn),在語言模型部分和索引部分仍然需要做很多工作。有不同的索引選項(xiàng),應(yīng)該根據(jù)用例、數(shù)據(jù)大小和可用的計(jì)算能力選擇正確的索引選項(xiàng)。另外,這里使用的句子嵌入只是對一些公共數(shù)據(jù)集進(jìn)行了微調(diào),在特定領(lǐng)域的數(shù)據(jù)集上對它們進(jìn)行微調(diào)可以改進(jìn),從而提高搜索結(jié)果。

參考文獻(xiàn)

[1] Nils Reimers and Iryna Gurevych. “Making Monolingual Sentence Embeddings Multilingual using Knowledge Distillation.” arXiv (2020): 2004.09813.

[2]Johnson, Jeff and Douze, Matthijs and J{\’e}gou, Herv{\’e}. “Billion-scale similarity search with GPUs” arXiv preprint arXiv:1702.08734.



AI研習(xí)社是AI學(xué)術(shù)青年和AI開發(fā)者技術(shù)交流的在線社區(qū)。我們與高校、學(xué)術(shù)機(jī)構(gòu)和產(chǎn)業(yè)界合作,通過提供學(xué)習(xí)、實(shí)戰(zhàn)和求職服務(wù),為AI學(xué)術(shù)青年和開發(fā)者的交流互助和職業(yè)發(fā)展打造一站式平臺,致力成為中國最大的科技創(chuàng)新人才聚集地。

如果,你也是位熱愛分享的AI愛好者。歡迎與譯站一起,學(xué)習(xí)新知,分享成長。

FAISS + SBERT實(shí)現(xiàn)的十億級語義相似性搜索

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

FAISS + SBERT實(shí)現(xiàn)的十億級語義相似性搜索

分享:
相關(guān)文章

知情人士

AI研習(xí)社(yanxishe.com)譯站頻道,傳播前沿人工智能知識,讓語言不再成為學(xué)習(xí)知識的門檻。(原雷鋒字幕組)
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個(gè)人簡介
為了您的賬戶安全,請驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說