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

用jina快速构建搜索服务

作者头像
DC童生
发布2022-10-05 15:46:15
5620
发布2022-10-05 15:46:15
举报
文章被收录于专栏:机器学习原理机器学习原理

神经搜索工具

特定语法

excutor

编写自己的flow;

代码语言:javascript
复制
class MyExecutor(Executor):
    @requests
    def foo(self, docs: DocumentArray, **kwargs):
        docs[0].text = 'hello, world!'
        docs[1].text = 'goodbye, world!'

    @requests(on='/crunch-numbers')

    def bar(self, docs: DocumentArray, **kwargs):

        for doc in docs:

            doc.tensor = torch.tensor(np.random.random([10, 2]))

flow

提供api接口,定义好输入输出,比较灵活;

一个项目可以由多个flow共同决定

可以将写好的flow放到hub上快速加载

Hub

Jcloud

示例:

01:搜索系统

整体框架

  • 输入:电影名称,描述,电影类型
  • 输出:电影单

image.png

流程

  1. 下周数据集
  2. 将数据集加载到Docarray中
  3. 将Docarray,进行数据预处理,比如分词,分句等,然后生成向量表示。
  4. 构建索引
  5. 将输入进行编码,在索引中找到最佳匹配选项,通过api返回出来。

02构建PDF搜索系统

流程

  1. 准备pdf数据
  2. 解析pdf;准备pdf解析flow
  3. 文本处理以及分局分词
  4. embedding
  5. 构建索引
  6. 构建输入的flow;进行匹配,返回最近的索引
代码语言:javascript
复制
from docarray import DocumentArray
from jina import Flow
docs = DocumentArray.from_files("pdf_data/*.pdf", recursive=True)
flow = Flow()
flow = (
    Flow()
    .add(
        uses="jinahub://PDFSegmenter",
        install_requirements=True,
        name="segmenter"
    )
    .add(
        uses="jinahub://SpacySentencizer",
        uses_with={"traversal_paths": "@c"},
        install_requirements=True,
        name="sentencizer",
    )
    .add(
        uses="jinahub://TransformerTorchEncoder",
        uses_with={"traversal_paths": "@cc"},
        install_requirements=True,
        name="encoder"
    )
    .add(
        uses="jinahub://SimpleIndexer",
        uses_with={"traversal_right": "@cc"},
        install_requirements=True,
        name="indexer"
    )
)
flow.plot()
with flow:
    docs = flow.index(docs, show_progress=True)

# 构建搜索flow
search_flow = (
    Flow()
    .add(
        uses="jinahub://TransformerTorchEncoder", 
         name="encoder"
    )
    .add(
        uses="jinahub://SimpleIndexer",
        uses_with={"traversal_right": "@cc"},
        name="indexer"
    )
)

search_term = "一种基于词向量的hownet表示方法"

from docarray import Document

query_doc = Document(text=search_term)

with search_flow:
    results = search_flow.search(query_doc, show_progress=True, return_results=True)

for match in results[0].matches:
    print(match.text)
    print(match.scores["cosine"].value)
    print("---")
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 神经搜索工具
  • 特定语法
    • excutor
      • flow
        • Hub
          • Jcloud
          • 示例:
            • 01:搜索系统
              • 整体框架
              • 流程
            • 02构建PDF搜索系统
              • 流程
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档