模型化机制
将一些事物的不同形态,制作成模型,然后将这些模型通过配置机制灵活的注入运转管理机制中,而且这样会大大降低用户的理解复杂度。同时也能够让程序以成本最低的方式进行扩展。
1
2
3
4
5
模型的选择
模型终归于模型,其不能完全对应于现实世界。所以,我们需要在不同的角度上去选择不同的模型。因为每种模型都具有其优缺点,我们只能够根据你目前的状况来选择模型,选择模型变得非常重要,当然我们也可以通过一定的验证和检测方面来验证此模型是否满足要求,例如我们可以用一些数学建模工具来完成一个Demo来模拟一下此模型是否能够达到我们的要求。然而,很多时候其检测和验证的手段也是有限的,而且这些手段也是具有多个不同的模型可供选择,因此其复杂性就不言而喻。
然而,我认为最好的方式是将不同的模型的物理意义进行概括,通过其物理意义来分析可能对使用什么的模型会大有帮助。下面我们就从文本分析的两个模型:向量空间模型和概率模型来演示我们是如何选择模型的。
向量空间模型大致的描述为:
我们把文档看作一系列词(Term)(就是进行分词算法后的词,后面Term都可以称为分词),每一个词(Term)都有一个权重(Term weight),不同的词(Term)根据自己在文档中的权重来影响文档相关性的打分计算。
于是我们把所有此文档中词(term)的权重(term weight) 看作一个向量
Document = {term1, term2, …… ,term N}
Document Vector = {weight1, weight2, …… ,weight N}
同样我们把查询语句看作一个简单的文档,也用向量来表示。
Query = {term1, term 2, …… , term N}
Query Vector = {weight1, weight2, …… , weight N}
我们把所有搜索出的文档向量及查询向量放到一个N 维空间中,每个词(term)是一维。我们认为两个向量之间的夹角越小,相关性越大。所以我们计算夹角的余弦值作为相关性的打分,夹角越小,余弦值越大,打分越高,相关性越大。
好,这里我们这样理解,首先所有的分词组成一个空间,这个空间是一个n维的空间,每一个维度就是一个分词,其某一维度上的长度就是其权重。而将一篇文档和一个搜索的语句都可以当成在这n维空间中的一些向量(连接坐标0点和空间点值的有方向的线段)。这两个向量是否相似(或者是是否匹配),就是通过使用其夹角的大小来描述的。
但是我们在处理夹角的时候是不方便的,于是我们就通过这个夹角的cos(余弦)来表示。这里大家就有疑问了,为什么要用余弦来表示呢?为什么不用正弦或其他来表示呢?cos是否违反了相关的物理意义,使结果值不正确呢?
其实,我们获取的最终结果不是其相似度下的打分值有多大,而是关心其排列的顺序谁先谁后,所以针对在[0,π)的定义域范围内,其θ1 < θ2 则cosθ1 > cosθ2一定成立,也就是这是一个单调函数,也就是说相识度越高,其cos值越小,其最后打分值也就越高,其到底用角度还是余弦表示都不影响其排序,只是值不同而已。另外为什么要用余弦来表示呢?因为使用余弦就可以使用向量的长度以及点乘的关系来表示了,方便了很多。另外使用cos而不使用sin是因为cos在[0,π)区间范围内是单调函数,而sin不是单调函数。
概率模型大致的描述为:
概率统计检索模型(Probabilistic Retrieval Model)是另一种普遍使用的信息检索算法模型,它应用文档与查询相关的概率来计算文档与查询的相似度。通常利用检索单元作为线索,通过统计得到每个检索单元在相关的文档集(对应于某询)中出现和不出现的概率以及其在与该查询不相关的文档集中出现和不出现的概率,最终,利用这些概率值,计算文档与查询的相似度。设文档D包含t个检索单元,分别记为(ω1,ω2,...,ωt),其中,ωi为第i个检索单元的权值,可以理解为该检索单元的出现为文档D与查询Q相关所作的“贡献”,文档D与查询Q的相似度则是t个包含在D中的检索单元“贡献”的组合。
在独立性假设的前提下,同时考虑检索单元出现在文档中的概率以及不出现在文档中的概率,对于给定的查询q 的某一个检索单元。
其中 N:文档集合中文档的总数; R:与查询q 相关的文档总数; n:含有检索单元ωi 的文档总数; r:与q 相关的文档中,含有检索单元ωi 的文档数。
对于概率模型主要是涉及到如何利用到香农的信息熵的处理,其通过信息熵的视角来分析其文本之间的可能出现的关系,其借助的样本空间就是人类在长期积累的文档信息,所以其理论的基础是现实中的实际数据,目前概率模型发展的速度非常的迅猛,其很多优秀的文本搜索和人工智能等平台都使用概率模型。
通过上面的模型我们就必然进行选择,不同的模型具有不同模型的优缺点,这些模型是否有基本的研究探讨都需要有一定的实验基础。而且模型的选择不仅仅基于其技术的优越性,而且还需要考虑我们本身的研究实力,如果我们不具备这样的能力储备,那么其模型的定型就必须考虑这样的因素,因为我们是工程师是需要搞出实际的产品,而不是进行理论的研究。所以需要站在一个现实的角度来考虑问题,任何人任何时刻都有历史的局限性,这一点对于决策者来说非常的重要。
模型的实现
经验公式:
在科学实验和生产实践中,经常要从一组实验数据出发,寻求函数y = f(x)的一个近似表达式y=φ(x),这个近似表达式就称为经验公式。
经验公式一般由拟合得到,没有完整的理论推导过程。
经验公式更趋向于应用,重要看其是否精确。
经验公式的领域非常的广阔,这里只是提及一下,我们在模型处理中需要大量的处理这些经验公式,而且处理过程也是非常复杂的,需要结合太多的环境信息进行推理、实验和对比,只是我们需要关注到经验公式是非常独特的,但是又是必须的,不是任何理论都能够现实化,连续、极限、无限等等我们都只能近似的模拟,离散的分析,而无法进行完全实现,同时不是任何模型我们都已经搞明白了,特别是一些概率存在的,无论选择什么样的值都是有问题的,因为这些是概率的值,所以经验公式就显得非常的重要,只要我们明白这些经验公式的限制场景、限制条件、有限的结论那么我们就能够在合适的时机使用好经验公式。
我们需要理解模型的一些物理意义,通过这些物理意义来分析其公式的有效性和符合性,其实就是使用加减还是乘积都是非常讲究的,我们可以通过一些原则来检验此算法是否合理。
例如:矩形面积 = 长 * 宽 ,而为什么直接可以使用乘积关系呢?因为长和宽两者之间的变化因素是独立的,这个独立性是基本,两个独立的因素在不同的维度上,而在坐标系中这两个因素就是90°的正交化,而在我们的多维空间中,只有两个因素呈现独立正交的情况下才能进行乘积的关系,因此上面公式的这些因素,如果在理论上不是独立正交的,那么可能其经验公式就存在问题,所以在所涉及到的算法中需要注意,这个变化的曲线的算法是否影响了独立正交性。
在模型的实现中我们需要看到有些处理是为了满足一些非法情况的出现,或者是为了让公式具有更大的使用范围或者更加方便的处理方式。
另外这里为什么使用log值呢?在信息熵中就是由log值来表示,当然使用ln或者其他为底的对数都是一样的(这可以通过信息熵相关的书籍中证明而知),另一方面使用对数处理中可以降低数域表示的范围,这主要是numDocs比docFreq+1的比值跨度过大。需要采用对数结果值能够让结果范围值更小,而这也不影响公式最后的结果。这和声音db以及能量db的表达方式是一样的道理。
在转换为程序代码的时候也需要注意,其也是充满了很多陷阱的,例如需要关注精度的情况下,使用int、float、double等是特别讲究的,例如int iCount = log(a + b),此代码在计算出结果以后是直接转化为int类型,小数点后面的值就直接去掉,但是更多时候我们需要的是小数点后面精度更高的结果。
系统误差:
在重复性条件下,对同一被测量进行无限多次测量所得结果的平均值与被测量的真值之差。
系统误差是与分析过程中某些固定的原因引起的一类误差,它具有重复性、单向性、可测性。即在相同的条件下,重复测定时会重复出现,使测定结果系统偏高或系统偏低,其数值大小也有一定的规律。例如,测定的结果虽然精密度不错,但由于系统误差的存在,导致测定数据的平均值显著偏离其真值。如果能找出产生误差的原因,并设法测定出其大小,那么系统误差可以通过校正的方法予以减少或者消除,系统误差是定量分析中误差主要来源。
在对同一被测量进行多次测量过程中,出现某种保持恒定或按确定的方法变化的误差,就是系统误差。
随机误差:
随机误差也称为偶然误差和不定误差,是由于在测定过程中一系列有关因素微小的随机波动而形成的具有相互抵偿性的误差。其产生的原因是分析过程中种种不稳定随机因素的影响,如室温、相对湿度和气压等环境条件的不稳定,分析人员操作的微小差异以及仪器的不稳定等。随机误差的大小和正负都不固定,但多次测量就会发现,绝对值相同的正负随机误差出现的概率大致相等,因此它们之间常能互相抵消,所以可以通过增加平行测定的次数取平均值的办法减小随机误差。
测量值的随机误差分布规律有正态分布、t分布、三角分布和均匀分布等,但测量值大多数都服从正态分布。
随机误差具有以下规律:
(1)大小性:绝对值小的误差出现的概率比绝对值大的误差出现的概率大。
(2)对称性:绝对值相等的正误差和负误差出现的概率相等。
(3)有界性:绝对值很大的误差出现的概率近于零。误差的绝对值不会超过某一个界限。
(4)抵偿性:在一定测量条件下,测量值误差的算术平均值随着测量次数的增加而趋于零。
模型的验证
同样模型的验证也是非常的复杂,而且也是具有很多理论根据,同时其在不同的领域进行验证的方案也不一样,这里就不再赘述,只是通过一些经验出发来抛砖引玉。
我们可以通过结果总体的趋势来判断是否合理,这可以结合到图像表格等辅助手段来判断验证我们的处理是否符合要求。
从上面表格可以看出,会出现一个异常值1,9的时候,所以我们的结果不是一个单调递减的函数,而是有一个突变,这违反事实。
在处理变量之间的关系,还需要了解到其相互之间的条件关系,这些条件关系可能是显性的也可能是隐形的,其制约关系可以通过在一些最大值或者最小值等情况给以更好的验证。
例如:对于两个变量之前的乘积关系,其实也并不是说只要保证成正比或者成反比的变化,就可以任意选择其值来处理,有一个公式大家都知道:
噪音数据指出现在某变量上的随机误差或变异。 不一致数据指在数据库中属性值相同的事例分属于不同的类的情况。
而我们针对噪音和不一致的数据需要从我们的验证数据清理出来,因为这些数据很可能影响我们的最终的结果,其实如何才能去除这些噪音呢?此处我只能说sorry,因为研究的较少,只是噪音的影响的确很大,必须引起大家的注意。
其实可以理解为白噪声是一个纯随机过程,也就是没有特征可寻,不存在相关性等等性质.在统计学中,我们建立回归方程,是希望提取越多的信息越好,也就是希望回归之后的残差项的信息完全提取完毕,那么残差项就是白噪声了.所以通常我们都会通过检验残差项的性质来判断回归方程的优劣.你可以先把回归模型的理论弄清楚.
用专业定义来讲:随机变量X(t)(t=1,2,3……),如果是由一个不相关的随机变量的序列构成的,即对于所有S不等于T,随机变量Xt和Xs的协方差为零,则称其为纯随机过程.对于一个纯随机过程来说,若其期望和方差均为常数,则称之为白噪声过程.
对于数学模型来说,从理论到应用需要翻越一个坎,而从模型到实现也需要翻越一个坎,本章无法给出如何进行数学模型的构建,这应该属于一个很大的领域,本章只是浅尝辄止给出了数学模型从模型到实现可能存在的困难,这些困难对于设计者来说,其实比数学模型的构建还要重要一些,随着专业化的分工不同,数学模型的构建是一些算法工程师安身立命的“本钱”,而对于软件设计的设计工程师来说,如何更加有效的将模型转化为设计才是他们安身立命的“本钱”。
参考资料
1. 百度搜索 网站:https://www.baidu.com
2. 互动百科 网站:http://www.baike.com
3. 《面向模式的软件体系结构(卷1):模式系统》 作者:Frank Buschmann / Regine meunier / Hans Rohnert / Peter Sommerlad / Michael Stal 译者:贲可荣 / 郭福亮 出版社:机械工业出版社 ;出版时间:2003年1月
4. 《深度探索C++对象模型 》 作者:Stanley B. Lippman ; 译者:侯捷 ;出版社:华中科技大学出版社 ;出版时间:2007年5月
5. 《线性代数的几何意义》 作者:任广千等 ;出版社:西安电子科技大学出版社 ;出版时间:2015年7月
6. 《线性代数及其应用》 作者:David C.Lay ;译者:刘深泉等 ; 出版社:机械工业出版社 ;出版时间:2005年8月
7. 《深入核心:VCL架构剖析》 作者:李维 ;出版社:电子工业出版社 ;出版时间:2004年2月
8. 《泛型编程与STL》 作者: Matthew H. Austern ;译者: 侯捷 ;出版社: 中国电力出版社;出版时间: 2003年1月
9. 《数据库系统导论》 作者:戴特 ;译者:孟小峰 ;出版社:机械工业出版社 ;出版时间:2007年7月
10. 《深入浅出MFC》 作者:侯俊杰 ;出版社:华中科技大学出版社 ;出版时间:2001年1月
11. 《计算机组成原理》 作者: 唐朔飞 ;出版社:高等教育出版社 ;出版时间:2008年1月
12. 《UNIX编程艺术》 作者: Eric S. Raymond ;译者:姜宏/何源/蔡晓骏 ;出版社:电子工业出版社 ;出版时间:2011年1月
13. 《编程原本》 作者:Alexander Stepanov / Paul McJones,译者:裘宗燕 出版社:机械工业出版社华章公司;出版时间:2012年1月
14. 《大规模C++程序设计》 作者: John Lakos ,译者:李师贤 / 明仲 / 曾新红 / 刘显明 等 出版社:中国电力出版社;出版时间:2003年9月
转载于:https://blog.51cto.com/13832308/2133228