[英]Saving BERT Sentence Embedding
我目前正在從事信息檢索任務。 我正在使用 SBERT 執行語義搜索。 我已經按照這里的文檔
我使用的 model
model = SentenceTransformer('sentence-transformers/paraphrase-multilingual-mpnet-base-v2')
大綱是
data = ['A man is eating food.',
'A man is eating a piece of bread.',
'The girl is carrying a baby.',
'A man is riding a horse.',
'A woman is playing violin.',
'Two men pushed carts through the woods.',
'A man is riding a white horse on an enclosed ground.',
'A monkey is playing drums.',
'A cheetah is running behind its prey.'
]
queries = ['A man is eating pasta.']
query_embedding = model.encode(query)
doc_embedding = model.encode(data)
編碼 function 輸出 numpy.ndarray 就像model.encode(data) 的輸出
similarity = util.cos_sim(query_embedding, doc_embedding)
tensor([[0.4389, 0.4288, 0.6079, 0.5571, 0.4063, 0.4432, 0.5467, 0.3392, 0.4293]])
它工作得很好而且很快。 但當然它只是使用少量的語料庫。 當使用大量語料庫時,編碼工作需要時間。
注意:query的編碼不需要時間,因為它只有一個句子,但是語料庫的編碼需要一些時間
那么,問題是我們可以將 doc_embedding 保存在本地,然后再次使用它嗎? 尤其是在使用大型語料庫時
是否有任何內置的類/功能可以從變壓器中完成?
將它們保存為泡菜文件並稍后加載它們 = ]
import pickle
with open('doc_embedding.pickle', 'wb') as pkl:
pickle.dump(doc_embedding, pkl)
with open('doc_embedding.pickle', 'rb') as pkl:
doc_embedding = pickle.load(pkl)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.