我在计算相似度测量时遇到问题,需要为我的最终项目开发搜索引擎。
我必须在java中使用 tf idf + cosine 相似性,我不知道如何计算它。
为了您的信息,我有自己的数据库,其中包含811文档
答案 0 :(得分: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的概率向量。