美文网首页智能问答
问答系统实践——判定问题

问答系统实践——判定问题

作者: chrisitina | 来源:发表于2017-04-13 10:48 被阅读0次

    作者声明:

            SemEval-2015 Task3任务是由我和Index_gz共同合作完成,他写了SemEval-2015 Task3的任务一,我来写SemEval-2015 Task3的任务二。

    问题描述

            这个问题来自于SemEval-2015 Task3: Answer Selection in Community Question Answering.

            简单的说就是从一堆问题和答案中找出他们之间的相关性。

            这个Task包含两个Subtasks:

    Subtask1.给定一个问题和一些答案,将答案进行为3类:good/potential/bad。

    Subtask2.给定一个判定问题(Yes/No/Unsure)和一些答案,判定该问题是Yes/No/Unsure。

             这里主要讨论Subtask2。

    详见:http://alt.qcri.org/semeval2015/task3/

    实现框架

    整体实现框架如下图所示:

    简单来说,分为一下几个步骤:

    1.预处理:通过一些基本的“词”级别的处理,为特征提取准备规范数据。

    2.特征提取:通过对原始数据和预处理后的数据进行分析,并基于一定的假设,确定选取特征,提取特征。

    3.模型构建:根据问题描述,选择学习模型,构建训练集,训练模型。

    4.实验评估:构建测试集,对比各模型效果。

    5.实验结果分析

    接下来详细描述整个过程。

    预处理

           预处理阶段我们做了词性标注,词干还原和去停词。详情可见Index_gz写的《问答系统实战——答案选择》的预处理。http://blog.csdn.net/Index_gz/article/details/69524747

    特征提取

           为了方便理解yes_no_unsure问题的训练关键,我们先来举一个中文的例子:

    Question :QID=Q7,QUSERID=U22 ,QTYPE=YES_NO ,QGOLD_YN=Yes:

                 惠新西街北口地铁站附近有没有银行?

             Comment1:CID=Q7_C1, CUSERID=U23,CGOLD_YN=Unsure

                 你问的是哪个出口呢,不确定呀?

             Comment2:CID=Q7_C2, CUSERID=U24,CGOLD_YN=Yes

                  yes,在A口附近有一个交通银行。

             Comment3:CID=Q7_C3, CUSERID=U22,CGOLD_YN=Not Applicable

                  请问A口出来过天桥吗?

             Comment4:CID=Q7_C4, CUSERID=U24,CGOLD_YN=Yes

                  不用过天桥,地铁站A口出来向右走50米就到银行了。

             Comment5:CID=Q7_C5, CUSERID=U25,CGOLD_YN=Yes

                  yesssssssss,那附近还有一个建设银行呢。

             对于判决yes_no_unsure的人或者机器来说,他并不容易通过其他知识来判断,它最终的依然是根据回答者的回答,来判断这个问题到底是yes ,no 还是unsure。

            有了这个认识,我们就要设计特征了。第一,comment起码要和question说的是同一件事,所以,能表示comment和question相关性的特征是我们想要的。第二,确定每一条comment是yes倾向,no倾向,还是unsure倾向。大家结合起来判断question是yes倾向,no倾向,还是unsure倾向。所以我们设计了以下特征:

    (一)表示comment和question说的是同一件事的特征,相似性特征:

    词相似特征

    1.Word cosine similarity: 我们假设问题和好的答案词相似,所以设计回答和问题的词的相似度特征。构建词典,以词典顺序作为向顺序,tfidf 作为权重 ,统计每个回答和问题的空间向量,然后计算对应的问题和回答之间的余弦相似度。

    2.NE cosine similarity:关键词通常是名词实体,我们假设问题和好的回答的关键词相近,所以我们构建了问题与回答之间的名词实体余弦。识别名词实体,构建名词实体字典。以字典为顺序,tfidf为权重,构建每个问题和答案的名词实体向量,并计算相应的余弦值。

    特殊符号特征:

    经过统计发现,comment中有一些强特征符号:'??', ':-', '???'。这些符号出现,comment和question的判定往往是不同的。因此我们设计了这一维特征,出现定义为1,未出现定义为0。

    主题相似度特征

    1.Topic feature: 我们假设question的主题和comment的主题是相似的,所以这维特征计算question和comment的主题相似度分数。我们借助 gensim工具的 LDA 模型来训练主题模型。我们训练  10 个主题的主题模型,然后拿到每条comment和question的主题向量(每条记录属于每个主题的分数)。拿到每条记录(comment和question)的主题向量之后,计算对应的comment和question的余弦相似度。从而得到comment和question的主题相似度特征。

    gensim 的LDA方法详见:https://radimrehurek.com/gensim/models/ldamodel.html

    语义相似度特征

    1.word2vector feature: 我们假设question和comment所用的词在语义上是相似的,comment与question的词越是相似的越有可能是靠谱的comment。我们借助 gensim具来训练 word2vec 特征。这样我们就得到每个词的词向量。然后借助以下公式拿到对应comment与question的词向相似度得分。

    其中Wi是问题的第1个词,wj'是回答的第j个词。n是问题的词的个数,m是回答的词的个数。

    gensim 的word2vec方法详见:https://radimrehurek.com/gensim/models/word2vec.html

    (二)判断每条comment的yes_no_unsure倾向的特征:

    特殊词特征:

           经过统计yes no unsure的comment的用词,我们发现一些强特征词,为此我们设计了19维特征词特征:in_yes,in_no,in_unsure,nop_num,nooo_num,yes_num,yea_num,yesss_num,unsure_num,sure_num,have_prob_num,have_discus_num,have_harm_num,have_quest_num,have_argu_num,have_asum_num,have_cheat_num,have_joke_num,have_clear_num。

    语义倾向特征:

            判断comment的yes,no,unsure的倾向需要特殊词词频的特征,也需要语义特征。对全语料训练word2vec。使用以下公式拿到每条comment与yes ,no ,unsure的相似度,共三维:

            其中label可取(yes,no,unsure),WV(wi)表示comment的第i个词的词向量,当label取yes时,WV(label)表示yes的词向量。

    模型训练

            我们采用了一下三种模型,均采用sklearn工具包的默认方法,未设置任何超参数

    1.SVM

    2.朴素贝叶斯

    3.决策树

    效果评估

    (以下实验均未使用devel集)

    第一次尝试实验结果:

    第二次尝试实验结果:

    第三次尝试(comment分类器效果,train数据集中,600做训练集,195做测试集)

    各个模型错分各类样本个数:

    svm:

    nb:

    DT:

    结果分析:

            第一次尝试训练时,我们使用了yes_no问题的全部comment,共1528条,其中有733条是Not Applicable。训练集噪音过大导致训练效果非常差。

            第二次尝试训练时,首先去掉了Not Applicable的数据,然后我们面临了第二个问题:我们使用question的CGOLD_YN当作label,但是每个comment都有一个向量,所以我们决定对一个question的所有comment的向量取平均,合成一个向量去学习。决策树的效果相对比较好F1值达到54.575%,在官方的分数中可以达到第三名的效果,但是SVM和NB的效果依然步乐观,我们又进行了第三次尝试。

            第三次尝试训练,我们使用comment 的CGOLD_YN当作label。训练使comment的向量预测label与真实label缩短差距,得到comment的yes_no_unsure模型。用这个模型取测试test集合的comment。然后使用comment加权投票决定每个question的yes_no_unsure值。

            但是,当我们把comment分类器训练出来后发现,效果很一般,经过近一步分析发现,SVM对于Yes的错分样本个数居然为0,再分析得出,SVM把所有样本都分到Yes类中去了。究其原因,我们猜想是我们提的特征中反映comment的yes类的特征太强了,而另外两类的特征太弱,加上训练集分布上yes数量最多,再加上没有对每个问题的每类特征进行加和平均操作,放大了强的特征的影响而缩小的弱的特征的影响,最终使的SVM分类失败。

            总而言之,拿到问题,需要深入了解问题的根本和数据分布,从而挖掘出什么特征能影响分类效果。

    参考文献

    [1] Denkowski M, Lavie A. Meteor 1.3: automatic metric for reliable optimization and evaluation of machine translation systems[C]// The Workshop on Statistical Machine Translation. Association for Computational Linguistics, 2011:85-91.

    [2] Quan H T, Tran V, Tu V, et al. JAIST: Combining multiple features for Answer Selection in Community Question Answering[C] International Workshop on Semantic Evaluation. 2015:215-219.

    [3] Mikolov T, Chen K, Corrado G, et al. Efficient Estimation of Word Representations in Vector Space[J]. Computer Science, 2013.

    [4]Goldberg Y, Levy O. word2vec Explained: deriving Mikolov et al.'s negative-sampling word-embedding method[J]. Eprint Arxiv, 2014.

    相关文章

      网友评论

        本文标题:问答系统实践——判定问题

        本文链接:https://www.haomeiwen.com/subject/ulfbattx.html