如何计算文档相似性

2024-06-18 03:38
文章标签 文档 计算 相似性

本文主要是介绍如何计算文档相似性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近课题需要,整理一下文档相似性的一些研究,主要是参考知乎上面的回答和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. gensim官方教程翻译
  2. word2vec使用教程
  3. 52nlp系列
  4. 中英文维基百科语料上的Word2Vec实验
  5. 如何计算两个文档的相似度:gensim lda 课程图谱例子
  6. 语义分析的一些方法,分为上中下三篇,介绍文本基本处理:分词、语言模型;文本语义分析:topic model ,词向量、句向量、卷积神经网络、文本分类;图片语义分析:图片分类、训练深度神经网络的tricks,非常棒的资料!
  7. sentence2vec

一些可参考论文

  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,影响相似度的因素:模型、语料、参数。评价指标:语义特征、用作特征、用作初始值。导读

这篇关于如何计算文档相似性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1071200

相关文章

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

Python批量调整Word文档中的字体、段落间距及格式

《Python批量调整Word文档中的字体、段落间距及格式》这篇文章主要为大家详细介绍了如何使用Python的docx库来批量处理Word文档,包括设置首行缩进、字体、字号、行间距、段落对齐方式等,需... 目录关键代码一级标题设置  正文设置完整代码运行结果最近关于批处理格式的问题我查了很多资料,但是都没