精华内容
下载资源
问答
  • 本文使用Bert模型计算相似度前,首先要对输入数据进行预处理,例如当要处理的文本是: 如何得知关闭借呗 想永久关闭借呗 首先进行文本按token化,切成分割的文字排列: [如 何 得 知 关 闭 借 呗] [想 永 久 关 闭 ...
  • IKAnalyzer中文分词计算句子相似度

    热门讨论 2015-01-22 17:53:36
    IKAnalyzer中文分词,计算句子相似度
  • 句子相似度计算方法有: 1.欧氏距离:多维空间两个点的绝对距离 2.余弦相似度:用两个向量的夹角的余弦值来衡量相似度,首先对句子做embedding再计算两个句子或文本的相似度,更注重方 向上的差异 3.TF-IDF:从...

    句子相似度的计算方法有

    1.欧氏距离:多维空间两个点的绝对距离

    2.余弦相似度:用两个向量的夹角的余弦值来衡量相似度,首先对句子做embedding再计算两个句子或文本的相似度,更注重方  向上的差异

    3.TF-IDF:从词频率的角度出发计算一个词在一个文档和所有文档的频率

    4.doc2vec,word2vec:用来创建词向量的模型,doc2vec是word2vec的扩展,可以计算单个词到句子到文章的相似度。

     

    计算公式:

    1.欧式距离公式:

    2.余弦相似度

    3.TF-IDF

     

    4.word2vec

     

     

    优缺点比较:

     

     

    实现方式:

     

     

     

    word2vec: trained_model.similarity('woman', 'man') 

    doc2vec可以参考例子:https://kanoki.org/2019/03/07/sentence-similarity-in-python-using-doc2vec/

     

     

    展开全文
  • 提出了Sentence-BERT(SBERT)网络结构,该网络结构利用孪生网络和三胞胎网络结构生成具有语义意义的句子embedding向量,语义相近的句子其embedding向量距离就比较近,从而可以用来进行相似度计算(余弦相似度、曼哈顿...

    点击上方,选择星标置顶,每天给你送干货

    阅读大概需要9分钟

    跟随小博主,每天进步一丢丢

    作者:光彩照人

    学校:北京邮电大学

    原文地址:https://www.cnblogs.com/gczr/p/12874409.html


    ‍一、背景介绍

      BERT和RoBERTa在文本语义相似度等句子对的回归任务上,已经达到了SOTA的结果。但是,它们都需要把两个句子同时喂到网络中,这样会导致巨大的计算开销:从10000个句子中找出最相似的句子对,大概需要5000万(C100002=49,995,000)个推理计算,在V100GPU上耗时约65个小时。这种结构使得BERT不适合语义相似度搜索,同样也不适合无监督任务(例如:聚类)。

      本文基于BERT网络做了修改,提出了Sentence-BERT(SBERT)网络结构,该网络结构利用孪生网络和三胞胎网络结构生成具有语义意义的句子embedding向量,语义相近的句子其embedding向量距离就比较近,从而可以用来进行相似度计算(余弦相似度、曼哈顿距离、欧式距离)。该网络结构在查找最相似的句子对,从上述的65小时大幅降低到5秒(计算余弦相似度大概0.01s),精度能够依然保持不变。这样SBERT可以完成某些新的特定任务,例如相似度对比、聚类、基于语义的信息检索。

     

    二、模型介绍

    1)pooling策略

      SBERT在BERT/RoBERTa的输出结果上增加了一个pooling操作,从而生成一个固定大小的句子embedding向量。实验中采取了三种pooling策略做对比:

    • 直接采用CLS位置的输出向量代表整个句子的向量表示

    • MEAN策略,计算各个token输出向量的平均值代表句子向量

    • MAX策略,取所有输出向量各个维度的最大值代表句子向量

      三个策略的实验对比效果如下:

      可见三个策略中,MEAN策略是效果最好的,所以后面实验默认采用的是MEAN策略。

    2)模型结构

      为了能够fine-tune  BERT/RoBERTa,文章采用了孪生网络和三胞胎网络来更新权重参数,以达到生成的句子向量具有语义意义。该网络结构依赖于具体的训练数据,文中实验了下面几种结构和目标函数:

    Classification Objective Function:

      这里将embedding向量u和v以及它们之间的差向量拼接在一起,组成一个新的向量,乘以权重参数Wt∈R3n*k,n表示向量的维度,k是分类标签数量。

     

      优化的时候采用交叉熵损失函数。

     

    Regression Objective Function:

      两个句子嵌入向量u和v的相似度计算结构如下:

    采取MAE(mean squared error)损失作为优化的目标函数。

     

    Triplet Objective Function:

     给定一个主句a、一个正面句子p和一个负面句子n,三元组损失调整网络,使得a和p之间的距离小于a和n之间的距离。数学上,我们最小化以下损失函数:

     

    s表示a、p、n的句子嵌入向量,||·||表示距离,边缘参数ε表示sp与sa的距离至少比sn近ε。

    3)模型训练

      文中训练结合了SNLI(Stanford Natural Language Inference)和Multi-Genre NLI两种数据集。SNLI有570,000个人工标注的句子对,标签分为矛盾、蕴含、中立三种;MultiNLI是SNLI的升级版,格式和标签都一样,有430,000个句子对,主要是一系列口语和书面语文本。文本蕴含关系描述的是两个文本之间的推理关系,其中一个文本作为前提(premise),另一个文本作为假设(hypothesis),如果根据前提P能够推理得出假设H,那么就说P蕴含H,记做P->H。参考样例如下:

      实验时,每个epoch作者用3-way softmax分类目标函数对SBERT进行fine-tune,batch_size=16,采用Adam优化器,learning rate=2e-5,pooling策略是MEAN。

     

    三、评测-语义文本相似度(Semantic Textual Similarity-STS)

     在评测的时候,这里采用余弦相似度来比较两个句子向量的相似度。

    1)无监督STS

      本次评测采用的是STS 2012-2016 五年的任务数据、STS benchmark数据(2017年构建)、SICK-Relatedness数据,这些数据集都是标好label的句子对,label表示句子之间的相互关系,范围为0~5,样例如下:

    无监督评测不采用这些数据集的任何训练数据,直接用上述训练好的模型来计算句子间的相似度,然后通过斯皮尔曼等级相关系数来衡量模型的优劣。结果如下:

      结果显示直接采用BERT的输出结果,效果挺差的,甚至不如直接计算GloVe嵌入向量的平均值效果好;采用本文的孪生网络在NLI数据集上fine-tuning后的模型效果明显要好很多,SBERT和SRoBERTa差异不大。

     2)有监督STS

      有监督STS数据集采用的是STS  benchmark(简称STSb)数据集,就是上面提到的2017年抽取构建的,是当前比较流行的有监督STS数据集。它主要来自三个方面:字幕、新闻、论坛,包含8,628个句子对,训练集5,749,验证集1,500,测试集1,379。BERT将句子对同时输入网络,最后再接一个简单的回归模型作为输出,目前在此数据集上取得了SOTA的效果。

     上述实验结果分为三块:

    • not trained for STS:表示直接采用的是跟上面无监督评测一样的模型,结果也一样;

    • Trained on STS benchmark :表示没有使用NLI数据集,直接在STSb训练数据集上利用孪生网络结构构建回归模型fine-tuning;

    • Trained on NLI data+STS benchmark :表示利用孪生网络先在NLI数据集上训练分类模型学习句子向量表示,然后在STSb训练集上再利用回归模型再次学习句子embedding,相当于利用两种数据集进行了两次fine-tuning。

    评测的时候都是采用的STSb的测试集进行评测。可以看到,最后一种训练方式表现最好,尤其单纯的BERT架构有较大的提升幅度。

     

    四、评测-SentEval

      SentEval是一个当前流行的用来评测句子embedding质量的工具,这里句子embedding可以作为逻辑回归模型的特征,从而构建一个分类器,并在test集上计算其精度。这里利用SentEval工具在下面几个迁移任务上对比SBERT与其它生成句子embedding的方法:

    • MR(movie review):电影评论片段的情感预测,二分类

    • CR(product review):顾客产品评论的情感预测,二分类

    • SUBJ(subjectivity status):电影评论和情节摘要中句子的主观性预测,二分类

    • MPQA(opinion-polarity):来自新闻网的短语级意见极性分类,二分类

    • SST(Stanford sentiment analysis):斯坦福情感树库,二分类

    • TREC(question-type classification):来自TREC的细粒度问题类型分类,多分类

    • MRPC:Microsoft Research Paraphrase Corpus from parallel news sources,释义检测。

      实验结果显示,SBERT生成的句子向量似乎能够很好捕获情感信息,在MR、CR、SST上都有较大的提升;BERT在之前的STS数据集上表现比较差,但是在SentEval上却有了不错的效果表现,这是因为STS数据集上利用余弦相似度衡量句子向量,余弦相似度对于向量的每一个维度都是同等的,然而SentEval是利用逻辑回归分类器来评测,这样某些维度会对最终的分类结果产生影响。

      所以,BERT的直接输出结果无论是CLS位置的还是平均embedding都不适合用来计算余弦相似度、曼哈顿距离和欧式距离。虽然BERT在SentEval上面表现稍微好一些,但是基于NLI数据集的SBERT还是达到了SOTA的效果。

     

    五、消融研究

      为了对SBERT的不同方面进行消融研究,以便更好地了解它们的相对重要性,我们在SNLI和Multi-NLI数据集上构建了分类模型,在STSb数据集上构建了回归模型。在pooling策略上,对比了MEAN、MAX、CLS三种策略;在分类目标函数中,对比了不同的向量组合方式。结果如下:

      在pooling策略上,MEAN效果最好;在向量组合模式上,只有在分类训练的时候才使用,结果显示element-wise的|u-v|影响最大。

    原文题目:《Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks》


    投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

    方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

    记得备注呦

    展开全文
  • 1、TextRank计算句子相似度句子重要性的公式 2、TextRank算法提取关键词的过程 3、TextRank建立关键词无向图

    1、TextRank计算句子相似度和句子重要性的公式

    2、TextRank算法提取关键词的过程

    3、TextRank建立关键词无向图

    展开全文
  • 使用lstm对计算句子相似度解决FAQ

    千次阅读 2019-01-29 16:48:50
    算法介绍 开源代码地址 不同点介绍  
    展开全文
  • paddle_nlp_之词或者句子相似度计算.zip
  • Doc2Vec计算句子相似度

    千次阅读 2018-07-25 11:29:50
    X_train 就是自己的训练语料...doc2vec计算句子相似性 ”“” # coding:utf-8 import sys import time import csv import glob import gensim import sklearn import numpy as np import jieba.posseg as pseg imp...
  • 中文句子 相似度计算算法 计算句子相似度
  • 句子相似检索,在自然语言处理领域具有非常广泛的应用背景。信息过滤技术中的句子模糊匹配,基于实例的机器翻译的源语言检索。
  • 句子相似度计算 | NLP基础

    千次阅读 2019-12-18 10:46:50
    在进行句子相似度计算可以使用上面介绍的InferSent或者Google sentence encoder作为编码网络来进行相似度的预测。 性能对比 总体来说,基准方法(直接使用词向量平均值表示短语)虽然简单,但是效果不错。 综合来看...
  • edit_similar(str1,str2):编辑距离相似度,输入为分词后的两个句子的列表,返回值为两者相似度。 cos_sim(str1, str2):余弦相似度,输入为分词后的两个句子的列表,返回值为两者相似度。 基于字符: difflib....
  • http://my.oschina.net/twosnail/blog/370744
  • SiameseLSTM-Keras 针对短语/句子/序列的相似性比较提出了一种评价模型——Siamese LSTM(孪生网络...该模型是输入为句子对,输出为输入句子对的相似性得分,基于Keras实现。训练35轮左右模型达到拟合,测试集准确率87%
  • 在做自然语言处理的过程中,现在智能对话比较火,例如智能客服,智能家电,智能音箱等,我们需要获取用户说话的意图,方便做出正确的回答,这里面就涉及到句子相似度计算的问题,那么本节就来了解一下怎么样来用 ...
  • 【简单总结】句子相似度计算的几种方法 1.句子相似度介绍: 句子相似度–指的是两个句子之间相似的程度。在NLP中有很大的用处,譬如对话系统,文本分类、信息检索、语义分析等,它可以为我们提供检索信息更快的...
  • 句子相似度计算模型

    2019-10-28 00:14:38
    前言:句子相似度计算,结合蚂蚁的竞赛来进行模型的分析,加深自己的理解 基于bilstm的句子相似度计算模型 首先是得到句子对应的双向的lstm后的表示,在这里,首先使用embedding_lookup函数找到句子中对应分词的...
  • 句子相似度计算的几种方法

    千次阅读 2018-10-10 15:56:02
    在做自然语言处理的过程中,我们经常会遇到需要找出相似语句的场景,或者找出句子的近似表达,这时候我们就需要把类似的句子归到一起,这里面就涉及到句子相似度计算的问题,那么本节就来了解一下怎么样来用 Python ...
  • 句子相似度计算java

    2013-07-30 12:53:55
    实现句子相似度计算,实现了两种,一个是词形相似度一个是词序相似度
  • 关于word2vec 句子相似度计算

    千次阅读 2018-01-16 11:10:01
    在生成词向量之后,基于词向量计算句子相似度: 1.首先处理句子的重点词汇,排除无关词汇,比如我你他之类的,non_words.txt里面是一些无关词汇 2.接下来根据相关的处理结果,做一个单项匹配 首先根据s1的句子...
  • 在python中,如何使用word2vec来计算句子相似度呢? 第一种解决方法 如果使用word2vec,需要计算每个句子/文档中所有单词的平均向量,并使用向量之间的余弦相似度计算句子相似度,代码示例如下: import ...
  • 基于gensim模块的中文句子相似度计算 思路如下: 1.文本预处理:中文分词,去除停用词 2.计算词频 3.创建字典(单词与编号之间的映射) 4.将待比较的文档转换为向量(词袋表示方法) 5.建立语料库 6.初始化模型 7....
  • 对四种句子/文本相似度计算方法进行实验与比较
  • 基于siamese-lstm的中文句子相似度计算 环境搭建 Ubuntu:16.04(64bit) Anaconda:2-4.4.0(python 2.7) 历史版本下载: TensorFlow:1.5.1 numpy:1.14.3 gensim:3.4.0 (nltk:3.2.3) jieba:0.39 word2wec中文...
  • ngram-相似性 计算两个文件之间基于 n-gram 的相似度分数。
  • 计算句子相似度

    千次阅读 2017-01-11 20:50:14
    1、使用vsm向量空间模型 2、将词使用word2vec将词转换成向量,计算两个句子向量分布距离,使用kl散度
  • [[NLP]基于Simaese LSTM的句子相似度计算

    万次阅读 热门讨论 2017-11-02 17:13:39
    句子相似度计算在问答系统以及客服机器人当中应用比较频繁,比对针对对话模型中比较频繁的问句可以先进行过滤,之后再进行对话理解。在文本检测方面也有所应用,比如作家写作风格的检测。本文叙述的句子相似度计算...
  • 好吧,在处理文本的过程中有陷入了一个胡同,不知道接下来该做啥了。于是又在网上找相关的资料,无意间...通过词频和余弦相似性定理计算句子间的相似度,具体理论讲解见上面提到的两篇博文。 1、TF-IDF与余弦相似...
  • 最近在做一个虚拟客服的项目,简单的了解了一下中文语境的集中句子相似度的算法 看了大佬的项目和博客,不明觉厉,链接送上:https://github.com/wenyangchou/SimilarCharactor SimilarCharactor 基于音形码,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,761
精华内容 32,304
关键字:

计算句子相似度