Github13K!相似搜索百寶箱,文本匹配入門必備!
面筋地址:https://github.com/km1994/NLP-Interview-Notes
個人筆記:https://github.com/km1994/nlp_paper_study



0. 一個神奇的相似搜索工具

Faiss:集眾多算法于一身的相似搜索工具箱 Github Star:12.8K 特點:算法豐富,安全可靠,底層C++實現(xiàn),提供完整Python接口;部分算法支持GPU加速 項目連接: https://github.com/facebookresearch/faiss 使用文檔: https://faiss.ai/
# CPU-only version
$ conda install -c pytorch faiss-cpu
# GPU(+CPU) version
$ conda install -c pytorch faiss-gpu
# CPU-only version
$ pip install faiss-cpu -i https://pypi.douban.com/simple
# GPU(+CPU) version
$ pip install faiss-gpu -i https://pypi.douban.com/simple
1. Faiss使用教程

IndexFlatl2:暴力搜索
import faiss
d = 768 # embedding 維度
# 構(gòu)建 IndexFlatL2 索引,它是最簡單的索引類型,只執(zhí)行強力L2距離搜索
faiss_l2_index = faiss.IndexFlatL2(d)
print(faiss_l2_index.is_trained) # True
# 在索引中添加原始特征
# faq_texts_emb 是特征向量,維度 [6417, 768]
faiss_l2_index.add(faq_texts_emb)
print(faiss_l2_index.ntotal) # 查看數(shù)據(jù)規(guī)模:6417
# 查找 k 近鄰
k = 3
q = '我咋沒收到交費的通知呢?'
q_emb = bc.encode([q]) # 獲得特征
# dis_res:距離矩陣,由小到大排序
# idx_res:數(shù)據(jù)索引id
dis_res, idx_res = faiss_l2_index.search(q_emb, k)
print(idx_res.shape, dis_res.shape) # [1,3], [1,3]
print(idx_res) # [[107, 111, 75]]
print(dis_res) # [[18.602684 20.919521 21.184694]]
# labels[i] 先映射到訓練集文本對應(yīng)的真實意圖 label_id,再轉(zhuǎn)換為 label 標簽
print(list(id2name[labels[i]] for i in idx_res[0]))
"""['未收到催費短信', '未收到催費短信', '未收到催費短信']"""
IndexPQ:乘積量化
# m: 特征拆分子空間的數(shù)量
m, d = 8, 768
# 每一個子空間分配的bit大小
n_bits = 8
# 創(chuàng)建乘積量化索引
faiss_pq_index = faiss.IndexPQ(d, m, n_bits)
# train 階段
faiss_pq_index.train(faq_texts_emb)
# add 階段
faiss_pq_index.add(faq_texts_emb)
k = 3
q = '我妹夫家的租戶不交電費,這樣子會影響我妹夫的信用不?'
q_emb = bc.encode([q])
dis_res, idx_res = faiss_pq_index.search(q_emb, k)
print(idx_res.shape, dis_res.shape) # [1,3], [1,3]
print(idx_res) # [[2563 2575 2547]]
print(dis_res) # [[11.660806 11.660806 11.660806]]
print(list(id2name[labels[i]] for i in idx_res[0]))
"""['租戶不交電費是否影響戶主信用', '租戶不交電費是否影響戶主信用', '租戶不交電費是否影響戶主信用']"""
2. Faiss 項目總結(jié)
如果你的實驗或項目中涉及相似匹配任務(wù),不妨嘗試一下Faiss框架,畢竟FaceBook自家產(chǎn)品都在用,質(zhì)量還是有保障滴。如果通過調(diào)用接口,順便弄懂了算法原理,恭喜你,在檢索匹配領(lǐng)域你離成為巨佬又近了一步!
深度學習資源下載

2021年,我終于決定入門GCN 動手學正則表達式(含Python代碼實踐) 萬萬沒想到,BERT學會寫SQL了 當卷積網(wǎng)絡(luò)遇上事件檢測 (經(jīng)典論文解讀) 程序員們,想進互聯(lián)網(wǎng)大廠的看過來
參 考 文 獻

原創(chuàng)不易,有收獲的幫忙點擊點贊、分享、在看吧??
評論
圖片
表情
