项目总结-问句匹配

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MrWilliamVs/article/details/88858692
  1. 匹配模型相关
    意图: intention
    语义: semantic

Semantic textual similarity 语义文本相似度

Reformulation: 问题重述,换个表达方法。
分词: Chinese Word Segmentation(WS)
词性标注: part of speech(POS)
命名实体识别: NER

FAQ set: 问答语料库 -> 建立索引。(留着后面使用)

多样化口语表达归一化,提取核心语义。
LCQMC。实验室自己公开的数据集(问句匹配)

传统:tfidf,这种,提特征表示文本,利用向量计算相似度。
语义很难表示出来,手工特征复杂。速度快,可靠。

深度模型:
基于文本表示:DSSM。。。。Siamese CNN, ARC-I
(将文本序列转换为向量,来表示句子的核心语义,适合对文本建模表示,用于索引。。 没有句子交互过程,没有考虑到文本中各词的重要程度和句子结构,造成语义偏移)

基于文本交互:ESIM, DiSAN, 。。。。ARC-II(基于卷积), ABCNN, BIMPM, DRCN, (大部分好用的都是文本交互型的)
(文本序列转换为表示,之后,向量交互矩阵,表示句子之间的语义,对交互矩阵进行操作,从而语义之间的相对重要性就可以合理建模。)这种模型,适合大多数文本匹配的任务。

bimpm: 参数量大,所有句子间的交互作用都考虑到了。
ESIM: 输入的embedding, 局部推理建模,推理组合(链式处理)
BiLSTM对输入两个句子编码,attention计算两个句子向量间权重,类attention,计算交互信息,乘以attention值。a, b
元组局部信息:前面结果进行 差,乘积,ma, mb
推理组成:将前面得到的结果,最大池化,平均池化,结果再构成向量,去分类。

DiSAN:Directional Self-Attention Network for RNN/CNN-free Language Understanding, 输入序列每个元素之间注意力是定向的,多维的。
https://blog.csdn.net/weixin_34174422/article/details/88126823(disan)

Bpool(BiLSTM with mean/max pooling)
**ABCNN (attention-based convolution neural networks),**Attention应用到CNN中,在原有单词级的抽象中,增加一个短语级的抽象(高级别的),短语级表示:attention matrix*各自词向量, attention matrix由两个句子一起生成。
组内工作: GSD

关于评测:
问句匹配:判断两个问句之间的语义是否等价,核心是意图匹配。接近智能医疗助手等自然语言处理任务的实际需求,来源真实语料数据,并经过筛选和人工的意图匹配标注。

https://blog.csdn.net/cuihuijun1hao/article/details/84554012(第九名)
https://ruby.ctolib.com/article/wiki/102718(第六名)

数据情况:脱敏,字向量(C******), 词向量(W******), 句子(S******)
S******, S******, 0/1 (一条数据示例)
词和多个字对应(如何对应?)
35268个句子。提供的数据集:2w个训练集(句子对),正负例都均衡。测试集1w个(没有label)
word:9653个。 char:2308。
word embedding: 9647, char embedding: 2307
有些词没有embedding: UNK充当。

统计句子的长度,一个句子平均都是13个字左右,7个词左右,句子不长,数据条数很少。
模型太复杂,容易过拟合。用简单点的模型。

针对以上问题, 构造新数据,
1. 构造新数据进行扩充:
利用规则去增加数据:
图特征: 本质也是用传递性。正例图(里面互为正例构成的图,有连接的算一个图里面),每个图里面的样本之间互为正例(可以把没连起来的边,连起来算新正例),有一个负例两个句子,出现在两个图,这两个图之间两两为负例。
正例:传递性(可以生成正例,负例); 句子本身作为相似问法,生成正例。(图特征???图里,距离太远的2个句子,设置阈值 应该为4,就不要构成正例了。)
负例:
含有UNK:把样本数据随机替换不存在于训练集的字符,构造一倍数据量,增强鲁棒性。
(问题: 最后构造了多少数据???? 正例,负例各8000, 训练集全部修改一个词,含UNK的2w个,共5w 6k数据

2. embedding优化(优化完再输入模型)
3. char level embedding 比word好很多,中文很多新名词(word level)分词很不合理,
word embedding融入到char里面。让模型自己去学习怎么利用word级别的特征。可以很有用。
**1)Elmo:**再训练很有用,
词向量:在大型语料库预训练(学习一些常用的通用的词句表示),再对接特定任务数据集,再次训练,提升任务上的性能。
词向量: word2vec:静态词向量。
word2vec: 跳字模型(skip-gram, 类似于n-gram)和连续词袋模型(continuous bag of words,简称CBOW),以及两种近似训练法:负采样(negative sampling)和层序softmax(hierarchical softmax)。值得一提的是,word2vec的词向量可以较好地表达不同词之间的相似和类比关系。

elmo:动态词向量。
为时下最好的通用词和句子嵌入方法,来自于语言模型的词向量表示,也是利用了深度上下文单词表征,该模型的优势:
(1)能够处理单词用法中的复杂特性(比如句法和语义
(2)这些用法在不同的语言上下文中如何变化(比如为词的多义性建模)
词向量不是一成不变的,而是根据上下文而随时变化, elmo的优势。
双向语言模型biLM的多层表示的组合,基于大量文本,ELMo模型是从深层的双向语言模型(deep bidirectional language model)中的**内部状态(internal state)**学习而来的,

传统词向量技术:(1)基于统计的方法,one-hot,tf/idf,n-gram

输入模型之前,直接拼接。
char- word如何结合?? 具体细节??简单的拼接??哪里拼接???(ok)
**交叉验证??? 四个模型投票,四个不太合适???**不止4个,最后得出的概率值,取加权平均,得出最终类别。
字词结合,4个模型中三个都有提升,四个模型进行融合投票得出最终结果,0.88

猜你喜欢

转载自blog.csdn.net/MrWilliamVs/article/details/88858692