前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Streamlit构建Jina神经搜索

用Streamlit构建Jina神经搜索

作者头像
磐创AI
发布2021-09-06 15:31:05
1.5K0
发布2021-09-06 15:31:05
举报
文章被收录于专栏:磐创AI技术团队的专栏


磐创AI分享

作者|Alex C-G 编译|VK 来源|Towards Data Science

这篇文章,我将介绍如何使用Jina的新streamlight组件来搜索文本或图像,从而构建一个神经搜索前端。

查看我们的文本搜索应用程序或图像搜索应用程序,这里是代码仓库地址:https://github.com/jina-ai/streamlit-jina。

为什么要用Jina建立一个神经搜索

Jina是一个开源的深度学习搜索框架,用于在云上构建多类型数据搜索系统(例如文本、图像、视频、音频)。从本质上说,它允许你为任何类型的数据构建一个搜索引擎。

所以你可以建立自己的文本到文本搜索引擎ala Google,文本到图像搜索引擎ala Google Images,视频到视频搜索引擎等等。像Facebook、Google和Spotify这样的公司通过FAISS、DistilBERT和have等先进的人工智能模型构建这些搜索引擎。

为什么使用Streamlit和Jina

在我加入Jina之前,我就一直是Streamlit的忠实粉丝。所以我很高兴能使用这个很酷的框架为我们的用户构建一些东西。

构建Streamlit组件有助于数据科学家、机器学习爱好者和Streamlit社区中的所有其他开发人员构建由神经搜索支持的东西。它提供了灵活性,而且,由于是用Python编写的,它可以更容易地让数据科学家跟上速度。

现成的streamlight jina组件具有文本到文本和图像到图像的搜索功能,但是jina为任何类型的数据提供了丰富的搜索体验,因此组件中还有很多可添加的内容!

它是如何工作的

每个Jina项目包括两个流程:

索引:用于使用神经网络模型从数据集中分解和提取丰富的含义

查询:用于获取用户输入并查找匹配结果

我们的streamlight组件是终端用户的前端,因此它不必担心索引部分。

  1. 管理员打开一个Jina Docker图片:docker run -p 45678:45678 jinahub/app.example.wikipedia-sentences-30k:0.2.9-1.0.1
  2. 用户在Streamlit组件中输入查询(当前为文本输入或图像上传)并点击“搜索”
  3. 用JSON包装查询并发送到Jina的查询API
  4. 查询并以JSON格式返回结果(以及大量元数据)
  5. 组件解析出有用的信息(例如文本或图像匹配),并将它们显示给用户

示例代码

让我们看看我们的文本搜索示例,因为它更容易看到那里发生了什么:

代码语言:javascript
复制
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ïjina
  • 设置搜索的REST端点
  • 设置页面标题
  • 显示一些解释性文本
  • 显示定义了端点的Jina文本搜索小部件

对于Jina Streamlit小部件,你还可以传入其他参数来定义要返回的结果数,或者如果你想隐藏某些小部件。

背后

我们模块的源代码只是一个文件。现在我们来看一下文本搜索示例的高级功能:

设置配置变量
代码语言:javascript
复制
headers = {
    "Content-Type": "application/json",
}

# 在用户没有指定端点的情况下设置默认端点
DEFAULT_ENDPOINT = "http://0.0.0.0:45678/api/search"
渲染组件
代码语言:javascript
复制
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()方法:

  • 创建一个Streamlit容器来保存所有内容,如果没有指定,则使用合理的默认值
  • 如果widget没有设置为hidden,则将它们呈现给用户
  • [用户类型查询]
  • [用户单击按钮]
  • 向jina api发送查询并返回结果
  • 在组件中显示结果

我们的方法参数是:

jina.text_search()调用其他几个方法,所有这些方法都可以在__init__.py中找到。对于图像搜索,还有一些附加功能:

image.encode.img_base64()将查询图像编码为base64,并在传递给jina api之前将其包装为JSON

Jina的API以base64格式返回匹配项。方法将它们包装在标记中,这样它们就可以很好地显示

在你的项目中使用它

在终端中:

使用虚拟环境创建新文件夹并将其激活。这将防止系统库和单个项目库之间发生冲突:

代码语言:javascript
复制
mkdir my_project
virtualenv env
source env/bin/activate

安装Streamlit和Streamlit Jina软件包:

代码语言:javascript
复制
pip install streamlit streamlit-jina

在Jina中索引数据并启动查询流。或者,使用预索引的Docker映像:

代码语言:javascript
复制
docker run -p 45678:45678 jinahub/app.example.wikipedia-sentences-30k:0.2.9-1.0.1

创建你的app.py:

代码语言:javascript
复制
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:

代码语言:javascript
复制
streamlit run app.py

你有了你自己的文本搜索!

对于图像搜索,只需将上面的文本代码替换为图像示例代码,然后运行Jina图像(如Pokemon示例)。

下一步怎么办

感谢你阅读本文!如果你想了解更多关于Jina和Streamlit的信息,请参阅以下一些有用的资源:

Jina

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

Streamlit
  • Streamlit docs(https://docs.streamlit.io/en/stable/)
  • Components gallery(https://streamlit.io/gallery?type=components&category=featured)
  • App gallery(https://streamlit.io/gallery?type=apps&category=featured)
  • Community forum(https://discuss.streamlit.io/)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磐创AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么要用Jina建立一个神经搜索
  • 为什么使用Streamlit和Jina
  • 它是如何工作的
  • 示例代码
  • 背后
    • 设置配置变量
      • 渲染组件
      • 在你的项目中使用它
      • 下一步怎么办
        • Jina
          • Streamlit
          相关产品与服务
          图像搜索
          图像搜索(Image Search)基于腾讯云的图像解决方案,集成了图像检索、超细粒度元素挖掘和图像匹配等技术,通过以图搜图的方式在用户自建图片库中快速检索出与输入图片相同或相似的图片集合,可应用于图片版权保护、电商侵权审核、相似素材查询、同款商品搜索与推荐等场景。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档