小熊回收站|txtai:基于 Transformer 的人工智能搜索引擎
自然语言处理领域正在迅速发展 , 出现了许多新的进展 。 大规模的通用语言模型是一种令人兴奋的新能力 , 使我们能够在有限的计算和人力的情况下快速添加惊人的功能 。 创新仍在继续 , 新的模型和进步似乎每周都有 。 本文将对 txtai 进行介绍 , 这是一个基于人工智能的搜索引擎 , 可以在任何应用程序中实现基于自然语言理解(Natural Language Understanding , NLU)的搜索 。
txtai 介绍txtai 在文本部分上建立了一个基于人工智能的索引 。 txtai 支持建立文本索引来执行相似度搜索 , 并创建基于抽取(extractive)的问答系统 。 tatai 是开源的 , 可以在 github 上获得:
txtai 是构建在以下技术栈上的:
- Sentence Transformers
- Transformers
- Faiss 、 Annoy 、 Hnswlib
- Python 3.6+
- cord19q :COVID-19 文献分析
- paperai :用于医学 / 科学论文的人工智能文献发现和评论引擎
- neuspo :一个以事实为导向的实时体育赛事和新闻网站
- codequestion :直接从终端询问编码问题
【小熊回收站|txtai:基于 Transformer 的人工智能搜索引擎】
pip install txtai
接下来 , 我们可以创建一个简单的内存模型 , 其中包含一些示例记录来尝试 txtai 。import numpy as npfrom txtai.embeddings import Embeddings# Create embeddings model, backed by sentence-transformers & transformersembeddings = Embeddings({"method": "transformers", "path": "sentence-transformers/bert-base-nli-mean-tokens"})sections = ["US tops 5 million confirmed virus cases","Canada's last fully intact ice shelf has suddenly collapsed, forming a Manhattan-sized iceberg","Beijing mobilises invasion craft along coast as Taiwan tensions escalate","The National Park Service warns against sacrificing slower friends in a bear attack","Maine man wins $1M from $25 lottery ticket","Make huge profits without work, earn up to $100,000 a day"]print("%-20s %s" % ("Query", "Best Match"))print("-" * 50)for query in ("feel good story", "climate change", "health", "war", "wildlife", "asia","north america", "dishonest junk"):# Get index of best section that best matches queryuid = np.argmax(embeddings.similarity(query, sections))print("%-20s %s" % (query, sections[uid]))
运行上面的代码将打印以下内容:上面的示例显示 , 对于几乎所有的查询 , 实际文本并没有存储在文本部分列表中 。 这就是 Transformer 模型相对于基于令牌的搜索的真正威力 。
建立嵌入索引对于较小的文本列表 , 上述方法是有效的 。 但是对于较大的文档存储库 , 对每个查询进行标记和转换的所有嵌入是没有意义的 。 txtai 支持建立预计算索引 , 从而显著提高性能 。
在上一个示例的基础上 , 下面的示例运行索引方法来构建和存储文本嵌入 。 在这种情况下 , 每次搜索只将查询转换为嵌入向量 。
# Create an index for the list of sectionsembeddings.index([(uid, text, None) for uid, text in enumerate(sections)])print("%-20s %s" % ("Query", "Best Match"))print("-" * 50)# Run an embeddings search for each queryfor query in ("feel good story", "climate change", "health", "war", "wildlife", "asia","north america", "dishonest junk"):# Extract uid of first result# search result format: (uid, score)uid = embeddings.search(query, 1)[0][0]# Print sectionprint("%-20s %s" % (query, sections[uid]))
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 公司|千禾味业小熊电器遭减持,“厨房”概念消费股大跌
- 小熊超爱玩|还有两款游戏在路上,《银河战士4》开发期未知?没关系
- 小熊回收站|“对不起,我们不要IT培训班出来的程序员”
- 小熊科技|程序员你是怎么绘制架构图?
- 小熊科技|为突破美国垄断,中国对外宣布:将加大半导体投资用于自研
- 小熊科技|官宣!小米格力在一起了 董明珠35亿牵手成功
- 小熊科技|从零学ELK系列(十):SpringBoot接入ELK升级版
- 小熊回收站|-链表阻塞队列和数组阻塞队列的异同,Java并发编程
- 小熊科技|开学季选手机,这几款千元5G不能错过,最低价仅有1599
- 小熊科技|《和平精英》工作室操刀:腾讯自研大作《黎明觉醒》本月16日测试