本发明涉及一种对软件信息站点的标签推荐方法,具体是涉及对软件信息站点中的问题数据集先进行数据预处理,再通过建立词典生成句向量。在输入层中,提取句向量中用于表示软件元素的文本描述的n个n元特征。在隐藏层中,这些n元特征被转换为另一种表示方法并被平均以形成隐藏变量。最后,我们使用softmax函数来计算现有标签上的概率分布是一种基于神经网络分类的软件信息站点快速标签推荐方法。
背景技术:
随着互联网的快速发展,越来越多的it爱好者在互联网上寻求帮助,分享经验,以及学习新技术知识,由此出现了各种软件信息站点,像stackoverflow和freeecode这样的软件信息站点可以为全世界的开发者提供信息共享和交流。
为了便于正确的分类和高效的搜索,开发者需要为他们的发布提供标签。然而,标签本质上是一个不协调的过程,不仅取决于开发者对自己帖子的理解,还取决于其他因素,包括开发者的英语技能和对现有帖子的了解。
因此,即使现有的标签已经足够,开发者也不断创建新的标签。最终的效果是,随着时间的推移,越来越多的标签具有严重的冗余性,并有更多的新标签发布,从而导致任何基于标签的算法效率和准确性都会降低。
目前国内外针对软件信息站点的标签推荐,有基于模糊集合理论,考虑了系统的动态演化的标签推荐方法,有包含多标签排名组件,基于相似度的排名组件和基于标签项的排名组件的标签推荐方法,还有基于贝叶斯推理组件和频率推理组件的标签推荐方法。
上述基于模糊集合理论和相似度排名及贝叶斯推理的方法存在以下不足:
(1)它们应用限制在相对较小的数据集中;
(2)它们是不可扩展的,并且不能够处理问答社区中的连续更新;
(3)它们的召回率和精度指标表现并不理想。
技术实现要素:
本发明的目的在于针对目前软件信息站点标签推荐方面的不足,提供一种基于神经网络分类的软件信息站点快速标签推荐方法,快速标签推荐方法的整体标签推荐架构由三层组成:输入层,隐藏层和输出层。在输入层中,提取句向量中用于表示软件元素的文本描述的n个n元特征。在隐藏层中,这些n元特征被转换为另一种表示方法并被平均以形成隐藏变量。最后,我们使用softmax函数来计算现有标签上的概率分布。
为了达到上述的目的,本发明的构思如下:首先使用scrapy框架从stackoverflow等软件信息站点上获取问题数据,并用脚本对数据进行清洗。在输入层中,存在用于表示软件元素的文本描述的n个n元特征(f1,...,fn),文本描述中的特征可以是文本中的一个词。在隐藏层中,这些n元特征(f1,...,fn)被转换为(x1,...,xn)并被平均以形成隐藏变量xh。最后,我们使用softmax函数来计算现有标签上的概率分布。
根据以上构思,本发明采用的一个技术方案是:提供一种基于神经网络分类的软件信息站点快速标签推荐方法,其特征在于:包括以下步骤:
步骤1、使用scrapy框架从软件信息站点上获取问题数据集和标签集;
步骤2、对每条问题数据进行数据清洗,去除问题中的标点符号,多余空格和代码,只留下单词,并将单词全部转化为小写,得到清洗后的数据集data;
步骤3、将数据集data分为规模为n的训练集train和规模为的m测试集test;
步骤4、对训练集train建立词典d:
步骤5、标签集大小为s_tag,trainj建立长度为s_tag的向量tagj,将tagj中trainj的标签在标签集中的对应位置的元素置1,其余元素置0;
步骤6、构建输入层:给定trainj文本描述,快速标签推荐方法构造n-gram特征(f1,...,fn);对于每个n元特征fi,特征向量fti可以通过使用查找表tl获得;借助于权重矩阵a的共享参数,最终获得用于表示输入层中的文本描述的ngram特征向量(x1,...,xn);
步骤7、构建隐藏层:在隐藏层中,计算n-gram特征向量(x1,...,xn)的平均值以使用以下等式获得隐藏变量xh:
xh用于表示隐藏层中的文本描述;
步骤8:构造输出层:输出层对应于二叉树;叶节点表示软件信息站点中的标
签;叶节点的权重代表其标签的频率;叶节点数为k,非叶节点数为(k-1);
步骤9、对训练集t进行多轮迭代神经网络训练;
步骤10、利用测试集对模型进行测试,计算召回率准确率和f1-scorel来检验模型的效果,调整参数,重复步骤9直到得一个合适的神经网络模型;
在上述的一种基于神经网络分类的软件信息站点快速标签推荐方法,所述步骤4具体包括:
步骤4a、建立字典变量dict;
步骤4b、对于train中的每个词wi来说,如果wi没有出现在dict中,则将键值对{wi:1}加入dict,如果wi在dict中已存在,则对d中的wi的值进行更新:{wi:w+1};
步骤4c、对dict中的词dicti进行编号得到词典d;
在上述的一种基于神经网络分类的软件信息站点快速标签推荐方法,所述步骤6具体包括:
步骤6a、本方法使用n-gram作为附加功能来捕获关于本地词序的部分信息;首先构造查找表tl以存储n-gram的m维特征向量;查找表的大小理论上是|d|n,其中|d|是词典d的大小;
步骤6b、扫描软件信息站点,并且对软件信息站点中出现的所有n-gram元素,在tl中被分配了一个m维特征向量;对于tl中的每个n-gram,随机地初始化m维特征向量并且可以由index(n-gram)=hashcode(n-gram)定位一个n-gram;本方法
步骤6c、构造一个共享权重矩阵a;n-gram特征fi的特征向量xi可以通过以下等式获得:
xi=a×tl(hashcode(fi))∈rm;
在上述的一种基于神经网络分类的软件信息站点快速标签推荐方法,所述步骤8基于以下定义:
1)pt表示从根节点到对应于标签t的叶节点的路径;
2)lt表示路径pt中的节点的数量;
3)
4)
5)
步骤8具体包括:
步骤8a、基于哈夫曼树,首先构造标签的概率分布p(t|xh)(xh∈rn);对于叶节点t,路径pt中分支的数量为lt-1;路径中的每个分支都可以看作是二元分类过程;对于每个非叶子节点,我们需要指定左右子节点的类别;除了根节点之外,霍夫曼树中的每个节点都对应一个0或1的霍夫曼码;本方法中,编码为0的节点被定义为正类,否则定义为负类;该关系在以下公式中定义:
根据softmax函数,节点被分类为正类的概率可以通过以下公式来计算:
其中θ是一个节点的向量;节点被分类为负类的概率是
步骤8b、对于软件信息站点中的每个标签t,存在从根到叶的路径pt;在霍夫曼树;路径上有lt-1个分支;由于每一个分支都可以看作是一个二元分类过程,每一个分类产生一个概率
其中的
对于标签为oi.t的每个样本oi.d,我们对样本做如下处理:;
该公式可以可以通过p(t|xh)公式转换为以下公式:
以上公式是该模型的目标函数;我们可以通过使用随机梯度下降和线性衰减学习率η来最大化目标函数;当具有标签oi.d的样本在模型上被训练时,可以通过在多个cpu上同时使用随机梯度下降和线性衰减学习速率η来进行训练;我们更新所有相关参数,包括共享参数权重矩阵a和矩阵
在上述的一种基于神经网络分类的软件信息站点快速标签推荐方法,所述步骤10具体包括:
步骤10a、计算召回率:对于测试集中的问题testi,其召回率recall@ki计算方式如下,其中
整个测试集的召回率计算方式如下:
步骤10b、计算准确率:对于测试集中的问题testi,其召回率precision@ki计算方式如下,其中
整个测试集的准确率计算方式如下:
步骤10c、计算f1-score:对于测试集中的问题testi,其f1-score@ki计算方式如下
整个测试集的准确率计算方式如下:
步骤10d、调整模型参数,使得f1-score最大,召回率最高。
本发明的有益效果是:一种基于神经网络分类的软件信息站点快速标签推荐方法与现有的技术相比较,具有如下突出特点和优点:第一、构建一个基于单隐层神经网络的合适的框架;第二、利用文本等级约束来实现准确性和效率;第三、利用特征间的共享参数,避免大标签输出空间的局限性。
附图说明
图1是本发明中基于神经网络分类的软件信息站点快速标签推荐方法的结构示意图。
具体实施方式
以下结合附图对本发明的实施例作进一步的说明。
本发明包括以下步骤:
步骤1、使用scrapy框架从软件信息站点上获取问题数据集和标签集;
步骤2、对每条问题数据进行数据清洗,去除问题中的标点符号,多余空格和代码,只留下单词,并将单词全部转化为小写,得到清洗后的数据集data;
步骤3、将数据集data分为规模为n的训练集train和规模为的m测试集test;
步骤4、对训练集train建立词典d:
步骤5、标签集大小为s_tag,trainj建立长度为s_tag的向量tagj,将tagj中trainj的标签在标签集中的对应位置的元素置1,其余元素置0;
步骤6、构建输入层:给定trainj文本描述,快速标签推荐方法构造n-gram特征(f1,...,fn);对于每个n元特征fi,特征向量fti可以通过使用查找表tl获得;借助于权重矩阵a的共享参数,最终获得用于表示输入层中的文本描述的ngram特征向量(x1,...,xn);
步骤7、构建隐藏层:在隐藏层中,计算n-gram特征向量(x1,...,xn)的平均值以使用以下等式获得隐藏变量xh:
xh用于表示隐藏层中的文本描述;
步骤8:构造输出层:输出层对应于二叉树;叶节点表示软件信息站点中的标签;叶节点的权重代表其标签的频率;叶节点数为k,非叶节点数为(k-1);
步骤9、对训练集t进行多轮迭代神经网络训练;
步骤10、利用测试集对模型进行测试,计算召回率准确率和f1-scorel来检验模型的效果,调整参数,重复步骤9直到得一个合适的神经网络模型;
其中,图1描述了快速标签推荐方法的整体标签推荐体系结构,由三层组成:输入层,隐藏层和输出层。这种架构类似于连续的单词模型(cbow)。在输入层中,存在用于表示软件元素的文本描述的n个n元特征(f1,...,fn)。文本描述中的特征可以是文本中的一个词。例如,“杰克喜欢简”的两个2克特征是f1=(杰克喜欢)和f2=(喜欢简)。在隐藏层中,这些n元特征(f1,...,fn)被转换为(x1,...,xn)并被平均以形成隐藏变量xh。最后,我们使用softmax函数来计算现有标签上的概率分布。对于软件信息站点中的标记软件对象的集合|s|,这使得它们的标签上的对数似然最大化:
其中tj是软件对象的标签,oi.d是软件对象的文本描述。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。