|
|
By jeffye, on April 16th, 2008

Arthur Dempster, Nan Laird, and Donald Rubin. “Maximum likelihood from incomplete data via the EM algorithm”. Journal of the Royal Statistical Society, Series B, 39(1):1–38, 1977 [1].
Robert Hogg, Joseph McKean and Allen Craig. Introduction to Mathematical Statistics. pp. 359-364. Upper Saddle River, NJ: Pearson Prentice Hall, 2005.
Radford Neal, Geoffrey Hinton. “A view of the EM [...]
By jeffye, on April 14th, 2008

A Gentle Tutorial of the EM Algorithm and its Applicationto Parameter Estimation for GaussianMixture and Hidden Markov Models
教程:EM算法
EM算法即期望最大化算法,在统计自然语言处理中应用非常多,在这里向大家推荐一篇关于EM的教程,希望大家对EM能有所了解。下面是教程的摘要。
We describe the
maximum-likelihood parameter estimation problem and how the
Expectation-Maximization (EM) algorithm can be used [...]
By jeffye, on March 31st, 2008

Lucene本身并不支持更新, 所以只能选择先删除再新增记录。
lucene本身支持两种删除模式
1,DeleteDocument(int docNum) //指定文档标号自动删除
2,DeleteDocuments(Term term) //删除所有出现该term的文档
一般使用的是第二种
IndexReader reader = IndexReader.Open(path));
int count=reader.DeleteDocuments(new Term(“FieldName”,”Txt”));
Lucene的删除也就是一次搜索的过程.
备注:需要匹配删除的字段存储时不要进切词.
我的疑问:
1. 用以上方式就行索引更新,特别是当更新的数据非常多的时候,如何保证更新的同时提高查询服务?optimize()数据俩一大还是挺慢的,不能在短时间完成。
是否可以在更新的数据量很大时,直接生成新索引,然后更换查询的索引。
2. 用lucene实现在线查询,该如何做? 是否可以在内存中用生成索引, 同时查两个索引。等内存中索引到一定大小时,写到硬盘或就行合并,但这样索引合并的代价比较大。
知道的朋友,劳烦告诉我,3qs!
—————————–
该问题已经解决,其实Lucene中自带此功能, 如果要实现在线索引感觉还是在内存中保持Index比较方便。
索引修改后,要想保持查询同步,只需使用reopen()函数重新打开索引即可,这个函数实现速度较快。
下面是我的应用中一段程序,对应凑合看就行。
public void refreshSearcher() {
synchronized (searcher) {
try {
int preNum = searcher.maxDoc();
IndexSearcher[] searchers = new IndexSearcher[ireaderList
.size()];
ArrayList<IndexReader> list = new ArrayList<IndexReader>();
for (int i = 0; [...]
By jeffye, on February 18th, 2007

转:http://www.lucene.org.cn/read.php?tid=65
<搜索引擎的典型周期: 搜集数据->建立索引->应答搜索请求>无 论有多少精彩的应用, 这个印刷时代就诞生的公式都不会作废, 公式中最关键的成分是 1. 数据, 2.算法. 虽然二者中谁对结果质量更重要依然引起争论, 我的精力并未放在这两者上. 关于spider已有数本出名的专著, 算法原理的本质也早不是秘密, 这是搜索引擎必备的条件, 是基础设备而不是制胜的杀手锏. 面对一个活生生的搜索引擎, 研究这两者就像面对解剖台上的小白鼠, 却放下手术刀去查上课用的内脏图解. 我只注意实现, 实现是商业效率的体现, 这才是真刀真枪狼烟四起的地方.
抛开数据采集, 上边的周期分成两个相(phase), 1. Indexing(建立索引), 2.Searching(搜索). 还有一个现在看来显得古怪的词-检索, 图书馆系统大多用这个词. 中国人的词汇总是显得睿智, “索”本有求取寻找的意思, “索引”原本就是为搜索创造的. 那些题目是”倒排索引原理”大篇幅对索引和模式匹配进行比较的文章, 因此有些让人哭笑不得. 上述的两个phase正是lucene覆盖的范围(Lucene核心不提供crawler), 这两个phase一个用于生成索引(index), 一个用于从index取出数据, 可以看出Lucene的一切行为都和index有关. 幸好Lucene官方指南 Lucene in Action 在附录中用浅显的语言介绍了index的结构, 这让人了解Lucene怎么把一片片文档塞进去, 就像绞肉机把一片片五花肉里脊肉搅成肉酱. 但是有点遗憾的感觉: 搜索过程怎么把index中支离破碎的数据记录(index的结构用法着实很像数据库)恢复成检索结果? 就像主妇们怎么用屠夫的肉酱作出香喷喷的肉丸?
我从Query 的构造开始, 详细检验了Lucene处理Query的过程. 这种努力使我了解到index中的记录(就是数据库中的record概念), 如何在检索过程中起作用. 这是深入把握Lucene实现的基础, 若要对Lucene作基础的调整和改动, 自然缺不了这一步(这是我的动机之一). 这种探索也帮助我了解原始文档资料的各种属性如何决定搜索结果, 进一步的研究可以揭示出文档各属性的重要性以及文档对查询条件的敏感性, 从这里出发可以提炼出更普遍的原理, [...]
By jeffye, on February 18th, 2007

优先队列是非常常用的数据结构,搜索引擎获取top k个搜索结果时常用改结构,下面是lucene中的一实例。
PriorityQueue 实现一优先队列框架,实例非常简单,只需实现lessThan(Object a, Object b)方法即可,通过该方法可以控制大优先或小优先。
package org.apache.lucene.search;
/**
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the “License”);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to [...]
|
|