语义是基于tex2vec文本向量化模型,通过计算文本向量之间的距离来实现的。向量搜索使用faiss来进行,搜索的结果通过设置相似度的阈值来判断是否属于某个意图,为了减少输出结果的错误率,建议把阈值尽量设置高一些,避免乱推荐/乱弹,但也不是越高越好,太高了就不出结果了,在严肃场景,当然也是可以不出结果的,这个需要根据具体的意图来进行设置。根据经验,通常建议设置阈值为0.9以上。
语义搜索基于faiss搜索来实现,通过sbert计算两个句子之间的相似度,用于识别意图。中文模型建议使用text2vec-base-chinese-sentence,英文模型建议使用distilbert-base-nli-mean-tokens,英文模型也支持中文,但效果不及专门的中文模型,同时英文模型也支持泰语、菲利宾语、阿拉伯语等各种语言,当然效果通常不及专门训练的对应语言的模型。
首先,创建faiss索引:
if language == "zh":
model = SentenceTransformer('text2vec-base-chinese-sentence')
elif language == "en":
model = SentenceTransformer('distilbert-base-nli-mean-tokens')
encoded_data = model.encode(data) #data 为你的数据list,如:相似问列表。
index = faiss.IndexIDMap(faiss.IndexFlatIP(768))
index.add_with_ids(encoded_da

本文介绍了如何使用tex2vec和faiss进行语义搜索,通过计算文本向量的相似度来识别意图。提到中文和英文模型的选择,以及如何创建和搜索索引,以减少错误率并优化阈值设置。
最低0.47元/天 解锁文章
4376

被折叠的 条评论
为什么被折叠?



