曾经花了一个月的时间阅读受推荐的书籍《数学之美》,对基于统计的自然语言处理的历史作一个大致的了解,每周精读一章,做下了一些粗略的笔记,算是有个交代吧。
第9章-图论和网络爬虫
概念
图论起源于1736年哥尼斯堡七桥问题,欧拉把陆地抽象成顶点,把桥抽象成边,当时这样一种抽象思维属于开创性的。
图由一些节点和连接这些节点的弧组成,数据结构上表示多对多的关系。
图的遍历算法:以广度优先遍历Breath-First-Search和深度优先遍历Depth-First-Search访问到所有的节点。
- BFS以队列实现,“湖面丢进一块石头激起层层涟漪”
- DFS以递归实现,“不撞南墙不回头”
- visited标志,记录已经访问过的点,避免遗漏和重复
七桥问题抽象图
联系
复杂的互联网抽象为一张大图,把网页看作节点,把指向性的超链接看作连接网页的弧。网络爬虫即用图的遍历算法自动地访问到每一个网页并把它们存起来。可理解为模仿人去浏览并保存网页,但要更加全面、快速,工作量可以非常庞大。
“全面”需要设计合理的遍历策略,使用哈希表来记录网页是否下载过的信息。
“快速”需要建立起高速的网络连接、成千上万的服务器集群、协调诸多服务器的任务。
延伸
- 欧拉七桥:将每座桥走一遍并回到原出发点。
(定理:如果一个图能够从一个顶点出发,每条边不重复的遍历一遍回到这个顶点,那么每一z顶点的度必须为偶数。)
进入和离开顶点的次数是相同的,所以进入的边和离开的边要成对出现。
*一笔画图形的必要条件是:奇点数目是0或者2。 - 爬虫要点:
该问题应该定义为“如何在有限时间里最多地爬下最重要的网页”。
1、BFS可优先下载首页最重要的链接。DFS可有效减少握手的次数,一次挖掘整个网页所有超链接,提高效率。调度系统负责管理下载优先级排序。
2、一些页面必须运行脚本才能获取隐含URL,故网络爬虫的解析程序没能成功解析网页中不规范的脚本程序。完全模拟一个真实的浏览器的行为需要浏览器内核工程师的帮助。
*反爬虫:User-Agent、验证码、蜜罐技术(故意设置爬虫陷阱)、加密等。 - 如何维护一张统一的哈希表,同步通信问题。
1、调度系统明确给各服务器进行分工,负载均衡。
2、批量查询、批量更新哈希表,减少通信次数。
第14章 余弦定理与新闻的分类
如何联系
首先是把新闻转变成一组数字,新闻的主题与频率高的词汇相关,把新闻中的所有实词计算出它们的TF-IDF值(关键字权重
n
N
∗
l
o
g
2
D
a
D
w
\frac{n}{N}*log_2\frac{D_a}{D_w}
Nn∗log2DwDa),这些值形成一个向量,作为该新闻的一个特征向量。
接着,判定两篇新闻的特征变量之间的相似性,而余弦定理能够等价成两个向量的夹角的计算,以夹角0度表示完全相同,夹角90度(正交)表示毫不相关。
最后,可以直接计算与已知分类的特征向量的差异,也可利用设定阈值、多次归并的方式逐渐获得一定程度的聚类。
另外,存储向量长度、剔除零元素和虚词能有效降低计算的量级,对重要位置额外加权。
TF-IDF
这是搜索关键词权重的科学度量:该算法是一种统计方法,用以评估一字词对于一个文本集(语料库)中的其中一份文本的重要程度,理解为词对主题的反映程度,打上最重要的标签。如如何确定网页和查询的相关性。
- TF(Term Frequency)词频 n N \frac{n}{N} Nn 。对关键词的次数进行归一化,以防偏向于长文本。简单相加,忽略“停止词”(对确定主题没有用处的)
- IDF(Inverse Document Frequency)逆文本频率 l o g 2 D a D w log_2\frac{D_a}{D_w} log2DwDa 。度量一个词的普遍重要程度。如果包含某个词语的文本越少,则IDF值越大,说明该词语具有很好的类区分能力。
词的重要性随着它在文本中出现的次数成比增加,但同时会随着它在语料库中出现的频率成反比下降。总的来说,倾向于过滤掉常见的词语,保留重要的词语。
不足
但是这个也不是完美的:
- 单纯以词频衡量一个词的重要性,不够全面。对于新词给予一个较大的权重是否合适。
- 无法体现词的位置信息,导致出现位置靠前的词与出现位置靠后的词,都被视为重要性相同。
- 严重依赖语料库,同类文本的关键词被掩盖。
延伸
反映一个词对查询来讲提供了多少信息,即用词信息量作为权重。
因为一个词在语言中的真实概率分布是不可知的,只能进行估计。
作了两个理想的假设:
假设1:每篇文档大小基本相同,都为M个词。
假设2:一个词如果出现在文档中,则在每个文档中出现的次数都相同,c(w)或者0。
IDF 的概念就是一个特定条件下、关键词的概率分布的交叉熵
信息量
I
=
−
l
o
g
(
p
x
)
I=−log(p_x)
I=−log(px) ;熵
H
(
x
)
=
−
Σ
i
=
1
n
P
x
l
o
g
(
P
x
)
H(x)=−\Sigma_{i=1}^nP_xlog(P_x)
H(x)=−Σi=1nPxlog(Px)
相对熵KL散度
交叉熵
第24章 马尔可夫链的扩展–贝叶斯网络
概念
- 马尔可夫链:描述一种状态序列,其每个状态值只取决于前面有限个状态。对实际错综复杂问题的粗略简化。满足Markov假设。
- 贝叶斯网络:一种有向无环图和一个条件概率表集合。节点代表随机变量,节点间的有向边代表了节点间的互相关系(由父节点指向其子节点),用条件概率进行表达关系强度,没有父节点的用先验概率进行信息表达。在网络中每个节点的概率计算都可以用贝叶斯公式进行,因而得名贝叶斯网络。
因弧上附加量化的可信度(权重),又称信念网络(Belief Networks),目前不确定知识表达和推理领域最有效的理论模型之一。
- 贝叶斯网络的拓扑结构比马尔可夫链灵活,不受马尔科夫链的链状结构的线性约束,更准确的描述事件之间的相关性。马尔可夫链是贝叶斯网络的特例,贝叶斯网络是马尔可夫链的推广。
断言每一个节点在其直接前驱节点的值制定后,这个节点条件独立于其所有非直接前驱前辈节点。
- 朴素贝叶斯:各个特征值之间彼此独立,且对被解释变量的影响一致,不能进行变量筛选,(各个特征值同等重要);对于给出的待分类项,会选择条件概率最大的类别。
使用贝叶斯网络必须先确定网络的拓扑结构,还要知道各个状态之间相关的概率。进行结构训练和参数训练。训练复杂度为NPC问题
在词分类中的应用
对每个词以文本作为维度,建立一个向量,再进行向量的聚类,那么得到的是对词的一个分类而不是对文本的分类,这里分出来的每一类称为一个概念(主题)。
一个概念可以包含多个词,一个词也可以属于多个概念,相似地,文章、概念、关键词存在多对多的联系。文章和关键词本身有直接的关联,它们两者都还和概念有直接关联,同时它们通过主题还有间接的关联。还可挖掘更多的相关性。Rephil将上百万关键词聚合成若干概念的聚类,考虑的关键词的相似性由原来的在文本中同现扩展成在上下文中同现,同时支持不同颗粒的概念,用于广告匹配和搜索中。
贝叶斯网络的训练
- 确定随机变量间的拓扑关系,形成DAG。这一步通常需要领域专家完成,而想要建立一个好的拓扑结构,通常需要不断迭代和改进才可以,需要用到机器学习得到。
- 优化的贝叶斯网络要保证其产生的序列从头到尾可能性最大。但是产生一个序列可以有多条路径,从理论上讲,需要完备搜索,考虑每一条路径,得到全局最优。但这样计算的复杂度是NP-Hard。
信息学相关
P问题能够保证存在多项式时间求解算法。NP问题不确定是否存在多项式时间求解算法,但确定存在多项式时间验证算法。NP-Hard问题和NPC问题都要求能够在多项式时间内规约成另外一个问题,这里的规约表示将一个问题一般化,最一般问题能多项式时间求解那原问题也能求解。
NP-Hard问题不一定是NP问题,有可能是不可判定问题,如停机问题。
NP=P猜想:是否所有能在多项式时间内验证得出正确解的问题,都是具有多项式时间求解算法的问题
NPC问题目前没有多项式的有效算法,只能用指数级甚至阶乘级复杂度的搜索O(c^n)、O(n!)。
NP-Hard放宽了限定条件,它将有可能比所有的NPC问题的时间复杂度更高从而更难以解决。
第26章 维特比和维特比算法
概念
维特比算法:篱笆网络的有向图的最短路径问题,隐含马尔可夫模型的解码算法,一种动态规划算法。
解决的问题:隐马尔可夫模型的预测问题,即给定观测序列,求最有可能的对应的状态序列。
x
i
x_i
xi 是状态序列,
y
i
y_i
yi 是观测序列。
1、假设隐藏的马尔可夫链在任意时刻t的状态只依赖于其前一时刻的状态;(转移概率)
2、观测独立性假设:假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关。(产生概率)
例子
以拼音对应汉字为例。穷举路径数目以指数式增长。
分解成一个个子问题:
假定从起点S到状态i上各个节点的最短路径已经找到并且有所记录,那么计算从S到第i+1状态的的某个节点的最短路径时,只要考虑从S到前一个状态i所有K个节 点的最短路径,以及从这K个节点到
x
i
+
1
,
j
x_{i+1, j}
xi+1,j 的距离即可。
每一步的计算的复杂度O(
n
i
⋅
n
i
+
1
n_i⋅n_{i+1}
ni⋅ni+1),相邻状态的节点数目乘积。
整个算法复杂度O(
N
⋅
D
2
N⋅D^2
N⋅D2)
如输入按流方式,实时解码每个状态。
延伸
CDMA码分多址:同时同频通信
在此之前频分多址、时分多址的缺点,带宽利用率不足。
每个发送者有自己不同的密码(码元),过滤掉无法解码的信号(噪音),留下和自己密码对应的信号
其中码元必须相互正交
参考: