我正在尝试为文档聚类实现期望最大化算法。我打算使用Lucene Term Vectors来查找2个文档之间的相似性。使用朴素贝叶斯有两种EM算法:多变量模型和多项式模型。简单来说,多项模型使用文档中不同单词的频率,多变量模型只使用文档中是否存在单词的信息(布尔向量)。
我知道Lucene中的术语向量存储当前文档中存在的术语及其频率。这正是多项模型所需要的。
但多变量模型需要以下内容: 存储或不存在特定术语的向量。因此,所有文件中的所有术语都必须由此向量处理。
举个例子:
doc1:field CONTENT具有以下术语:这是一个愉快的世界。
doc2:field CONTENT有以下术语:这个神奇的世界充满了讽刺的人。
现在我需要的矢量应该是
<这是令人惊叹的充满讽刺的人的世界> (它包含所有文件中的所有单词)
对于doc1,此向量的值为< 1 1 1 1 1 0 0 0 0>
对于doc2,该向量的vakue为< 1 1 0 1 0 0 1 1 1 1>
有没有办法在Lucene中生成这样的布尔矢量?
答案 0 :(得分:2)
我首先生成多项式向量,然后处理它们(可能是它们的文本表示)以获得多元向量。
如果文档集不是很小,则存储完整的向量是浪费的。您应该有一个稀疏表示,因为每个文档都包含一小部分可能的术语。
This blog post描述了从Lucene / Solr文档生成特征向量,尽管我认为它不会比你已经做的更远。