磐创AI分享
作者|Alex C-G 编译|VK 来源|Towards Data Science
这篇文章,我将介绍如何使用Jina的新streamlight组件来搜索文本或图像,从而构建一个神经搜索前端。
查看我们的文本搜索应用程序或图像搜索应用程序,这里是代码仓库地址:https://github.com/jina-ai/streamlit-jina。
Jina是一个开源的深度学习搜索框架,用于在云上构建多类型数据搜索系统(例如文本、图像、视频、音频)。从本质上说,它允许你为任何类型的数据构建一个搜索引擎。
所以你可以建立自己的文本到文本搜索引擎ala Google,文本到图像搜索引擎ala Google Images,视频到视频搜索引擎等等。像Facebook、Google和Spotify这样的公司通过FAISS、DistilBERT和have等先进的人工智能模型构建这些搜索引擎。
在我加入Jina之前,我就一直是Streamlit的忠实粉丝。所以我很高兴能使用这个很酷的框架为我们的用户构建一些东西。
构建Streamlit组件有助于数据科学家、机器学习爱好者和Streamlit社区中的所有其他开发人员构建由神经搜索支持的东西。它提供了灵活性,而且,由于是用Python编写的,它可以更容易地让数据科学家跟上速度。
现成的streamlight jina组件具有文本到文本和图像到图像的搜索功能,但是jina为任何类型的数据提供了丰富的搜索体验,因此组件中还有很多可添加的内容!
每个Jina项目包括两个流程:
索引:用于使用神经网络模型从数据集中分解和提取丰富的含义
查询:用于获取用户输入并查找匹配结果
我们的streamlight组件是终端用户的前端,因此它不必担心索引部分。
docker run -p 45678:45678 jinahub/app.example.wikipedia-sentences-30k:0.2.9-1.0.1
让我们看看我们的文本搜索示例,因为它更容易看到那里发生了什么:
import streamlit as st
from streamlit_jina import jina
st.set_page_config(page_title="Jina Text Search",)
endpoint = "http://0.0.0.0:45678/api/search" # 这是Jina的默认端点。如果你的“流”使用了不同的内容,那就把它关掉
st.title("Jina Text Search")
st.markdown("You can run our [Wikipedia search example](https://github.com/jina-ai/examples/tree/master/wikipedia-sentences) to test out this search")
jina.text_search(endpoint=endpoint)
如你所见,上面的代码:
对于Jina Streamlit小部件,你还可以传入其他参数来定义要返回的结果数,或者如果你想隐藏某些小部件。
我们模块的源代码只是一个文件。现在我们来看一下文本搜索示例的高级功能:
headers = {
"Content-Type": "application/json",
}
# 在用户没有指定端点的情况下设置默认端点
DEFAULT_ENDPOINT = "http://0.0.0.0:45678/api/search"
class jina:
def text_search(endpoint=DEFAULT_ENDPOINT, top_k=10, hidden=[]):
container = st.beta_container()
with container:
if "endpoint" not in hidden:
endpoint = st.text_input("Endpoint", endpoint)
query = st.text_input("Enter query")
if "top_k" not in hidden:
top_k = st.slider("Results", 1, top_k, int(top_k / 2))
button = st.button("Search")
if button:
matches = text.process.json(query, top_k, endpoint)
st.write(matches)
return container
简而言之,jina.text_search()方法:
我们的方法参数是:
jina.text_search()调用其他几个方法,所有这些方法都可以在__init__.py
中找到。对于图像搜索,还有一些附加功能:
image.encode.img_base64()将查询图像编码为base64,并在传递给jina api之前将其包装为JSON
Jina的API以base64格式返回匹配项。方法将它们包装在标记中,这样它们就可以很好地显示
在终端中:
使用虚拟环境创建新文件夹并将其激活。这将防止系统库和单个项目库之间发生冲突:
mkdir my_project
virtualenv env
source env/bin/activate
安装Streamlit和Streamlit Jina软件包:
pip install streamlit streamlit-jina
在Jina中索引数据并启动查询流。或者,使用预索引的Docker映像:
docker run -p 45678:45678 jinahub/app.example.wikipedia-sentences-30k:0.2.9-1.0.1
创建你的app.py:
import streamlit as st
from streamlit_jina import jina
st.set_page_config(page_title="Jina Text Search",)
endpoint = "http://0.0.0.0:45678/api/search" # 这是Jina的默认端点。如果你的“流”使用了不同的内容,那就把它关掉
st.title("Jina Text Search")
st.markdown("You can run our [Wikipedia search example](https://github.com/jina-ai/examples/tree/master/wikipedia-sentences) to test out this search")
jina.text_search(endpoint=endpoint)
运行Streamlit:
streamlit run app.py
你有了你自己的文本搜索!
对于图像搜索,只需将上面的文本代码替换为图像示例代码,然后运行Jina图像(如Pokemon示例)。
感谢你阅读本文!如果你想了解更多关于Jina和Streamlit的信息,请参阅以下一些有用的资源:
Streamlight Jina组件:https://github.com/jina-ai/streamlit-jina
Jina 101:Jina的基本组成部分:https://docs.jina.ai/chapters/101/index.html
Jina 102:Jina组件如何协同工作:https://docs.jina.ai/chapters/102/index.html
我的第一个Jina应用程序:为Wikipedia语句构建一个简单的文本搜索应用程序:https://docs.jina.ai/chapters/my_first_jina_app
我们的代码仓库:文本、图像、音频、视频和多模式搜索后端的示例:https://github.com/jina-ai/examples