Code Monkey home page Code Monkey logo

sentence-similarity's Introduction

sentence-similarity

问题句子相似度计算,即给定客服里用户描述的两句话,用算法来判断是否表示了相同的语义。

句子相似度判定

今年和去年前后相继出现了多个关于句子相似度判定的比赛,即得定两个句子,用算法判断是否表示了相同的语义或者意思。 其中第4、5这个2个比赛数据集格式比较像,请见 sent_match,,2、3 的数据集格式比较像,本仓库基于2、3数据集做实验

下面是比赛的列表:

The goal of this competition is to predict which of the provided pairs of questions contain two questions with the same meaning.

数据集未经过脱敏处理,用真实的英文单词标识

问题相似度计算,即给定客服里用户描述的两句话,用算法来判断是否表示了相同的语义。

数据集未经过脱敏处理 示例:

  1. “花呗如何还款” --“花呗怎么还款”:同义问句
  2. “花呗如何还款” -- “我怎么还我的花被呢”:同义问句
  3. “花呗分期后逾期了如何还款”-- “花呗分期后逾期了哪里还款”:非同义问句 对于例子a,比较简单的方法就可以判定同义;对于例子b,包含了错别字、同义词、词序变换等问题,两个句子乍一看并不类似,想正确判断比较有挑战;对于例子c,两句> 话很类似,仅仅有一处细微的差别 “如何”和“哪里”,就导致语义不一致。"""

与基于Quora的的的语义等价判别相同,本次评测任务的主要目标是针对中文的真实客服语料,进行问句意图匹配。集给定两个语句,要求判定两者意图是否相同或者相近。所有语料来自原始的银行领域智能客服日志,并经过了筛选和人工的意图匹配标注。

数据集经过脱敏处理 输入:一般几天能通过审核\ t一般审核通过要多久 输出:1

本次评测任务的主要目标是针对中文的真实患者健康咨询语料,进行问句意图匹配。给定两个语句,要求判定两者意图是否相同或者相近。所有语料来自互联网上患者真实> 的问题,并经过了筛选和人工的意图匹配标注。平安云将为报名的队伍提供GPU的训练环境。

数据集经过脱敏处理,问题由数字标示 训练集包含20000条左右标注好的数据(经过脱敏处理,包含标点符号),供参赛人员进行训练和测试。 测试集包含10000条左右无label的数据(经过脱敏处理,包含标点> 符号)。选手需要对测试集数据的label进行预测并提交。测试集数据作为AB榜的评测依据。

智能客服聊天机器人场景中,待客户提出问题后,往往需要先计算客户提出问题与知识库问题的相似度,进而定位最相似问题,再对问题给出答案。本次比赛的题目便是问 > 题相似度算法设计。

数据集经过脱敏处理,问题由数字标示 为保护用户隐私并保证比赛的公平公正,所有原始文本信息都被编码成单字ID序列和词语ID序列。单字包含单个汉字、英文字母、标点及空格等;词语包含切词后的中> 文词语、英文单词、标点及空格等。单字ID和词语ID存在于两个不同的命名空间,即词语中的单字词或者标点,和单字中的相同字符及相同标点不一定有同一个ID。其> > 中,单字序列以L开头,词语序列以W开头。

Siamese Network

MaLSTM’s architecture — Similar color means the weights are shared between the same-colored elements

  • 词向量是基于字符级别的,在我印象里一般是字符级的效果比较好
  • LSTM训练出来两个问题的语义向量,然后再给相似度函数MaLSTM similarity function
def exponent_neg_manhattan_distance(sent_left, sent_right):
    '''基于曼哈顿空间距离计算两个字符串语义空间表示相似度计算'''
    return K.exp(-K.sum(K.abs(sent_left - sent_right), axis=1, keepdims=True))

我们仔细看下这个函数的输出是0-1,也就是我们预测概率

  • 训练结果:

在ccks任务上:acc: 0.8372 - val_loss: 0.4316 - val_acc: 0.8047

在atec任务上:loss: 0.3302 - acc: 0.8570 - val_loss: 0.5244 - val_acc: 0.7702

更多资料

  1. How to predict Quora Question Pairs using Siamese Manhattan LSTM
  2. nlp中文本相似度计算问题
  3. 语义相似度计算各种算法实现汇总
  4. 距离度量以及python实现(一)
  5. 从Kaggle赛题: Quora Question Pairs 看文本相似性/相关性
  6. SiameseSentenceSimilarity
  7. QuoraDQBaseline

sentence-similarity's People

Contributors

yanqiangmiffy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

sentence-similarity's Issues

我想问问有关相似度问题

这个模型我训练出来了,但是我想将这个模型用在问答系统中做qq-match的模型,就是输入一句话,在一堆问题中找到和这个输入最相近的问题,请问怎么利用这个模型?谢谢

有关distance计算出来后得疑问

你好,我看了您得源码。既然模型定义输入两个问题对[left,right],输出的是经过隐藏层的曼哈顿距离distance,为什么可以直接用文本相似的标签Y作为模型训练的label呢?具体distance与标签y是如何关联起来的呢?麻烦指点下,谢谢

build_input.py的select_best_length逻辑应该有问题

# 原max_length选择方法,逻辑有问题
# for i in len_dict:
#     rate = i[1] / all_sent
#     cover_rate += rate
#     if cover_rate >= limit_ratio:
#         max_length = i[0]
#         break

分析:len_dict是句子长度的频数统计list[(15,3700),(12,2800),(8,500)...(20,30)],每个元素(句长,频数)
按上述逻辑,当3700+2800+500大于总频数95%时,max_len是8,这里就产生了错误。

应该修改为:

改成:将len_dict按照句子长度从小到大排序,从大到小筛选

temp = sorted(len_dict, key=lambda x:x[0], reverse=False)
for i in temp:
    rate = i[1] / all_sent
    cover_rate += rate
    if cover_rate >= limit_ratio:
        max_length = i[0]
        break

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.