使用java程序计算余弦相似度
我在计算相似性度量来为我的最终项目开发搜索引擎时遇到问题。
我必须在java中使用tf idf + cosine相似度,但我不知道如何计算它。
供您参考,我有自己的数据库,其中有 811 文档
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我在计算相似性度量来为我的最终项目开发搜索引擎时遇到问题。
我必须在java中使用tf idf + cosine相似度,但我不知道如何计算它。
供您参考,我有自己的数据库,其中有 811 文档
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
要计算向量 u 和 v 的余弦相似度,请对 u 和 v 进行归一化,然后获得 u 和 v 的点积。这意味着向量具有相同的大小并且是数值向量(请参阅 http://en.wikipedia.org/wiki/Cosine_similarity)编写这样的操作是微不足道的,有些人为你做了这件事,就像这里http://acs.lbl.gov/software/colt/
在搜索引擎中,余弦相似度可以是对象 A 与 B 匹配程度的度量。您的查询是对象 A,计算数据库/存储/其他内容中所有对象 B 的余弦相似度,B 对象按相似度递减排序。
如果您的对象是数值向量,那就很简单了。如果没有,那么您必须设计一种方法将对象转换为数字向量。例如,对于文本数据,向量可以包含某些关键字在文本中出现的次数,称为“词袋模型”(参见 http://en.wikipedia.org/wiki/Bag_of_words_model)这样的模型完全忽略了单词之间的相互关系。一种更聪明的方法,考虑到单词之间的简单关系,可以计算给定文本中给定单词跟随另一个单词的概率,这是马尔可夫表示。该向量就是单词 x 跟随 y 的概率向量。
To compute the cosine similarity of vector u and v, normalize u and v and then get dot product of u and v. It implies the vectors have the same size and are numerical vectors (see http://en.wikipedia.org/wiki/Cosine_similarity) Coding such operations is trivial, and some people did it for you, like here http://acs.lbl.gov/software/colt/
In a search engine, cosine similarity can be a measure of how much object A matches B. Your query is an object A, compute cosine similarity for all objects B in your database/store/whatever, the B objects sort by decreasing similarity.
If your objects are numeric vectors, easy enough. If not, then you have to devise a way to turn your objects into numeric vectors. For instance, for text data, the vector can contains the number of times some keywords occurs in the text, it's called "bag of words model" (see http://en.wikipedia.org/wiki/Bag_of_words_model) Such a model totally ignore how words relate to each other. A smarter way, that takes in account simple relationship between words, can be computing for a given text the probability that a given word follow an other, it's a Markovian representation. The vector is then a vector of probabilities that word x follows y.