超越传统基于关键词的搜索,提高搜索相关性。
科普:什么是神经搜索 (Neural Search)
神经搜索 (Neural Search) 是指利用深度神经网络,搜索图像、视频、文本等各种非结构化数据。与传统基于文本标签的搜索相比,神经搜索更加全面和有针对性。
教程:快速创建文本搜索引擎
目的:创建一个文本数据的神经搜索应用。
原理:输入查询句子,与数据集中的句子进行匹配并输出匹配结果。
DocArray 参考文档:
数据集 (Pride & Prejudice e-book) 下载:
https://www.gutenberg.org/fil...
安装依赖
从 PyPI 安装 DocArray,方法如下:
- 通过 Pip 安装: pip install docarray
- 通过 conda 安装: conda install -c conda-forge docarray
代码详解
第一步:从 URL 加载数据集,将其转换为文本,并放入 Document (Jina 中一个基础的数据类型)。
from docarray import Document, DocumentArray
doc = Document(uri="https://www.gutenberg.org/files/1342/1342-0.txt").load_uri_to_text()
第二步:由于数据集 Pride & Prejudice e-book 是一系列长句子,我们需要先将其进行分词,再放到 DocumentArray 中。
每重起一行,就用 ‘\n’ 来分割句子。最终这个句子将以 Document 的形式,存储在 DocumentArray 中。
第三步:特征向量化(将特征转换为向量索引)。这里的特征就是 DocumentArray 中每个 Document 的向量。
特征向量化的实现方法众多,这里推荐使用特征哈希 (feature hashing) 方法,因为它运行更迅速、占用空间更少。
特征哈希的工作原理,是获取特征并应用一个哈希函数,该函数可以对值 (value) 进行散列,并将其作为索引返回。
DocArray 极大简化了这个过程:
- break large text into smaller chunks
- docs = DocumentArray(Document(text = s.strip()) for s in doc.text.split('\n') if s.strip())
- apply feature hashing to embed the DocumentArray
- docs.apply(lambda doc: doc.embed_feature_hashing())
- query sentence
- query = (Document(text="she entered the room").embed_feature_hashing().match(docs, limit=5, exclude_self=True,
- metric="jaccard", use_scipy=True))
- print the results
- print(query.matches[:, ('text', 'scores__jaccard')])
第四步:获取输出。将查询句子转换为 Document ,并对其进行向量化,然后与 DocumentArray 中 Document 的向量进行匹配。
输入《傲慢与偏见》中句子「she entered the room」,查询结果如下:
以上就是创建文本搜索引擎的完整过程,查看 Colab 请访问链接:
期待你能用 Jina 全家桶产品,创建更多有意思的 demo~
参考资料:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。