LSHForest进行文本相似性计算

来源:互联网 发布:火星时代网络班 编辑:程序博客网 时间:2024/06/04 19:37

LSH Forest: Locality Sensitive Hashing forest,局部敏感哈希森林, 是最近邻搜索方法的代替,排序实现二进制搜索和32位定长数组和散列,使用hash家族的随机投影方法近似余弦距离。
随机投影树,对所有的数据进行划分,将每次搜索与计算的点的数目减小到一个可接受的范围,然后建立多个随机投影树构成随机投影森林,将森林的综合结果作为最终的结果。
随机投影树的构建方法:

  • 1.随机选取一个从原点出发的向量,与这个向量垂直的直线将平面内的点划分为了两部分,将属于这两部分的点分别划分给左子树和右子树。在数学计算上,是通过计算各个点与垂直向量的点积完成这一步骤的,点积大于零的点划分到左子树,点积小于零的点划分到右子树。
  • 2.再次随机选取一个向量,与该向量垂直的直线将所有点进行了划分。
  • 3.以此类推继续划分下去,直到每个叶节点中点的数目都达到一个足够小的数目。注意这棵树并不是完全树。
  • 4.新的点最近邻计算时,首先通过计算该点与每次划分所用向量的点积,来找到其所属于的叶节点,然后利用这个叶节点内的​​这些点进行最近邻算法的计算。这个过程是一棵随机投影树的计算过程,利用同样的方法,建立多个随机投影树构成随机森林,将森林的总和结果作为最终的结果。

    sklearn.neighbors中的LSHForest,我写的用LSHForest进行文档相似计算例子
    例子使用搜狗语料库进行实现,使用os.walk遍历文件夹。
    具体过程:

  • 1.读取预料库
  • 2.分词工具对语料库进行分词和停用词过滤
  • 3.使用TfidfVectorizer 计算tdidf向量,构造训练数据和测试数据
  • 4.使用LSHForest训练数据
lshf = LSHForest(random_state=42)  #LSHForest训练数据lshf.fit(x_train.toarray())distances, indices = lshf.kneighbors(x_test.toarray(), n_neighbors=5)

借鉴
http://blog.itpub.net/16582684/viewspace-1253901/
http://blog.sina.com.cn/s/blog_7103b28a0102w1ny.html
http://blog.csdn.net/vs412237401/article/details/52238248
文献:
Bawa M, Condie T, Ganesan P. LSH forest: self-tuning indexes for similarity search[C]// International Conference on World Wide Web, WWW 2005, Chiba, Japan, May. 2005:651-660.

0 0