本发明涉及一种食材间容克关系的分类方法,尤其是一种基于神经网络的食材之间容克关系的分类方法,属于计算机科学在中医食疗学方面的应用领域。
背景技术:
众所周知,中医是我国的传统医学,而体质食疗学是中医理论的重要组成部分。但它的判定指标具有离散性和模糊性的特点,这就使得中医体质食疗学难以整合和系统化。
随着社会的发展和工业化进程,一方面我国的大气资源和水资源都受到了相当程度的污染,另一方面城市工作的年轻人生活压力也比以往更大。这使得许多人都处于亚健康状态,而亚健康在西医的指标中被视为健康。而传统中医的体质食疗法是专家根据知识和经验,并综合考察病人的状况并给出合适的饮食建议。这种方法有两点不足,一是专家数量有限,难以覆盖日益增长的需求;二是人工诊断具有很强的不确定性,不同的专家的经验和理解往往不同,容易造成错误的饮食建议。
目前,中医领域已经有了一些能以中医理论作为基础的健康指导知识库的构建方法。然而在国际上,美国和欧洲的一些研究机构和公司已经利用图谱式的结构对关联知识进行了有效的组织和挖掘。因此,运用新的方法使得中医食疗学和养生能够自动化的推荐具有重要意义。
技术实现要素:
本发明的目的是为了解决上述现有技术的缺陷,提供了一种基于神经网络的食材之间容克关系的分类方法,该方法能够准确、快速的判定食材之间的相容或相克关系,进而辅助食疗推荐系统,丰富食疗推荐系统的推荐的食品种类,并尽力排除食疗推荐系统推荐相克食物的隐患。
本发明的目的可以通过采取如下技术方案达到:
基于神经网络的食材之间容克关系的分类方法,所述方法包括:
采集中医体质学方面的资料作为文本语料;
对采集的文本语料进行整体建模生成词向量,使文本语料中每个非停用词都对应一个固定长度的词向量;
使用两个词向量之间的余弦相似度作为两个词向量所对应实体之间的相似度;
对于给定的两种食材,将两种食材之间关系的特征表示为食材之间关系的表征词的词向量组成的矩阵;
使用循环卷积神经网络,以食材之间关系的特征作为循环卷积神经网络的输入,训练人工标注的食材之间容克关系的数据。
进一步的,所述对采集的文本语料进行整体建模生成词向量,使文本语料中每个非停用词都对应一个固定长度的词向量,具体为:
使用词向量工具word2vec对采集的文本语料进行整体建模,将文本语料的所有非停用词映射到一个维度固定的词向量空间中,使每个非停用词都对应一个固定长度的词向量;其中,设非停用词的数量为n,词向量的空间维度为m,对于所有的非停用词{w1,w2,…,wn},其对应的词向量为{v1,v2,…,vn}。
进一步的,所述向量空间的维度为150~200维度。
进一步的,所述使用两个词向量之间的余弦相似度作为两个词向量所对应实体之间的相似度,具体为:
设两个词向量为s=(s0,s1,…,sm),t=(t0,t1,…,tm),利用下式计算两个词向量之间的余弦相似度:
其中,0≤i≤m。
进一步的,所述对于给定的两种食材,将两种食材之间关系的特征表示为食材之间关系的表征词的词向量组成的矩阵,具体为:
设两种食材的词向量分别为a和b,以及选取两个参数k0,k1;
有k0+1个辅助向量:
对于每个辅助向量vecki,在词向量空间中取最接近的k1个向量组成矩阵matki,则两种食材之间的特征表示为矩阵matk0,matk1…,matkk1的拼接,即k1(k0+1)个词向量的拼接;
每个辅助向量vecki最相近的k1个词向量可随意排序,通过打乱顺序若干次来扩大训练样本。
进一步的,所述使用循环卷积神经网络,以食材之间关系的特征作为循环卷积神经网络的输入,训练人工标注的食材之间容克关系的数据,具体为:
循环卷积神经网络分为四个部分:
第一部分由两个LSTM组成,输入是食材之间关系的表征词的词向量组成的矩阵,从两个方向分别记录上文和下文的记忆,输出是食材之间关系的所有表征词及其上下文记忆的拼接;
第二部分是循环卷积层,对每个表征词及其上下文拼接,使用同一个卷积映射到更小的维度;
第三部分是池化层,对于所有表征词及其上下文拼接的映射,池化后在每个维度都选取所有映射在此维度的最大值;
第四部分为sigmoid层,得到一个概率,越接近1说明越倾向于相克,越接近0说明越倾向于相容。
进一步的,所述方法还包括:
在训练后,通过对食材之间关系的表征词的词向量组成的矩阵中的词向量顺序打乱若干次,得到若干个表征词的词向量序列,输入循环卷积神经网络,并对结果进行集成投票,取出现最多的结果作为最终答案。
进一步的,所述采集中医体质学方面的资料作为文本语料,具体包括:
使用爬虫爬取网络上的中医体质学方面的资料作为文本语料;其中,所述中医体质学方面的资料包括健康博文和食材百科。
本发明相对于现有技术具有如下的有益效果:
1、本发明方法将任意两种食材之间关系的特征表示为一系列表证词的词向量组成的矩阵,这些词向量组成的矩阵在两种食材在词向量空间的夹角之间有一定的顺序性,从而可以使用RNN(循环神经网络)来达到更好的效果。
2、本发明方法采用了LSTM代替了一般的RNN(循环神经网络),从而达到更好效果,由于这种食材关系特征表示的词向量并不是全序的,比如同一个词向量序列中的词向量可以打乱顺序,因此可以打乱顺序若干次获得更多的样本以及在训练中通过打乱顺序对结果集成投票来提升准确率。
附图说明
图1为本发明实施例整个解决方案各部分的基本结构图。
图2为本发明实施例生成食材之间关系的特征词向量组的一个二维实例。
图3为本发明实施例循环卷积神经网络的结构图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
实施例1:
如图1所示,本实施例的食材之间容克关系的分类方法包括以下步骤:
(一)采集健康博文和食材百科等资料作为文本语料
使用爬虫爬取网络上健康博文和食材百科等中医体质学方面的资料作为文本语料。
(二)对采集的文本语料进行整体建模生成词向量,使文本语料中每个非停用词都对应一个固定长度的词向量
本实施例的“词向量”是指2013年Google提出的基于神经网络词嵌入建模算法和它的建模工具word2vec,词向量模型是一种将词转化成词向量的模型,最简单的词向量模型是one-hot模型,它将每一个词对应一个不同的维度,每一个词对应的词向量则是该词对应的维度位置为1,其余维度为0的向量,而近年兴起的word2vec工具训练出来的词向量不但压缩了维度还使得相关相近的实体在词向量空间中的余弦相似度也比较高,这使得该模型在NLP(Neuro-Linguistic Programming,神经语言程序学)领域的词特征表示中得到广泛应用。
本实施例使用python库gensim提供的词向量工具word2vec对采集的文本语料进行整体建模(建立的模型为model),将文本语料的所有非停用词映射到维度为160的词向量空间中,使每个非停用词都对应一个固定长度的词向量。
设非停用词的数量为n,对于所有的非停用词{w1,w2,…,wn},其对应的词向量为{v1,v2,…,vn}。
(三)使用两个词向量之间的余弦相似度作为两个词向量所对应实体之间的相似度
设两个词向量为s=(s0,s1,…,s160),t=(t0,t1,…,t160),利用下式计算两个词向量之间的余弦相似度:
其中,0≤i≤160,该余弦值最大说明相似度最高。
在查找与某个词向量相似度最高的词向量时,可以使用gensim中的model.most_similar这个API查找最相似的若干个词向量。
(四)对于给定的两种食材,将两种食材之间关系的特征表示为食材之间关系的表征词的词向量组成的矩阵
设两种食材的词向量分别为a和b,以及选取两个参数k0,k1。
有k0+1个辅助向量:
对于每个辅助向量vecki,在词向量空间中取最接近的k1个向量组成矩阵matki,则两种食材之间的特征表示为矩阵matk0,matk1…,matkk1的拼接,即k1(k0+1)个词向量的拼接。例如,k0=5,k1=5时,生成了veck0,veck1,veck2,veck3,veck4,veck5这6个辅助向量,如图2所示,每个辅助向量可以在词向量空间中取5个最接近的词向量,拼接起来时形成了30个词向量构成的矩阵的特征表示。
对于matki中的k1个词向量可以任意排列顺序拼接起来生成更多特征向量,从而生成更多的样本,比如通过打乱顺序15次,可以使得训练样本变为原来的15倍,从而提高算法准确率。
(五)使用循环卷积神经网络,以食材之间关系的特征作为循环卷积神经网络的输入,训练人工标注的食材之间容克关系的数据
使用python库keras构建循环卷积神经网络模型,循环卷积神经网络的结构如图3所示,分为四个部分:
第一部分由两个LSTM(Long Short-Term Memory,时间递归神经网络)组成,LSTM是一种特殊的RNN(Recurrent Neural Networks,循环神经网络),它比普通RNN好的地方在于它有一个忘记门可以控制忘记率,这就使得它可以选择性的记住很久之前它认为重要的信息,而普通的RNN则是保证了越近期的信息越清晰,越远的信息越模糊,这就使得普通的RNN总是把远的信息忘掉而不会分辨是否重要;LSTM目前有很多变种,近年来的研究都表明LSTM比普通的RNN效果要好,可以学习长期依赖信息,以下是LSTM的相关公式:
ft=σ(Wf[ht-1,xt]+bf)
it=σ(Wi[ht-1,xt]+bi)
ot=σ(Wo[ht-1,xt]+bo)
ht=ot*tanh(Ct)
设
ht=LSTM(xt,ht-1)
CLt=LSTM(dt-1,CLy-1)
CRt=LSTM(dy+1,CRt+1)
根据步骤(四),可知1≤t≤30,CL是一个从左到右的LSTM,CR是一个从右到左的LSTM,CL和CR的输出层维度都为160维;
两个LSTM的输入是食材之间关系的表征词的词向量组成的矩阵,从两个方向分别记录上文和下文的记忆,输出是食材之间关系的所有表征词及其上下文记忆的拼接,如下式:
xt=[CLt,dt,CRt]
即每个表征词与自己左边的上下文和右边的上下文构成x(1),x(2),…,x(t),…x(30),,每项的维度为480维;
第二部分是循环卷积层,对每个表征词及其上下文拼接,使用同一个卷积映射到更小的维度,如下式:
yt=tanh(W1xi+b1)
即降维映射到y(1),y(2),…,y(t),…,y(30),此时每项的维度为160维;
第三部分是池化层,对于所有表征词及其上下文拼接的映射,池化后在每个维度都选取所有映射在此维度的最大值,如下式:
z=maxyi
z的维度为160维;
第四部分为sigmoid层,得到一个概率,如下式:
zp~=W2z+b2
越接近1说明越倾向于相克,越接近0说明越倾向于相容。
通过对有序的文档的词向量放入LSTM得到上下文再使用卷积和池化,解决的问题是文档分类。
(六)在训练后,通过对食材之间关系的表征词的词向量组成的矩阵中的词向量顺序打乱15次,得到15个表征词的词向量序列,输入循环卷积神经网络,并对结果进行集成投票,取出现最多的结果作为最终答案。
综上所述,本发明方法能够准确、快速的判定食材之间的相容或相克关系,进而辅助食疗推荐系统,丰富食疗推荐系统的推荐的食品种类,并尽力排除食疗推荐系统推荐相克食物的隐患。
以上所述,仅为本发明专利优选的实施例,但本发明专利的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明专利所公开的范围内,根据本发明专利的技术方案及其发明构思加以等同替换或改变,都属于本发明专利的保护范围。