分享

Spark 高级分析:第六章第12,13节 多词查询

feilong 2018-7-6 10:31:22 发表于 连载型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 6277
本帖最后由 feilong 于 2018-7-6 12:24 编辑
问题导读

1.如何进行多词查询?
2.怎样使用Spark实现多词查询?
3
.奇异值分解和主要成分分析可以在哪些场景中使用?






上一篇:Spark 高级分析:第六章第10,11节 文档相关性和词文档相关性
http://www.aboutyun.com/forum.php?mod=viewthread&tid=24739&extra=



最后,如何使用多个词语来服务查询?查找与单个词相关的文档涉及从V中选择与该项对应的行,这等价于用一个非零项的项向量乘以V。 要移动到多个项,可以通过简单地用V乘以一个具有非零项的项向量来计算概念空间向量。为了维护原词文档矩阵使用的加权方案,将查询中的每一项的值设置为其逆文档频率。从某种意义上说,以这种方式进行查询就像用几个词语向文集添加一个新文档,将其表示为低秩的词文档矩阵近似的新行,然后发现它与这个矩阵中的其他条目之间的余弦相似性。
[mw_shl_code=scala,true]import breeze.linalg.{SparseVector => BSparseVector}
def termsToQueryVector(
terms: Seq[String],
idTerms: Map[String, Int],
idfs: Map[String, Double]): BSparseVector[Double] = {
val indices = terms.map(idTerms(_)).toArray
val values = terms.map(idfs(_)).toArray
new BSparseVector[Double](indices, values, idTerms.size)
}
def topDocsForTermQuery(
US: RowMatrix,
V: Matrix,
query: BSparseVector[Double]): Seq[(Double, Long)] = {
val breezeV = new BDenseMatrix[Double](V.numRows, V.numCols,
V.toArray)
val termRowArr = (breezeV.t * query).toArray
val termRowVec = Matrices.dense(termRowArr.length, 1, termRowArr)
val docScores = US.multiply(termRowVec)
val allDocWeights = docScores.rows.map(_.toArray(0)).
zipWithUniqueId
allDocWeights.top(10)
}
def printRelevantDocs(terms: Seq[String]) {
val queryVec = termsToQueryVector(terms, idTerms, idfs)
printIdWeights(topDocsForTermQuery(US, svd.V, queryVec), docIds)
}
printRelevantDocs(Seq("factorization", "decomposition"))
...
(K-factor (graph theory),0.04335677416674133), (Matrix Algebra,0.038074479507460755), (Matrix algebra[/mw_shl_code]

奇异值分解和它的姊妹技术主成分分析在文本分析之外有着广泛的应用。一种常见的识别人脸的方法,即特征脸,依靠它来理解人类外貌变化的模式。在气候研究中,它被用于从不同的噪声源(如树木年轮)中寻找全球温度趋势。迈克尔•曼恩(Michael Mann)著名的“曲棍球棒”(hockey stick)图表的使用,描绘了整个二十世纪气温的上升,实际上描绘了上述意义上的一个概念。奇异值分解和PCA在高维数据集的可视化中也很有用。通过将一个数据集还原到它的前两三个概念,它可以被绘制在一个人可以看到的图形上。

还有许多其他的方法可以用来理解文本的大范围。例如,一种称为潜在Dirichlet分配(LDA)的技术在许多类似的应用程序中很有用。作为一个主题模型,它从一个语料库中推断出一系列的主题,并为每个文档分配每个主题的参与程度。

已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条