一个马尔科夫链由一组状态组成,这些状态可以以一定的概率转移到其他状态。
在Neo4J中,可以通过为每个状态创建一个节点,为每个转换创建一个关系,然后使用适当的概率注释转换关系来轻松表示马尔科夫链。
但是,您能否使用Neo4J模拟马尔科夫链呢?例如,可以强制Neo4J从某个特定状态开始,然后根据概率进行转换到下一个状态和下一个状态吗?Neo4J能否返回打印出其通过此状态空间所经历的路径?
也许通过一个简单的例子更容易理解。假设我想基于我们公司的技术博客的文本创建一个英语2-gram模型。我启动一个脚本,执行以下操作:
在Neo4J中,可以通过为每个状态创建一个节点,为每个转换创建一个关系,然后使用适当的概率注释转换关系来轻松表示马尔科夫链。
但是,您能否使用Neo4J模拟马尔科夫链呢?例如,可以强制Neo4J从某个特定状态开始,然后根据概率进行转换到下一个状态和下一个状态吗?Neo4J能否返回打印出其通过此状态空间所经历的路径?
也许通过一个简单的例子更容易理解。假设我想基于我们公司的技术博客的文本创建一个英语2-gram模型。我启动一个脚本,执行以下操作:
- 它拉下博客的文本。
- 它遍历每一对相邻字母,并在Neo4J中创建一个节点。
- 它再次遍历每个由相邻3个字母组成的三元组,然后在表示前两个字母的节点和表示后两个字母的节点之间创建一个Neo4J有向关系。它在此关系上初始化一个计数器为1。如果关系已经存在,则计数器会增加。
- 最后,它遍历每个节点,计算出发生的总传输次数,然后在特定节点的每个关系上创建一个新的注释,等于
count/totalcount
。这是转移概率。
现在Neo4J图形完成了,如何从我的英语2-gram模型中创建一个“句子”呢?以下是输出示例:
IN NO IST LAT WHEY CRATICT FROURE BIRS GROCID PONDENOME OF DEMONSTURES OF THE REPTAGIN IS REGOACTIONA OF CRE.