观察者模式之:数据分析的实例

很久没写技术型的日志了。再不续笔,思维就停滞了,这里以观察者为题写一些关于思维的东西。我不喜欢把大段大段的代码当做日志,本科忽悠导师的论文的写法自然无趣。
最近自己弄的一个小的代码,关于语义分析的。
与计算机图形处理的领域一样,计算机所能认识的无非就是两个人,一个叫“0” ,另一个叫“1”。无论是ascii编码的一字节字符,还是两字节编码的utf-8编码系统,计算机从来不会给予某些字特殊的待遇。
现在直奔需求:
计算机怎么判断某两句话是否含义相似。 我们以“近代历史上,中国的国父是谁?”和“请问,谁是中国近代史的国父”为例。计算机怎么判断这两句话事实上是同一句话(当然,don't try to find grammer errors)。
我们抛开计算机的迷雾不谈,先说说人类是怎么分析这两句话是否是相同的含义的。
首先,我们给这两句话分别断句,抽取出这两句话的词。第一句话的一种可能的抽取结果:“近代、历史、中国、国父、谁”。当然,这只是一种可能的抽取结果。换做别人肯能会有其他比较有趣的结果。同样第二句话的一种可能的抽取结果“请问、谁、中国、近代、历史、国父”。第二句话的抽取也有不同的方式,但是,第一句和第二句需要保持同样的抽取算法。
好,接下来用计算机化的术语来描述这个问题的解决方式:
我们将认为这两句话的抽取结果,也就是两句话的词存入数组中。得到数组
A:“近代、历史、中国、国父、谁”。
B: “请问、谁、中国、近代、历史、国父”。
剩下的就是模式与分类的一个简单分类方式 。这里我抛开置信区间与置信度这些太过概念性的术语不谈了。分别遍历数组A的成员,检查其在数组B中是否存在。如果数组A的成员全部存在于数组B,那么,A是B的一个子集--即A语义近似B。反过来,如果数组B的成员全部存在于数组A,那么,B是A的一个子集--即B语义近似A。
另外,在说说置信度的问题。
语义分析是很难用图像处理中的模式来描述的。我个人觉得不应该引入计算机图形处理中的置信度 的概念。举一个简单的例子来说:
“他很高” 与“他很不高”采用上面的处理流程就会出现“他、高”,“他、不、高”,如果说用统计学中的置信度来衡量这两句话的语义是否相近,很可能会给出“这两句话的语义近似度高达60%”之类的结果。
如果对词的抽取不懂的,请参考搜索引擎相关文章。 
posted @ 2012-11-04 22:53  songtzu  阅读(1351)  评论(0编辑  收藏  举报