From 84e038e321f29668111d5dc3b2ced7192ab6fc3e Mon Sep 17 00:00:00 2001 From: Mingchung Xia <mingchung.xia@gmail.com> Date: Mon, 25 Mar 2024 23:48:05 -0400 Subject: [PATCH] Added nifty & linux fallback revamp --- Package.resolved | 9 +++++++++ Package.swift | 2 ++ .../HNSW/Metrics/CartesianDistanceMetric.swift | 13 ++++++++----- .../HNSW/Metrics/CosineSimilarityMetric.swift | 3 +-- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Package.resolved b/Package.resolved index 5f2e68ff..102feccf 100644 --- a/Package.resolved +++ b/Package.resolved @@ -27,6 +27,15 @@ "version" : "2.2.0" } }, + { + "identity" : "nifty", + "kind" : "remoteSourceControl", + "location" : "https://github.com/mingchungx/nifty.git", + "state" : { + "branch" : "master", + "revision" : "ac093ab6a67e4c6c5cfccbe67c65dac06111cf6a" + } + }, { "identity" : "similarity-topology", "kind" : "remoteSourceControl", diff --git a/Package.swift b/Package.swift index 44c782e0..d83d3e80 100644 --- a/Package.swift +++ b/Package.swift @@ -22,6 +22,7 @@ let package = Package( .package(url: "https://github.com/L1MeN9Yu/Elva", .upToNextMajor(from: "2.1.3")), .package(url: "https://github.com/JadenGeller/similarity-topology", .exact("0.1.14")), .package(url: "https://github.com/Jounce/Surge.git", .upToNextMajor(from: "2.0.0")), + .package(url: "https://github.com/mingchungx/nifty.git", .branch("master")) ], targets: [ .target( @@ -31,6 +32,7 @@ let package = Package( .product(name: "HNSWEphemeral", package: "similarity-topology"), .product(name: "HNSWDurable", package: "similarity-topology", condition: .when(platforms: [.macOS])), .product(name: "HNSWSample", package: "similarity-topology", condition: .when(platforms: [.macOS])), + .product(name: "Nifty", package: "nifty"), .product(name: "ZSTD", package: "Elva"), .byName(name: "Surge", condition: .when(platforms: [.macOS])), ], diff --git a/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CartesianDistanceMetric.swift b/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CartesianDistanceMetric.swift index c2fb0d99..8173b321 100644 --- a/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CartesianDistanceMetric.swift +++ b/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CartesianDistanceMetric.swift @@ -38,16 +38,19 @@ public struct CartesianDistanceMetric<Vector: Collection & Codable>: SimilarityM } #else -// TODO: Import using Nifty (currently unable to fetch package dependency) -// import Nifty +import Nifty /// This implementation may be less efficient on Linux public struct CartesianDistanceMetric<Vector: Collection & Codable>: SimilarityMetric where Vector.Element: BinaryFloatingPoint { public func similarity(between someItem: Vector, _ otherItem: Vector) -> Vector.Element { - return someItem.enumerated().reduce(0) { result, item in - let diff = item.element - otherItem[item.offset] - return result + diff * diff + var sum: Vector.Element = 0 + + for (a, b) in zip(someItem, otherItem) { + let difference = a - b + sum += difference * difference } + + return sum } } diff --git a/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CosineSimilarityMetric.swift b/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CosineSimilarityMetric.swift index 65d0384d..e793d911 100644 --- a/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CosineSimilarityMetric.swift +++ b/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CosineSimilarityMetric.swift @@ -53,8 +53,7 @@ public struct CosineSimilarityMetric<Vector: Collection & Codable>: SimilarityMe } #else -// TODO: Import using Nifty (currently unable to fetch package dependency) -// import Nifty +import Nifty /// This implementation may be less efficient on Linux public struct CosineSimilarityMetric<Vector: Collection & Codable>: SimilarityMetric where Vector.Element: BinaryFloatingPoint { -- GitLab