我一直在尝试运行txtai,希望能在ElasticSearch中实现语义搜索。我的主要目标是能够使用它在帮助台系统中查询票证,并返回与我的查询类似的票证。
示例查询:我应该使用什么操作系统?
这将返回一个结果列表(类似于在输入问题标题时stackoverflow所做的操作)。
在使用txtai时,我注意到它的速度非常慢。请求一个结果,我的响应时间几乎是10秒,而ElasticSearch返回50个结果的“瞬时”速度。也许在这应该如何执行的问题上,我遗漏了什么。
我将分享我目前正在使用的测试代码:
from txtai.pipeline import Similarity
from elasticsearch import Elasticsearch, helpers
# Connect to ES instance
es = Elasticsearch(hosts=["http://localhost:9200"], timeout=60, retry_on_timeout=True)
def ranksearch(query, limit):
results = [text for _, text in search(query, limit * 10)]
return [(score, results[x]) for x, score in similarity(query, results)][:limit]
def search(query, limit):
query = {
"size": limit,
"query": {
"query_string": {"query": query}
}
}
results = []
for result in es.search(index="articles", body=query)["hits"]["hits"]:
source = result["_source"]
results.append((min(result["_score"], 18) / 18, source["title"]))
return results
similarity = Similarity("valhalla/distilbart-mnli-12-3")
limit = 1
query = "Bad News"
print(ranksearch(query, limit))
如有任何帮助,我们不胜感激。
1条答案
按热度按时间cs7cruho1#
以下是GitHub上一次讨论的摘要。完整的讨论可在此处找到:https://github.com/neuml/txtai/issues/319
从我在那里发布的帖子中:
GPU确实带来了巨大的不同,但您可以使用CPU获得不错的运行时性能。
对于T410来说,相似性管道可能有点重。即使是最小的型号也只有1 GB,这仍然是一个大型号。这似乎是一个较小的嵌入相似性模型的用例。在精确度上会有一个折衷,但它可能是性能与精确度的正确组合。
下面的示例代码修改了您的示例,以使用嵌入模型计算相似度。作为参考,这款机型为90MB。