1. 程式人生 > >如何計算文件相似性

如何計算文件相似性

最近課題需要,整理一下文件相似性的一些研究,主要是參考知乎上面的回答和52nlp的相關文章。以備後期綜述使用。具體還需要好好細讀連結。

主要思路

  1. 01/one hot representation,BOW+tf-idf+LSI/LDA體系.
  2. docsim方法:gensim包,使用corpora.Dictionary(text),把所有單詞取一個set(),並對set中每一個單詞分配一個id號的map,dictionary.doc2bow(doc),把文件doc變成一個稀疏向量,[(0,1),(2,3)]表明id為0,2的詞分別出現了1次和2次,其他未出現。Similarity相似度查詢。結果比較穩定。
  3. word-embedding,使用NN思想,word2vec只能得到詞向量,比較詞之間的相似度,通過簡單的加權、tag加權、tf-idf加權等方式得到文件向量。
  4. doc2vec,在word2vec模型中加入了段落向量,兩者對比,word2vec加權方式丟失了最重要的句子結構資訊,doc2vec保留了這種資訊。
  5. 句法樹加權,使用LSH,sciket-learn提供了lsh的實現,比較適合短文字。lshf = LSHForest(random_state=42),lshf.fit(x_train.toarray())
    主要參考用docsim/doc2vec/LSH比較兩個文件之間的相似度和知乎Batman回答

一些知乎上的觀點

  • 使用word2vec做,對於短句子有效。對於詞之間的相關資訊,無法表達。
  • 用LSI/LSA做,基於SVD分解方式,句子中詞的順序不會影響相似度結果。句子結構資訊不敏感。
  • 目前的模型對長句子絕大部分不能work,短句子中文語境下,通過適當的調參(對結果影響比較顯著的,我覺得有window size和min count),word2vec的結果還比較能看,doc2vec的結果一直都比較差,尤其是比較長一點兒的句子/文章。
  • 在文件級別上,我覺得doc2vec的robust程度還不足以支撐一個產品,穩健性程度不如LSI,或者簡單的tf-idf。

一些比較好的網站

  1. 52nlp系列
  2. 語義分析的一些方法,分為上中下三篇,介紹文字基本處理:分詞、語言模型;文字語義分析:topic model ,詞向量、句向量、卷積神經網路、文字分類;圖片語義分析:圖片分類、訓練深度神經網路的tricks,非常棒的資料!

一些可參考論文

  1. 《Destributed Representation of sentences and documents》講doc2vec
  2. 《Parsing Natural scenes and natural recursive neural networks》句法樹
  3. ICML2015的論文《From word embeddings to document distances》提出一種計算doc相似度的方式,大致思路是將詞之間的餘弦距離作為ground distance,詞頻作為權重,在權重的約束條件下,求WMD的線性規劃最優解。
  4. 《Convolutional Neural Netowrk for Modelling Sentence》簡單的word2vec 相加除以詞個數,叫做mean-pooling,是不能反映詞序資訊的,可以預訓練向量,然後再上一個CNN卷積神經網路。
  5. 《From Word Embeddings To Document Distances》:主要是將計算機影像領域的EMD(earth mover’s distance)演算法的思想,結合word2vec模型,移植到NLP領域,提出了一個文字距離的衡量概念:WMD(word mover’s distance),通過word2vec模型,可以計算出所有詞語的n維詞向量(用於評價詞與詞之間的相似度),再用詞袋模型(Bag Of Words)得到詞語在文章中的詞頻(看作一個詞語在文章中的權重),那麼問題就轉化成為了如何在最小代價的情況下,將文章A的所有詞單元“搬運”到文章B對應詞單元中,因此變成了一個transportation optimization的問題。在短文字的處理上會比較好。-知乎 陳昊
  6. 《Distributed Representations of Sentences and Documents》Mikolov 14年發表的。實用性一般。 參考意義不大,只要還停留在word2vec的框架內,就無法model到語法結構對句子相似度的影響。
  7. 《How to generate a good word embedding》:語料大使用CBOW,語料小用skip-gram,影響相似度的因素:模型、語料、引數。評價指標:語義特徵、用作特徵、用作初始值。導讀

相關推薦

如何計算相似性

最近課題需要,整理一下文件相似性的一些研究,主要是參考知乎上面的回答和52nlp的相關文章。以備後期綜述使用。具體還需要好好細讀連結。 主要思路 01/one hot representation,BOW+tf-idf+LSI/LDA體系. docsi

gensim學習筆記(三)- 計算之間的相似性

Similarity interface 載入配置logging >>> import logging>>> logging.basicConfig(format='%(asctime)s : %(levelname)s

用python計算行數[裝載自http://www.centoscn.com/python/2013/0806/1110.html]

緩存 scn adl 讀取 col bsp 支持 p s file 一、計算文件的行數 最簡單的辦法是把文件讀入一個大的列表中,然後統計列表的長度.如果文件的路徑是以參數的形式filepath傳遞的,那麽只用一行代碼就可以完成我們的需求了: count = le

【轉】Java計算的hash值

rtu keyword article get sha-1 ron tro 就是 windows 原文地址:http://blog.csdn.net/qq_25646191/article/details/78863110 如何知道一個文件是否改變了呢?當然是用比較文件ha

網絡基礎、ftp任務(進度條、計算大小、斷點續傳、搭建框架示例)

... 請求 pro dal hashlib one win lap ase 一、網絡基礎 1、端口,是什麽?為什麽要有端口?   端口是為了將同一個電腦上的不同程序進行隔離。   IP是找電腦;端口是找電腦上的應用程序;   端口範圍:1 – 6553

[NLP]使用LDA模型計算相似度

定義 wiki關於lda的定義: 隱含狄利克雷分佈簡稱LDA(Latent Dirichlet allocation),是一種主題模型,它可以將文件集中每篇文件的主題按照概率分佈的形式給出。同時它是一種無監督學習演算法,在訓練時不需要手工標註的訓練集,需要的

NLP計算相似度之doc2vec

import gensim outp1 = 'D:\python_noweightpathway\TIA\docmodel' file = open(u'D:\python_noweightpathway\TIA\TIAxmmc.txt', encoding=

NLP計算相似度之TF-IDF

#!/usr/bin/python # -*- coding: utf-8 -*- import numpy import os from sklearn import feature_extraction from sklearn.feature_extr

gensim的LSI模型來計算的相似度

from gensim import corpora,models,similarities dictionary=corpora.Dictionary.load('/tmp/deerwester.dict') corpus=corpora.MmCorpus('/tmp/d

python使用BeautifulSoup的prettify功能來處理HTML,之後使用Levenshtein編輯距離計算間的相似度

    字串的處理可謂是一個老生常談的話題了,處理的方法也是有很多的積累的,利用字串的匹配來計算文件整體之間的相似度是一個慣用的方法,但裡面還有很多具體的細節需要注意,今天在使用Levenshtein距離的時候遇到了一個問題,不太知道該如何衡量了,這裡先說一下做的事情:  

計算夾大小

sdi div span size new 求一個 wal ldb day 1.使用walk方法 def func(): import os path = r‘E:\PYTHON\OldboyClass\code\學習過程代碼\day24\文件‘

Python計算一個目錄下的所有的md5值,在Linux系統下面

linux md5 python walk hashlib 實現代碼如下:#!/usr/bin/python #*-*coding:utf8*-* import os import sys import hashlib def md5sum(data): with open(d

C語言之操作07——讀取件數據並計算均值方差標準差

取出 學生 stdio.h fscanf track white data .net += //文件 /* =============================================================== 題目:從文本文件"high.txt

20161227xlVBA多合並計算

light handler frame manual lec nothing 計時器 put 並且 Sub NextSeven_CodeFrame() ‘應用程序設置 Application.ScreenUpdating = False Applicat

C/C++ 編程計算2的100萬次方(m的n次方),超長結果輸出

class bre tdi content snippet 輸入 urn i++ 清空緩存 #include <iostream> #include <stdio.h> #include <stdlib.h> #include &

用numpy計算成交量加權平均價格(VWAP),並實現讀寫

算法 txt log ack etx png del pack pan VWAP(Volume-Weighted Average Price,成交量加權平均價格)是一個非常重要的經濟學量,它代表著金融資產的“平均”價格。某個價格的成交量越高,該價格所

相似性計算

for 向量 dex 文檔 red div 我們 number calc 文本相似性計算三個階段: 1. 字面的匹配相似 2. 詞匯的匹配相似 3. 語義的匹配相似 一、JaccardSimilarity方法 對文本進行分詞,然後對每一個單詞分配一個唯一的ID(token)

Linux 雲計算 基礎 系統

linux 文件系統 文件顏色 今天,讓跟瀟嘯一起走進Linux的文件系統中。 在Linux中,秉承著一句話:一切皆文件,操作皆命令。意思就是:在Linux中,所有的東西都是用文件的形式表示,所有的操作都可以用命令去實現。 一、Linux的文件結構: Linux是

指定一個夾自動計算出其總容量 並且進行目錄下文的添加 與指定的訪問

文件屬性 lose bsp imp image 磁盤文件 read 訪問 目錄 代碼實現: //編寫一個程序,指定一個文件夾,能自動計算出其總容量import java.io.*;public class Denglu { public static void main

python本處理---計算fasta中不同氨基酸的數目

ros family pos port line import 文本 不同 split #::!/usr/bin/python3 #-*- coding:utf-8 -*- #計算fasta文件中各個氨基酸的含量 import sys args=sys.argv f=