semantic_search_go

package module
v0.0.0-...-003eacb Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 10, 2023 License: MIT Imports: 3 Imported by: 0

README

semantic-search-go

Text similarity search for Go

2x faster than sentence-transformers on 500×10000

Installation

go get github.com/acheong08/semantic-search-go

Example usage

Simple:

package main

import (
	semantic_search "github.com/acheong08/semantic-search-go"
)

func main() {
	corpus := []string{"Google Chrome", "Firefox", "Dumpster Fire", "Garbage", "Brave"}
	results, _ := semantic_search.SemanticSearch([]string{"I need a web browser"}, corpus, 2)
	for _, result := range results[0] {
		println(corpus[result.CorpusID])
		println(result.Score)
	}
}

Raw:

package main

import (
	"github.com/acheong08/semantic-search-go/rank"
	"github.com/acheong08/semantic-search-go/typings"
	"github.com/acheong08/semantic-search-go/vectors"
)

func main() {
	corpus := []string{
		"Google Chrome",
		"Firefox",
		"Dumpster Fire",
		"Garbage",
		"Brave",
	}
	// Encode the corpus
	encodedCorpus, err := vectors.EncodeMulti(corpus)
	if err != nil {
		panic(err)
	}
	query := "What is a good web browser?"
	encodedQuery, err := vectors.Encode(query)
	if err != nil {
		panic(err)
	}
	// Convert query from []float64 to [][]float64 (tensor)
	queryTensor := [][]float64{encodedQuery}
	// Semantic search
	searchResult := rank.Rank(queryTensor, encodedCorpus, 2, false)
	// Print results
	for _, result := range searchResult[0] {
		println(corpus[result.CorpusID])
		println(result.Score)
	}
}

You can store your vectors from semantic-search-go/vectors in a database and run semantic-search-go/rank as needed rather than encoding every single time.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func SemanticSearch

func SemanticSearch(query []string, corpus []string, results int, sorted bool) ([][]typings.SearchResult, error)

Types

This section is empty.

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL