如何計算文件相似性
最近課題需要,整理一下文件相似性的一些研究,主要是參考知乎上面的回答和52nlp的相關文章。以備後期綜述使用。具體還需要好好細讀連結。
主要思路
- 01/one hot representation,BOW+tf-idf+LSI/LDA體系.
- docsim方法:gensim包,使用corpora.Dictionary(text),把所有單詞取一個set(),並對set中每一個單詞分配一個id號的map,dictionary.doc2bow(doc),把文件doc變成一個稀疏向量,[(0,1),(2,3)]表明id為0,2的詞分別出現了1次和2次,其他未出現。Similarity相似度查詢。結果比較穩定。
- word-embedding,使用NN思想,word2vec只能得到詞向量,比較詞之間的相似度,通過簡單的加權、tag加權、tf-idf加權等方式得到文件向量。
- doc2vec,在word2vec模型中加入了段落向量,兩者對比,word2vec加權方式丟失了最重要的句子結構資訊,doc2vec保留了這種資訊。
- 句法樹加權,使用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。
一些比較好的網站
- 52nlp系列
- 語義分析的一些方法,分為上中下三篇,介紹文字基本處理:分詞、語言模型;文字語義分析:topic model ,詞向量、句向量、卷積神經網路、文字分類;圖片語義分析:圖片分類、訓練深度神經網路的tricks,非常棒的資料!
一些可參考論文
- 《Destributed Representation of sentences and documents》講doc2vec
- 《Parsing Natural scenes and natural recursive neural networks》句法樹
- ICML2015的論文《From word embeddings to document distances》提出一種計算doc相似度的方式,大致思路是將詞之間的餘弦距離作為ground distance,詞頻作為權重,在權重的約束條件下,求WMD的線性規劃最優解。
- 《Convolutional Neural Netowrk for Modelling Sentence》簡單的word2vec 相加除以詞個數,叫做mean-pooling,是不能反映詞序資訊的,可以預訓練向量,然後再上一個CNN卷積神經網路。
- 《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的問題。在短文字的處理上會比較好。-知乎 陳昊
- 《Distributed Representations of Sentences and Documents》Mikolov 14年發表的。實用性一般。 參考意義不大,只要還停留在word2vec的框架內,就無法model到語法結構對句子相似度的影響。
- 《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=