compare will only ever return 1 when the two vectors it is given are identical. In practice, this will almost certainly never happen. If the default model is used, the vectors are 1536 dimensions. For the tests, I have artificially created much smaller, deliberately identical vectors.
The return value of compare is the return value of cosine in Data::CosineSimilarity
| [reply] [d/l] [select] |
compare will only ever return 1 when the two vectors it is given are identical. In practice, this will almost certainly never happen.
Well, it's still good to test the edge cases, as this thread shows.
The return value of compare is the return value of cosine in Data::CosineSimilarity
From the source that appears to be the result of a bunch of multiplications and divisions, and assuming there's some floating-point numbers in there, then what I wrote above likely applies. A lot of testing frameworks have functions to compare floating point numbers down to a certain number of decimal places, but it appears this isn't built in to Test::More (though for some reason I remembered incorrectly that it was). Though there's probably a module or two that adds this functionality, a workaround is:
use Test::More tests=>1;
my $x = 1.00000001;
is sprintf("%.5f", $x), "1.00000";
| [reply] [d/l] [select] |
cmp_ok abs($have - $want), '<', $tolerance;
It's so short that I've never bothered to look for another Test::* module to do it.
| [reply] [d/l] [select] |