CN117056465A - 一种向量搜索方法、系统、电子设备和存储介质 - Google Patents

一种向量搜索方法、系统、电子设备和存储介质 Download PDF

Info

Publication number
CN117056465A
CN117056465A CN202311060694.3A CN202311060694A CN117056465A CN 117056465 A CN117056465 A CN 117056465A CN 202311060694 A CN202311060694 A CN 202311060694A CN 117056465 A CN117056465 A CN 117056465A
Authority
CN
China
Prior art keywords
word
vector
language
word vector
vectors
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311060694.3A
Other languages
English (en)
Inventor
张磊
顾斌
刘涛
于中阳
陈平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Xinsaiyun Computing Technology Co ltd
Shanghai Jimu Galaxy Digital Technology Co ltd
Original Assignee
Shanghai Xinsaiyun Computing Technology Co ltd
Shanghai Jimu Galaxy Digital Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Xinsaiyun Computing Technology Co ltd, Shanghai Jimu Galaxy Digital Technology Co ltd filed Critical Shanghai Xinsaiyun Computing Technology Co ltd
Priority to CN202311060694.3A priority Critical patent/CN117056465A/zh
Publication of CN117056465A publication Critical patent/CN117056465A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/3331Query processing
    • G06F16/334Query execution
    • G06F16/3347Query execution using vector based model
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/335Filtering based on additional data, e.g. user or group profiles
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/22Matching criteria, e.g. proximity measures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/284Lexical analysis, e.g. tokenisation or collocates
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Databases & Information Systems (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Software Systems (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Evolutionary Computation (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • General Health & Medical Sciences (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供了一种基于Go语言的向量搜索方法和系统,其中,基于Go语言的向量搜索方法包括:采集原始文本数据,根据向量空间模型算法对原始文本数据进行数据清洗处理,构建得到原始文本数据对应的向量空间模型;根据Go语言的向量排序算法和相似度算法,建立向量空间模型对应的词向量索引;接收客户端的词向量搜索请求,计算词向量搜索请求与词向量索引中所有词向量的相似度,根据相似度搜索得到预定数量个最相似的词向量;将预定数量个最相似的词向量对应单词数据,反馈至客户端。本申请的技术方案能解决现有技术中基于向量的检索和推荐系统存在难以处理高维度的海量数据和低效检索的问题。

Description

一种向量搜索方法、系统、电子设备和存储介质
技术领域
本申请涉及大数据技术领域,尤其涉及一种基于Go语言的向量搜索方法、系统、电子设备和存储介质。
背景技术
随着经济和信息化技术的发展,企业需要处理和存储的数据量大幅增长,为了实现数据的聚类存储,现有的数据计算领域通常使用多维向量存储数据。数据计算领域,所谓的多维向量即用(a,b,c,d,…)表示数据,其中,a、b、c、d等每个元素都是一个维度上的数据取值。在大数据领域的计算对象基本都是这种格式的向量。
通常情况下,多维数据向量大多使用关系数据库存储,然而传统的关系数据库和搜索引擎通常难以高效地处理海量高维向量数据。为了解决上述问题,近年来,基于向量的检索和推荐系统变得越来越流行,因为这些检索和推荐系统能够处理大规模的向量数据,并提供更精准的搜索和推荐结果。例如:清华大学公开了一种基于柯西分布哈希方法的高维数据检索申请(CN107992611A),该检索方案包括以下步骤:S1、将待检索的数据点对应的高维数据输入训练好的相似检索模型中,获取待检索的数据点对应的哈希编码,其中,相似检索模型为神经网络模型且包括哈希编码模块;S2、将哈希编码输入相似检索模型的倒排索引单元中,获取与哈希编码的汉明距离小于或者等于预设值的桶;S3、对桶中的所有高维数据进行重排序,获取相似高维数据列表,将相似高维数据列表作为检索结果。
上述方法虽然能够加快检索效率,保证检索精度,然而上述基于向量的检索和推荐方法存在难以处理高维度的海量数据和低效检索的问题。
申请内容
本申请提供一种基于Go语言的向量搜索方案,能够解决现有技术中基于向量的检索和推荐方法存在难以处理高维度的海量数据和低效检索的问题。
为解决上述问题,根据本申请的第一方面,本申请提出了一种基于Go语言的向量搜索方法,包括:
采集原始文本数据,根据向量空间模型算法对原始文本数据进行数据清洗处理,构建得到原始文本数据对应的向量空间模型;
根据Go语言的向量排序算法和相似度算法,建立向量空间模型对应的词向量索引;
接收客户端的词向量搜索请求,计算词向量搜索请求与词向量索引中所有词向量的相似度,根据相似度搜索得到预定数量个最相似的词向量;
将预定数量个最相似的词向量对应单词数据,反馈至客户端。
优选的,上述向量搜索方法中,根据向量空间模型算法对原始文本数据进行数据清洗处理,构建得到原始文本数据对应的向量空间模型的步骤,包括:
对原始文本数据进行分词处理,得到原始文本数据包含的所有单词数据;
使用词汇过滤网络模型过滤所有单词数据中的特殊词汇和特殊符号,得到过滤后的单词文本;
统计过滤后的单词文本中每个单词数据的出现次数,得到词频向量;
对原始文本数据中所有文档统计词频向量,得到文档向量;
对文档向量进行编码,得到向量空间模型并存储向量空间模型。
优选的,上述向量搜索方法中,对文档向量进行编码,得到向量空间模型并存储向量空间模型的步骤,包括:
将分布式存储数据库划分为多个存储分片;
分别获取所有文档向量对应的不同向量空间模型;
分别将不同文档向量对应的向量空间模型添加至分布式存储数据库的不同存储分片;
使用Go语言编写的分片管理器,管理不同存储分片之间的通信和协调;
当分片管理器接收到词向量搜索请求时,将词向量搜索请求发送至对应存储分片,查找存储分片的搜索结果;
使用分片管理器汇总不同分片的搜索结果。
优选的,上述向量搜索方法中,根据Go语言的向量排序算法和相似度算法,建立向量空间模型对应的词向量索引的步骤,包括:
使用数据结构存储向量空间模型,得到词向量数据结构;
定义词向量数据结构的向量排序算法;
使用Go语言的数学函数库定义距离计算函数,使用距离计算函数构建得到相似度算法;
使用哈希表建立词向量索引的的倒排索引方式;
选择词向量模型,使用词向量模型对词向量数据结构进行机器学习,生成词向量数据结构中每个单词数据对应的词向量;
使用Go语言的数学函数库对所有词向量进行归一化处理;
使用向量排序算法,按照词频向量从高到低顺序对归一化处理的所有词向量进行排序;
遍历排序后的所有词向量,使用相似度算法计算排序后的每一词向量与当前排名前预定数量其他词向量的相似度;
提取相似度大于或等于预定阈值的所有其他词向量,作为词向量的词向量索引。
优选的,上述向量搜索方法中,接收客户端的词向量搜索请求,计算词向量搜索请求与词向量索引中所有词向量的相似度,根据相似度搜索得到预定数量个最相似的词向量的步骤,包括:
接收客户端的词向量搜索请求,提取词向量搜索请求中的查询词向量;
使用倒排索引方式查找查询词向量对应的词向量索引,计算查询词向量与词向量索引中所有词向量的相似度;
按照相似度从高到低的顺序对词向量索引中所有词向量进行排序;
选取序列前预定数量的词向量对应单词数据作为词向量搜索请求的搜索结果。
优选的,上述向量搜索方法中,接收客户端的词向量搜索请求,计算词向量搜索请求与词向量索引中所有词向量的相似度,根据相似度搜索得到预定数量个最相似的词向量的步骤,包括:
使用Go语言创建Http服务器,使用Http服务器监听客户端发送的词向量搜索请求;
当Http服务器接收到多个词向量搜索请求时,为每个词向量搜索请求创建对应的Go语言搜索引擎;
使用Go语言搜索引擎解析词向量搜索请求的请求参数,得到请求参数的解析结果;
按照请求参数的解析结果,判断是否存在多个Go语言搜索引擎同时访问同一词向量搜索索引;
若存在多个Go语言搜索引擎同时访问同一词向量索引,则使用Go语言的同步原语控制同一时间只有一个Go语言搜索引擎访问词向量索引;
若多个Go语言搜索引擎同时访问不同词向量索引,则控制多个Go语言搜索引擎并发使用相似度算法计算词向量搜索请求与词向量索引中所有词向量的相似度;
控制每个Go语言搜索引擎,根据相似度搜索得到预定数量个最相似的词向量。
优选的,上述向量搜索方法中,控制多个Go语言搜索引擎并发使用相似度算法计算词向量搜索请求与词向量索引中所有词向量的相似度的步骤,包括:
使用Http服务器的主节点,根据Go语言的系统库收集各个计算节点的负载信息;
根据各个计算节点的负载信息,按照预定负载均衡策略对每个计算节点的负载进行动态分配;或者,
根据Http服务器中所有计算节点的负载信息,动态添加或移除预定负载均衡策略对应数量的计算节点。
根据本发明的第二方面,本发明还提供了一种基于Go语言的向量搜索系统,包括:
向量空间模型构建模块,用于采集原始文本数据,根据向量空间模型算法对原始文本数据进行数据清洗处理,构建得到原始文本数据对应的向量空间模型;
词向量索引构建模块,用于根据Go语言的向量排序算法和相似度算法,建立向量空间模型对应的词向量索引;
相似度计算模块,用于接收客户端的词向量搜索请求,计算词向量搜索请求与词向量索引中所有词向量的相似度;
词向量搜索模块,用于根据相似度搜索得到预定数量个最相似的词向量;
词向量反馈模块,用于将预定数量个最相似的词向量对应单词数据,反馈至客户端。
根据本发明的第三方面,本发明还提供了一种电子设备,包括:
存储器、处理器及存储在存储器上并在处理器上运行的基于Go语言的向量搜索程序,基于Go语言的向量搜索程序被处理器执行时实现上述任一项技术方案提供的向量搜索方法的步骤。
根据本发明的第四方面,本发明还提供了一种计算机可读存储介质,计算机可读存储介质内存储有计算机程序,计算机程序被处理器执行时实现上述任一项方法的步骤。
综上,本申请提供的基于Go语言的向量搜索方案,通过使用Go语言实现高性能的词向量索引和词向量搜索,从而构建分布式的词向量搜索引擎。具体根据向量空间模块算法对原始文本数据进行数据清洗处理,构建得到向量空间模型,该向量空间模型能够将文本表示为向量,其中每个文本都表示一个向量,向量的每个维度都对应文本的一个特征,这样就能够实现高维向量的处理。然后根据Go语言的向量排序算法和相似度算法建立向量空间模型对应的词向量索引,使用该词向量索引对客户端的词向量搜索请求进行快速搜索和近似搜索,以实现搜索引擎的高性能检索。另外使用Go语言构建得到词向量索引,能够实现对海量高维向量的数据索引和搜索;并通过计算词向量搜索请求与词向量索引中所有词向量的相似度,根据该相似度搜索得到预定数量个最相似的词向量,达到对高纬度的海量数据进行高效检索的目的。其中,本申请采用Go语言能够接收和响应大量的词向量搜索请求,通过Go语言的并发能量支持高并发的向量搜索请求。最后将该预定数量个最相似的词向量对应的单词数据反馈至客户端,从而解决了现有技术存在的难以处理高纬度的海量数据和低效检索的问题。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。
图1是本申请实施例提供的一种基于Go语言的向量搜索方法的流程示意图;
图2是图1所示实施例提供的一种向量空间模块的构建方法的流程示意图;
图3是图1所示实施例提供的一种文档向量的编码方法的流程示意图;
图4是图1所示实施例提供的一种词向量索引的建立方法的流程示意图;
图5是图1所示实施例提供的第一种词向量相似度计算方法的流程示意图;
图6是图1所示实施例提供的第二种词向量相似度计算方法的流程示意图;
图7是图1所示实施例提供的一种并发计算词向量相似度的方法的流程示意图;
图8是本发明实施例提供的一种分布式向量搜索引擎的向量搜索方法的流程示意图;
图9是本申请实施例提供的一种基于Go语言的向量搜索系统的结构示意图;
图10是本申请实施例提供的一种电子设备的结构示意图。
本申请目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
现有技术的技术方案存在如下技术问题:
现有的基于向量的检索和推荐方法,虽然能够加快检索效率,保证检索精度,然而基于向量的检索和推荐方法存在难以处理高维度的海量数据和低效检索的问题。
为了解决现有技术中的问题,本发明下述实施例提供了基于Go语言的向量搜索方案,通过使用Go语言实现通用的高性能向量搜索引擎,采用先进的向量空间模型和相似度算法,通过Go语言并发和内存优化技术实现高吞吐和低延迟。同时基于Go语言高效的网络模型实现分布式和负载均衡,具有良好的可扩展性。向量搜索引擎基于Go语言开发,能够提供简单易用的API,方便多种语言和环境的用户使用。具体的,Go语言在构建向量搜索系统的过程中,具有以下作用:
a.并发特性:Go语言的轻量级Goroutine和调度器允许程序同时处理多个任务,提高索引和搜索的速度。
b.系统资源管理:Go语言自动管理内存和Goroutine的生命周期,减少程序员在构建过程中的负担。
c.网络编程:Go语言提供了丰富的网络编程库,方便实现分片间的通信和协调。
d.跨平台特性:Go语言可以在多种操作系统和硬件平台上运行,有助于构建可扩展的分布式向量搜索引擎。
通过以上方法能够实现词向量的快速稳定的分布式搜索服务,满足大规模数据处理的需求。
为实现上述目的,参见图1,图1为本申请实施例提供的一种基于Go语言的向量搜索方法的流程示意图。如图1所示,该基于Go语言的向量搜索方法,包括:
S110:采集原始文本数据,根据向量空间模型算法对原始文本数据进行数据清洗处理,构建得到原始文本数据对应的向量空间模型。向量空间模型是一种将文本表示为向量的方法,向量空间模型中每个文本都表示为一个向量,向量的每一个维度对应一个特征(如词项)。本申请中使用Go语言提供的向量空间模型算法实现向量空间模型的构建和表示。
该对原始文本数据进行清洗处理的方案,首先对输入的原始文本数据进行预处理,包括分词、去停用词和词干提取等操作,从而提取出原始文本数据的关键词。在Go语言中,能够使用现有的分词库(如jieba-go)和文本处理库(如go-stem)进行这些操作。
具体地,作为一种优选的实施例,如图2所示,上述向量搜索方法中,步骤S110:根据向量空间模型算法对原始文本数据进行数据清洗处理,构建得到原始文本数据对应的向量空间模型,包括:
S111:对原始文本数据进行分词处理,得到原始文本数据包含的所有单词数据。首先采集海量的原始文本数据,该原始文本数据能够包括文本、图片、音频或视频等形式,然后对该原始文本数据进行分词处理,从而得到文本中包含的所有单词数据。Go语言中提供了大量的分词器(例如sego),在此不再赘述。
S112:使用词汇过滤网络模型过滤所有单词数据中的特殊词汇和特殊符号,得到过滤后的单词文本。这里能够使用包含特殊词汇和特殊符号的原始训练集训练深度神经网络,从而得到词汇过滤网络模型,使用该词汇过滤网络模型过滤所有单词数据中的特殊词汇(例如停用词等)和特殊符号(例如标点符号和空格等),从而得到过滤后的存在明确含义的单词文本。
S113:统计过滤后的单词文本中每个单词数据的出现次数,得到词频向量。在分词处理后得到大量的单词数据,然后粉笔统计过滤后的单词文本中每个单词数据的出现次数,这样就能够得到每个单词数据对应的词频向量,该词频向量反映了单词数据的出现频率,从而能够有效反映每个单词数据的热门程度,以便于快速搜索。
S114:对原始文本数据中所有文档统计词频向量,得到文档向量。通过对原始文本数据中的所有文档重复上述步骤,进行分词处理,过滤特殊词汇和特殊符号并且统计词频向量,就能够得到文档向量。本申请实施例中将每个文本表示为一个向量,向量的每个维度对应特征空间中的一个特征(如词项),维度的值(如特征的索引)为该特征在文本中的权重(权重类型如TF-IDF值)。在Go语言中能够使用切片或数组表示向量。
S115:对文档向量进行编码,得到向量空间模型并存储向量空间模型。通过将文档向量编码为二进制码,这样就能够得到清洗后的词向量,然后使用清洗后的词向量组成向量空间模型,存储在分布式存储系统中,从而便于对原始文本数据中各个词向量进行相似度查询和检索。其中,同一文档向量对应的向量空间模型存储位置相同。
其中,作为一种优选的实施例,如图3所示,上述向量搜索方法中,步骤S115:对文档向量进行编码,得到向量空间模型并存储向量空间模型的步骤,包括:
S1151:将分布式存储数据库划分为多个存储分片。本申请实施例中,原始文本数据的所有向量空间模型存储在分布式存储数据库中,为了实现系统的跨平台特性和可扩展性,以在多种操作系统和硬件平台运行系统,Go语言使用分布式存储数据库存储所有向量空间模型。另外,为了实现大规模数据的检索和处理,通过分布式架构将数据和计算任务分布在多个节点上。具体将大规模数据划分到多个不同的存储分片,分片能够根据数据量、特征或其他策略对分布式存储数据库进行划分。
S1152:分别获取所有文档向量对应的不同向量空间模型。通常情况下一个文档向量对应一个向量空间模型,向量空间模型(Vector Space Model,VSM)是一种将文本表示为向量的方案。其中,每个文本都表示为一个向量,向量的每个维度对应一个特征(如词项)。在本申请中采用Go语言实现了向量空间模型的构建和表示。
S1153:分别将不同文档向量对应的向量空间模型添加至分布式存储数据库的不同存储分片。为了方便在相同文档向量中进行数据检索,本申请实施例将相同文档向量的向量空间模型设置在同一存储分片上,这样就使得每个存储分片包含一部分数据向量。存储分片分布在不同服务器上,从而实现数据的分布式存储。
S1154:使用Go语言编写的分片管理器,管理不同存储分片之间的通信和协调。
S1155:当分片管理器接收到词向量搜索请求时,将词向量搜索请求发送至对应存储分片,查找存储分片的搜索结果。本申请实施例使用Go语言编写分片管理器,该分片管理器负责存储分片之间的通信和协调。当接收到向量搜索请求时,该分片管理器会将词向量搜索请求分发至相应的存储分片,并汇总所有存储分片的搜索结果。
S1156:使用分片管理器汇总不同分片的搜索结果。因为Go语言具有并发特性,能够允许多个Goroutine,即Go语言搜索引擎同时处理不同存储分片之间的通信和协调任务,从而提高分布式搜索引擎的性能。
图1所示实施例提供的基于Go语言的向量搜索方法,在构建得到原始文本数据对应的向量空间模型后,还包括:
S120:根据Go语言的向量排序算法和相似度算法,建立向量空间模型对应的词向量索引。本申请实施例能够使用Go语言建立高性能的索引器,通过向量排序算法和相似度算法,对向量空间模型中的词向量进行排序和相似度检测,从而构建向量空间模型对应的词向量索引,保证词向量的搜索精度。
具体地,作为一种优选的实施例,如图4所示,该根据Go语言的向量排序算法和相似度算法,建立向量空间模型对应的词向量索引的步骤,包括:
S121:使用数据结构存储向量空间模型,得到词向量数据结构。本申请实施例根据预处理后的关键词构建得到全局的特征空间,即向量空间模型。该向量空间模型中每个特征对应一个维度,这样向量空间模型就能够存在多个维度,进而支持高维向量的索引和搜索。在Go语言中,本申请实施例能够采用数组、切片和哈希表等数据结构存储向量空间模型,这些数据结构不仅易于使用,而且具有高效的操作速度和内存管理能力。例如使用map数据结构存储向量空间模型,其中,map的键表示为向量空间模型的特征(例如词项),值为特征的索引。
S122:定义词向量数据结构的向量排序算法。本申请实施例使用的向量排序算法包括快速排序或者归并排序等经典排序算法。这些排序算法不仅时间复杂度低,且具有良好的稳定性和可扩展性,能够满足高并发场景下的索引需求。
S123:使用Go语言的数学函数库定义距离计算函数,使用距离计算函数构建得到相似度算法。本申请实施例中使用Go语言的数学函数库,即math库包含平方根、对数和指数等函数,该数学函数库中的函数能够用于计算欧几里得距离和余弦相似度的距离计算函数。本申请实施例在向量空间模型的基础上,提供了一种基于Go语言的相似度计算算法,用于计算两个向量之间的相似度。常用的相似度计算方法有余弦相似度和欧氏距离等。其中,
余弦相似度:余弦相似度是一种常用的相似度计算方法,计算两个向量之间的夹角余弦值。在Go语言中,可以通过以下步骤计算余弦相似度:a.计算两个向量的点积(DotProduct);b.计算两个向量的模长(Magnitude);c.用点积除以模长的乘积,得到余弦相似度。
欧氏距离:欧氏距离是另一种常用的相似度计算方法,能够计算两个向量之间的直线距离。在Go语言中,可以通过以下步骤计算欧氏距离:a.计算两个向量之间的差值向量;b.计算差值向量的模长,即为欧氏距离。
S124:使用哈希表建立词向量索引的的倒排索引方式。本申请实施例使用倒排索引方式能够实现词向量的快速搜索,这是高性能搜索引擎构建的关键。具体地,本申请实施例使用哈希表实现倒排索引,哈希表不仅能够提供快速的查找速度,而且能够有效避免哈希冲突的问题,从而保证搜索效率和性能。
S125:选择词向量模型,使用词向量模型对词向量数据结构进行机器学习,生成词向量数据结构中每个单词数据对应的词向量。这里的词向量模型能够选用word2vec模型,使用该词向量模型能够对上述词向量数据结构进行训练,从而训练得到每个单词数据对应的词向量。另外,由于词向量数据结构包括向量空间模型,而向量空间模型对应于文档向量,这样,就能够得到一个完整的文档向量对应的词向量文件。本申请实施例中训练词向量模型的过程中能够使用预处理的语料库数据生成每个词语的向量表示。
S126:使用Go语言的数学函数库对所有词向量进行归一化处理。本申请实施例对生成的向量进行归一化处理,保证所有向量的长度为1.具体能够使用标准库中的math包中的函数对词向量进行归一化处理,这样能够帮助确保所有词向量的值在[0,1]之间,并且直接与其他相邻进行比较。
S127:使用向量排序算法,按照词频向量从高到低顺序对归一化处理的所有词向量进行排序。具体地,能够将所有词向量表示存储在一个数组中,按照词频向量从高到低的顺序进行排序。使用sort包进行排序操作,这样就能够帮助用户快速查找到热度最高,使用频率最高的词语,以便于快速进行检索。
S128:遍历排序后的所有词向量,使用相似度算法计算排序后的每一词向量与当前排名前预定数量其他词向量的相似度。本申请实施例在将所有词向量存储在一个数组后,遍历排序后的数组,对于每个词向量,计算其与当前排名前k个词向量的相似度。具体能够使用余弦相似度或欧几里得距离等方法进行相似度的计算。
S129:提取相似度大于或等于预定阈值的所有其他词向量,作为词向量的词向量索引。本申请实施例将相似度大于或等于预定阈值的词向量添加到一个新的集合中,作为该词向量的索引。在Go语言中,能够使用set包创建集和交集等操作,这样就能够帮助用户更加准确地查找与词向量相关的文档。
图1所示实施例提供的基于Go语言的向量搜索方法,在建立空间模型对应的词向量索引的步骤后,还包括:
S130:接收客户端的词向量搜索请求,计算词向量搜索请求与词向量索引中所有词向量的相似度,根据相似度搜索得到预定数量个最相似的词向量。本申请实施例中的搜索器模块使用Go语言实现,能够接收外接搜索请求,在构建的词向量索引中查找与查询词向量最相近的topN个词向量。具体对于每个词向量搜索请求,需要先在新的集合中查找是否有匹配的词语;如果有,则返回匹配结果;如果没有匹配的词语,则需要进一步优化搜索索引,例如增加更多的特征或者调整相似度阈值等。本申请实施例中能够使用map或set来存储词向量与词向量索引之间的关系,以及使用各种算法来优化搜索索引的效果。另外,因为本申请实施例是通过计算词向量搜索请求与词向量索引中所有词向量的相似度进行词向量搜索的,因此本申请实施例支持对词向量的近似搜索,这也是很多搜索引擎所缺乏的。其中,词向量搜索请求形式如下:
1.查询词汇:用户希望搜索的关键词或短语。
2.topN个词向量:用户希望返回的最相似的词向量数量。
3.可选参数:根据实际需求,请求还可以包含其他参数,如过滤条件、排序规则等。
具体地,作为一种优选的实施例,如图5所示,上述向量搜索方法中,步骤S130:接收客户端的词向量搜索请求,计算词向量搜索请求与词向量索引中所有词向量的相似度,根据相似度搜索得到预定数量个最相似的词向量的步骤,包括:
S131:接收客户端的词向量搜索请求,提取词向量搜索请求中的查询词向量。当用户通过客户端发起词向量搜索请求时,搜索引擎首先接收到该词向量搜索请求,获取其中的查询词向量query_vec。在Go语言中能够使用Http服务器库(如net/http)监听并处理用户的搜索请求。
S132:使用倒排索引方式查找查询词向量对应的词向量索引,计算查询词向量与词向量索引中所有词向量的相似度。本申请实施例在提取到查询词向量时,加载事先构建的词向量索引index,该词向量索引存储大量词向量及其相似度排名较高的前N个词语。本申请实施例计算查询词向量query_vec与词向量索引中所有词向量的相似度。这里能够使用余弦相似度等指标计算查询词向量与词向量索引中所有词向量的相似度。
S133:按照相似度从高到低的顺序对词向量索引中所有词向量进行排序。
S134:选取序列前预定数量的词向量对应单词数据作为词向量搜索请求的搜索结果。本申请实施例按照相似度从高到低的顺序对词向量索引中所有词向量进行排序,这样就能够快速选取出序列中前预定数量的词向量,即topN个最相似的词向量,返回该最相似的topN个词向量对应的单词数据作为搜索结果。
另外,若词向量索引中所有词向量与该查询词向量的相似度都较低,则判定该查询词向量query_vec在索引空间中较为孤立,返回提示无匹配结果。
另外,搜索引擎能够接收到多个词向量搜索请求,这样就需要使用Go语言的并发模型和内存管理优化技术,增强引擎的可扩展性和性能。具体地,作为一种优选的实施例,如图6所示,上述向量搜索方法中,步骤S130:接收客户端的词向量搜索请求,计算词向量搜索请求与词向量索引中所有词向量的相似度,根据相似度搜索得到预定数量个最相似的词向量的步骤,包括:
S135:使用Go语言创建Http服务器,使用Http服务器监听客户端发送的词向量搜索请求。词向量搜索请求通常由客户端(如浏览器、移动应用或其他客户端程序)发起。客户端将查询词汇和其他相关参数打包成请求,并通过网络发送至Http服务器的的搜索引擎。本申请首先需要创建Http服务器,以监听词向量搜索请求。使用Go语言的"net/http"库创建一个Http服务器,监听特定端口并接收客户端发送的词向量搜索请求。
S136:当Http服务器接收到多个词向量搜索请求时,为每个词向量搜索请求创建对应的Go语言搜索引擎。当服务器接收到词向量搜索请求时,使用Go语言的并发特性为每个词向量搜索请求创建一个新的goroutine。这样Http服务器能够同时处理多个词向量搜索请求,从而提高词向量搜索请求的并发处理能力。
S137:使用Go语言搜索引擎解析词向量搜索请求的请求参数,得到请求参数的解析结果。如上所述,词向量搜索请求包括多个可选参数,根据实际需求包括过滤条件和排序规则等。在每个Go语言搜索引擎goroutine中,解析词向量搜索请求的请求参数并执行搜索操作,比如查询词向量转换、计算相似度和查询最相近的topN个词向量等步骤,进而得到请求参数的解析结果。
S138:按照请求参数的解析结果,判断是否存在多个Go语言搜索引擎同时访问同一词向量搜索索引。
S139:若存在多个Go语言搜索引擎同时访问同一词向量索引,则使用Go语言的同步原语控制同一时间只有一个Go语言搜索引擎访问词向量索引。因为可能存在多个Go语言搜索引擎goroutine同时访问共享资源(如词向量索引),需要使用Go语言的同步原语(例如互斥锁或读写锁),以确保数据一致性和避免竞态条件。通过上述同步原语的方式,能够控制同一时间内只有一个Go语言搜索引擎访问词向量索引,从而提高搜索效率,避免数据堵塞。
S1310:若多个Go语言搜索引擎同时访问不同词向量索引,则控制多个Go语言搜索引擎并发使用相似度算法计算词向量搜索请求与词向量索引中所有词向量的相似度。在不同Go语言搜索引擎访问不同词向量索引时,并发使用相似度算法计算词向量搜索请求与词向量索引中词向量的相似度,这样就能够将每个词向量搜索请求在对应的goroutine中单独处理,服务器能够同时处理多个请求,从而提高请求的响应速度。
S1311:控制每个Go语言搜索引擎,根据相似度搜索得到预定数量个最相似的词向量。搜索器模块返回搜索结果,该搜索结果包括相近的词向量和对应的单词数据等,并且服务器会定期更新词向量索引,以保证搜索结果的实时性。
具体的,作为一种优选的实施例,本申请实施例提供的基于Go语言并发机制的词向量搜索请求的处理流程主要包括以下步骤:(1)接收搜索请求;(2)创建并发任务;(3)执行搜索任务;(4)汇总搜索结果;(5)返回搜索结果。
该基于Go语言并发机制的词向量搜索请求的处理流程详细说明如下:
(1)接收搜索请求:当用户发起一个词向量搜索请求时,词向量搜索引擎首先接收该词向量搜索请求。在Go语言中,能够使用Http服务器库(如net/http)监听并处理用户的词向量搜索请求。
(2)创建并发任务:为了提高词向量搜索请求的搜索效率,本申请将搜索任务划分为多个子任务,并利用Go语言的Goroutine并发地执行这些子任务。具体地,根据搜索请求的内容和搜索数据的规模,将搜索任务分配到多个Goroutine中。
(3)执行搜索任务:每个Goroutine负责执行一个子任务,包括计算查询向量与数据向量之间的相似度,筛选出相似度较高的结果。在Go语言中使用并发模型中的Goroutine和Channel实现高效的任务调度和结果传递。
(4)汇总搜索结果:当所有Goroutine完成子任务后,需要将各个子任务的搜索结果汇总起来。在Go语言中,能够使用Channel作为通信机制,在Goroutine之间传递搜索结果。主Goroutine负责接收各个子Goroutine传递的搜索结果,并将这些结果进行排序和筛选,得到最终的搜索结果。
(5)返回搜索结果:将汇总后的搜索结果返回给用户。在Go语言中,可以使用Http库(如net/http)将搜索结果以JSON或其他格式返回给用户。
另外,因为存在多个Go语言搜索引擎同时访问不同词向量索引,这样会导致不同分片或者不同计算节点的负载过多,进而导致低吞吐和高延迟的问题。这样就急需根据节点的负载情况动态调整任务分配。
为了实现高吞吐和低延迟,本申请实施例采用负载均衡策略,根据节点的负载情况动态调整任务分配。Go语言可以使用高效的网络库(如net/http和gRPC)实现负载均衡功能。具体地,作为一种优选的实施例,如图7所示,上述图6所示的步骤S1310:控制多个Go语言搜索引擎并发使用相似度算法计算词向量搜索请求与词向量索引中所有词向量的相似度,具体包括:
S13101:使用Http服务器的主节点,根据Go语言的系统库收集各个计算节点的负载信息。本申请实施例的分布式架构包括主节点和多个计算节点,主节点能够根据Go语言的系统库(如os和runtime)获取计算节点的负载信息。具体地,主节点定期收集各个计算节点的负载信息,如CPU使用率、内存使用率和网络带宽等。
S13102:根据各个计算节点的负载信息,按照预定负载均衡策略对每个计算节点的负载进行动态分配。在获取各个计算节点的负载信息后,主节点能够采用一定的测量进行任务分配,如轮询(Round Robin)、最小连接(LeastConnection)或加权轮询(WeightedRound Robin)等。
或者,
S13103:根据Http服务器中所有计算节点的负载信息,动态添加或移除预定负载均衡策略对应数量的计算节点。根据系统的负载情况,主节点可以动态地添加或移除计算节点,以实现资源的合理利用和性能的优化。
如上所述,本申请的技术方案为了支持大规模数据的检索和处理,采用分布式架构,将数据和计算任务分布在多个节点上。在Go语言中能够使用高效的网络库(如net/http和gRPC)实现节点间的通信和数据传输。具体通过预定负载均衡测量对每个计算节点的负载进行动态分配,或者动态添加或移除预定负载均衡策略规定数量的计算节点,从而达到平衡各计算节点的负载的目的。
图1所示实施例提供的基于Go语言的向量搜索方法,在根据相似度检索得到预定数量个最相似的词向量的步骤之后,还包括以下步骤:
S140:将预定数量个最相似的词向量对应单词数据,反馈至客户端。
综上,本申请提供的基于Go语言的向量搜索方法,通过使用Go语言实现高性能的词向量索引和词向量搜索,从而构建分布式的词向量搜索引擎。具体根据向量空间模块算法对原始文本数据进行数据清洗处理,构建得到向量空间模型,该向量空间模型能够将文本表示为向量,其中每个文本都表示一个向量,向量的每个维度都对应文本的一个特征,这样就能够实现高维向量的处理。然后根据Go语言的向量排序算法和相似度算法建立向量空间模型对应的词向量索引,使用该词向量索引对客户端的词向量搜索请求进行快速搜索和近似搜索,以实现搜索引擎的高性能检索。另外使用Go语言构建得到词向量索引,能够实现对海量高维向量的数据索引和搜索;并通过计算词向量搜索请求与词向量索引中所有词向量的相似度,根据该相似度搜索得到预定数量个最相似的词向量,达到对高纬度的海量数据进行高效检索的目的。其中,本申请采用Go语言能够接收和响应大量的词向量搜索请求,通过Go语言的并发能量支持高并发的向量搜索请求。最后将该预定数量个最相似的词向量对应的单词数据反馈至客户端,从而解决了现有技术存在的难以处理高纬度的海量数据和低效检索的问题。
另外,如图8所示,本申请实施例还提供了一种分布式向量搜索引擎的向量搜索方法,其中,分布式向量搜索引擎包括RESTfulAPI、负载均衡网关、搜索器节点、查询处理模块和索引器模块等功能模块。其中,索引器模块使用Go语言的高效排序算法,构建词向量索引,保证搜索精度;搜索器模块使用Go语言的并发能力,同时处理大量词向量搜索请求,充分利用多核处理器,提高系统并发性。搜索引擎采用Go语言实现的分布式存储系统,使整个搜索引擎高可扩展且支持海量数据。
该向量搜索方法包括以下步骤:
S201:RESTfulAPI:接收客户端的向量搜索请求。
S202:负载均衡网关均衡负载,该负载均衡网关用于均衡各计算节点的负载。
S203:搜索器节点;搜索器节点,即搜索器模块,用于将搜索数据转化为向量编码数据。搜索器模块负责处理来自客户端的搜索请求,具体过程包括:a.接收客户端发起的词向量搜索请求,该词向量搜索请求包括查询向量和搜索参数等信息。b.创建Goroutine,根据词向量搜索请求中的查询向量和搜索参数,在向量数据库的分片中搜索最相似的目标向量。c.使用Go语言的并发特性,允许多个Goroutine同时处理不同的词向量搜索请求,提高搜索速度。
S204:查询处理模块;该查询处理模块在索引器模块中,将上述词向量搜索请求中的查询词向量与词向量索引中的词向量进行向量查询,相似度计算和排序等功能。
S205:索引器模块,该索引器模块负责将数据向量添加到向量数据库中。具体过程包括:a.接收来自客户端的数据向量及其元数据;b.对数据向量进行预处理,例如归一化和降维等操作;c.将处理后的数据向量添加到合适的分片(shard)中,以实现数据的分布式存储;d.使用Go语言的并发特性允许多个Goroutine同时处理不同的数据向量,提高索引速度。
S206:渲染结果,查询处理模块从索引器模块中查询到对应的多个词向量时,渲染该多个词向量,得到渲染结果并反馈回客户端。
另外,基于上述方法实施例的同一构思,本申请实施例还提供了基于Go语言的向量搜索系统,用于实现本申请的上述方法,由于该系统实施例解决问题的原理与方法相似,因此至少具有上述实施例的技术方案所带来的所有有益效果,在此不再一一赘述。
参见图9,图9为本发明实施例提供的一种基于Go语言的向量搜索系统的结构示意图。如图9所示,该基于Go语言的向量搜索系统包括:
向量空间模型构建模块110,用于采集原始文本数据,根据向量空间模型算法对所述原始文本数据进行数据清洗处理,构建得到所述原始文本数据对应的向量空间模型;
词向量索引构建模块120,用于根据Go语言的向量排序算法和相似度算法,建立所述向量空间模型对应的词向量索引;
相似度计算模块130,用于接收客户端的词向量搜索请求,计算所述词向量搜索请求与所述词向量索引中所有词向量的相似度;
词向量搜索模块140,用于根据所述相似度搜索得到预定数量个最相似的词向量;
词向量反馈模块150,用于将所述预定数量个最相似的词向量对应单词数据,反馈至所述客户端。
综上,本申请提供的基于Go语言的向量搜索系统,通过使用Go语言实现高性能的词向量索引和词向量搜索,从而构建分布式的词向量搜索引擎。具体地,向量空间模型构建模块110根据向量空间模块算法对原始文本数据进行数据清洗处理,构建得到向量空间模型,该向量空间模型能够将文本表示为向量,其中每个文本都表示一个向量,向量的每个维度都对应文本的一个特征,这样就能够实现高维向量的处理。然后词向量索引构建模块120根据Go语言的向量排序算法和相似度算法建立向量空间模型对应的词向量索引,相似度计算模块130接收客户端的词向量搜索请求,使用该词向量索引对客户端的词向量搜索请求进行快速搜索和近似搜索,以实现搜索引擎的高性能检索。另外词向量搜索模块140使用Go语言构建得到词向量索引,能够实现对海量高维向量的数据索引和搜索,并通过计算词向量搜索请求与词向量索引中所有词向量的相似度,根据该相似度搜索得到预定数量个最相似的词向量,达到对高纬度的海量数据进行高效检索的目的。其中,本申请采用Go语言能够接收和响应大量的词向量搜索请求,通过Go语言的并发能量支持高并发的向量搜索请求。最后词向量反馈模块150将该预定数量个最相似的词向量对应的单词数据反馈至客户端,从而解决了现有技术存在的难以处理高纬度的海量数据和低效检索的问题。
参见图10,图10为申请实施例提供的一种电子设备的结构示意图。如图10所示,该电子设备包括:
处理器1001、通信总线1002、通信模块1003、存储器1004及存储在存储器1004上并在所述处理器1001上运行的基于Go语言的向量搜索程序,该基于Go语言的向量搜索程序被处理器1001执行时实现如上述任一项实施例提供的向量搜索方法的步骤。
上述电子设备中的存储器1004、处理器1001通过通信总线1002和通信接口进行通信。所述通信总线1002能够是外设部件互连标准(Peripheral Component Interconnect,简称PCI)总线或扩展工业标准结构(Extended Industry Standard Architecture,简称EISA)总线等。该通信总线1002能够分为地址总线、数据总线和控制总线等。
存储器1004能够包括随机存取存储器(Random Access Memory,简称RAM),也能够包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
优选的,存储器104还能够是至少一个位于远离前述处理器的存储装置。
上述的处理器1001能够是通用处理器,包括中央处理器(Central ProcessingUnit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件以及分立硬件组件。
根据本申请实施例的又一方面,还提供了一种具有处理器可执行的非易失的程序代码的计算机可读存储介质。该计算机可读存储介质内存储有计算机程序,该计算机程序被处理器执行时实现上述任一项实施例所述的基于Go语言的向量搜索方法的步骤。
优选地,在本申请实施例中,计算机可读存储介质被设置为存储用于所述处理器执行上述方法的程序代码。
优选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
综上,本申请上述实施例提供的基于Go语言的向量搜索方案,相较于现有技术,具有以下优势:
(1)高性能并发处理:本申请上述实施例提供的技术方案采用Go语言进行向量搜索系统的开发,Go语言在并发处理方面具有天然优势。通过Go语言的goroutine和channel机制,能够轻松实现高效的并发处理,从而大大提高向量搜索引擎的性能。同时,Go语言的高性能垃圾回收机制,可以有效减少内存泄漏和内存占用问题,保证系统的稳定运行。
(2)跨平台兼容性:Go语言具有良好的跨平台兼容性,能够在多种操作系统和硬件平台上无缝运行。本申请技术方案基于Go语言开发的向量搜索引擎,能够方便地部署在各种服务器环境中,为用户提供更广泛的应用场景。
(3)易于维护与扩展:Go语言具有简洁的语法和严格的编码规范,使得本申请技术方案中的向量搜索引擎易于理解和维护。同时,Go语言的模块化设计理念,有助于实现代码的解耦和模块化,便于后期功能扩展和性能优化。
(4)节省资源消耗:本申请技术方案采用Go语言开发的向量搜索引擎,在运行过程中具有较低的资源消耗。Go语言本身具有高效的编译速度和运行速度,可以有效降低CPU和内存的使用率,从而节省服务器资源,降低部署成本。
综上所述,本申请技术方案中基于Go语言的高性能向量搜索引擎,具有高性能、跨平台兼容性、易于维护与扩展、节省资源消耗等显著优势,为用户提供了一种高效、稳定且易用的向量搜索解决方案。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
应当注意的是,在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的部件或步骤。位于部件之前的单词“一”或“一个”不排除存在多个这样的部件。本申请可以借助于包括有若干不同部件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (10)

1.一种基于Go语言的向量搜索方法,其特征在于,包括:
采集原始文本数据,根据向量空间模型算法对所述原始文本数据进行数据清洗处理,构建得到所述原始文本数据对应的向量空间模型;
根据Go语言的向量排序算法和相似度算法,建立所述向量空间模型对应的词向量索引;
接收客户端的词向量搜索请求,计算所述词向量搜索请求与所述词向量索引中所有词向量的相似度,根据所述相似度搜索得到预定数量个最相似的词向量;
将所述预定数量个最相似的词向量对应的单词数据反馈至所述客户端。
2.根据权利要求1所述的向量搜索方法,其特征在于,所述根据向量空间模型算法对所述原始文本数据进行数据清洗处理,构建得到所述原始文本数据对应的向量空间模型的步骤,包括:
对所述原始文本数据进行分词处理,得到所述原始文本数据包含的所有单词数据;
使用词汇过滤网络模型过滤所述所有单词数据中的特殊词汇和特殊符号,得到过滤后的单词文本;
统计所述过滤后的单词文本中每个单词数据的出现次数,得到词频向量;
对所述原始文本数据中所有文档统计词频向量,得到文档向量;
对所述文档向量进行编码,得到所述向量空间模型并存储所述向量空间模型。
3.根据权利要求2所述的向量搜索方法,其特征在于,所述对所述文档向量进行编码,得到所述向量空间模型并存储所述向量空间模型的步骤,包括:
将分布式存储数据库划分为多个存储分片;
分别获取所有文档向量对应的不同向量空间模型;
分别将不同文档向量对应的向量空间模型添加至分布式存储数据库的不同存储分片;
使用Go语言编写的分片管理器,管理不同存储分片之间的通信和协调;
当所述分片管理器接收到所述词向量搜索请求时,将所述词向量搜索请求发送至对应存储分片,查找所述存储分片的搜索结果;
使用所述分片管理器汇总不同分片的搜索结果。
4.根据权利要求1或2所述的向量搜索方法,其特征在于,所述根据Go语言的向量排序算法和相似度算法,建立所述向量空间模型对应的词向量索引的步骤,包括:
使用数据结构存储所述向量空间模型,得到词向量数据结构;
定义所述词向量数据结构的向量排序算法;
使用所述Go语言的数学函数库定义距离计算函数,使用所述距离计算函数构建得到所述相似度算法;
使用哈希表建立所述词向量索引的的倒排索引方式;
选择词向量模型,使用所述词向量模型对所述词向量数据结构进行机器学习,生成所述词向量数据结构中每个单词数据对应的词向量;
使用所述Go语言的数学函数库对所有所述词向量进行归一化处理;
使用所述向量排序算法,按照词频向量从高到低顺序对归一化处理的所有词向量进行排序;
遍历排序后的所有词向量,使用所述相似度算法计算排序后的每一词向量与当前排名前预定数量其他词向量的相似度;
提取相似度大于或等于预定阈值的所有其他词向量,作为所述词向量的词向量索引。
5.根据权利要求4所述的向量搜索方法,其特征在于,所述接收客户端的词向量搜索请求,计算所述词向量搜索请求与所述词向量索引中所有词向量的相似度,根据所述相似度搜索得到预定数量个最相似的词向量的步骤,包括:
接收所述客户端的词向量搜索请求,提取所述词向量搜索请求中的查询词向量;
使用所述倒排索引方式查找所述查询词向量对应的词向量索引,计算所述查询词向量与所述词向量索引中所有词向量的相似度;
按照所述相似度从高到低的顺序对所述词向量索引中所有词向量进行排序;
选取序列前预定数量的词向量对应单词数据作为所述词向量搜索请求的搜索结果。
6.根据权利要求1所述的向量搜索方法,其特征在于,所述接收客户端的词向量搜索请求,计算所述词向量搜索请求与所述词向量索引中所有词向量的相似度,根据所述相似度搜索得到预定数量个最相似的词向量的步骤,包括:
使用所述Go语言创建Http服务器,使用所述Http服务器监听客户端发送的词向量搜索请求;
当所述Http服务器接收到多个所述词向量搜索请求时,为每个所述词向量搜索请求创建对应的Go语言搜索引擎;
使用所述Go语言搜索引擎解析所述词向量搜索请求的请求参数,得到所述请求参数的解析结果;
按照所述请求参数的解析结果,判断是否存在多个Go语言搜索引擎同时访问同一词向量搜索索引;
若存在多个Go语言搜索引擎同时访问同一词向量索引,则使用所述Go语言的同步原语控制同一时间只有一个Go语言搜索引擎访问所述词向量索引;
若所述多个Go语言搜索引擎同时访问不同词向量索引,则控制所述多个Go语言搜索引擎并发使用所述相似度算法计算所述词向量搜索请求与所述词向量索引中所有词向量的相似度;
控制每个所述Go语言搜索引擎,根据所述相似度搜索得到预定数量个最相似的词向量。
7.根据权利要求6所述的向量搜索方法,其特征在于,所述控制所述多个Go语言搜索引擎并发使用所述相似度算法计算所述词向量搜索请求与所述词向量索引中所有词向量的相似度的步骤,包括:
使用所述Http服务器的主节点,根据所述Go语言的系统库收集各个计算节点的负载信息;
根据各个计算节点的负载信息,按照预定负载均衡策略对每个计算节点的负载进行动态分配;或者,
根据所述Http服务器中所有计算节点的负载信息,动态添加或移除所述预定负载均衡策略对应数量的计算节点。
8.一种基于Go语言的向量搜索系统,其特征在于,包括:
向量空间模型构建模块,用于采集原始文本数据,根据向量空间模型算法对所述原始文本数据进行数据清洗处理,构建得到所述原始文本数据对应的向量空间模型;
词向量索引构建模块,用于根据Go语言的向量排序算法和相似度算法,建立所述向量空间模型对应的词向量索引;
相似度计算模块,用于接收客户端的词向量搜索请求,计算所述词向量搜索请求与所述词向量索引中所有词向量的相似度;
词向量搜索模块,用于根据所述相似度搜索得到预定数量个最相似的词向量;
词向量反馈模块,用于将所述预定数量个最相似的词向量对应单词数据,反馈至所述客户端。
9.一种电子设备,其特征在于,包括:
存储器、处理器及存储在所述存储器上并在所述处理器上运行的基于Go语言的向量搜索程序,所述基于Go语言的向量搜索程序被所述处理器执行时实现如权利要求1至7中任一项所述的向量搜索方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-7中任一项所述方法的步骤。
CN202311060694.3A 2023-08-22 2023-08-22 一种向量搜索方法、系统、电子设备和存储介质 Pending CN117056465A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311060694.3A CN117056465A (zh) 2023-08-22 2023-08-22 一种向量搜索方法、系统、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311060694.3A CN117056465A (zh) 2023-08-22 2023-08-22 一种向量搜索方法、系统、电子设备和存储介质

Publications (1)

Publication Number Publication Date
CN117056465A true CN117056465A (zh) 2023-11-14

Family

ID=88653216

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311060694.3A Pending CN117056465A (zh) 2023-08-22 2023-08-22 一种向量搜索方法、系统、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN117056465A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117891918A (zh) * 2024-01-17 2024-04-16 知学云(北京)科技股份有限公司 基于AI PaaS平台的中文文本向量化模型的交互数据管理系统
CN117951211A (zh) * 2024-03-26 2024-04-30 宁算(南京)科技有限公司 一种用于云服务行业大语言模型私有化部署装置及方法
CN118245497A (zh) * 2024-05-24 2024-06-25 亚信科技(中国)有限公司 一种指标向量检索方法、系统及电子设备

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117891918A (zh) * 2024-01-17 2024-04-16 知学云(北京)科技股份有限公司 基于AI PaaS平台的中文文本向量化模型的交互数据管理系统
CN117951211A (zh) * 2024-03-26 2024-04-30 宁算(南京)科技有限公司 一种用于云服务行业大语言模型私有化部署装置及方法
CN118245497A (zh) * 2024-05-24 2024-06-25 亚信科技(中国)有限公司 一种指标向量检索方法、系统及电子设备

Similar Documents

Publication Publication Date Title
US9442929B2 (en) Determining documents that match a query
Chen et al. Libra: Lightweight data skew mitigation in mapreduce
US11900064B2 (en) Neural network-based semantic information retrieval
CN117056465A (zh) 一种向量搜索方法、系统、电子设备和存储介质
US10318882B2 (en) Optimized training of linear machine learning models
Ji et al. Learning to distribute vocabulary indexing for scalable visual search
US9672474B2 (en) Concurrent binning of machine learning data
Berkovich et al. On clusterization of" big data" streams
US10896229B2 (en) Computing features of structured data
Kim et al. A web service for author name disambiguation in scholarly databases
Sekhar et al. Optimized focused web crawler with natural language processing based relevance measure in bioinformatics web sources
CN104063501A (zh) 基于hdfs的副本平衡方法
Duan et al. Distributed in-memory vocabulary tree for real-time retrieval of big data images
CN108052535B (zh) 基于多处理器平台的视觉特征并行快速匹配方法和系统
CN117648495B (zh) 一种基于云原生向量数据的数据推送方法及系统
Wu et al. An empirical approach for semantic web services discovery
Zhang et al. Fast Vector Query Processing for Large Datasets Beyond {GPU} Memory with Reordered Pipelining
CN116028699A (zh) 数据查询方法、装置及电子设备
Ray et al. Dynamically ranked top-k spatial keyword search
Sundarakumar et al. An Approach in Big Data Analytics to Improve the Velocity of Unstructured Data Using MapReduce
CN116010447A (zh) 一种优化异构数据库用户查询的负载均衡方法及装置
Qin et al. Mixer: efficiently understanding and retrieving visual content at web-scale
Antaris et al. Similarity search over the cloud based on image descriptors' dimensions value cardinalities
Teodoro et al. Adaptive parallel approximate similarity search for responsive multimedia retrieval
Perera et al. Efficient approximate OLAP querying over time series

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination