bod*_*ydo 7 text nlp words similarity measure
我编写了一个测量文本重要性的应用程序.它需要一篇文章文章,将其分成单词,删除停用词,执行词干,并计算词频和文档频率.字频是衡量给定单词在所有文档中出现次数的度量,而文档频率是计算给定单词出现的文档数量的度量.
这是两个文章文章的示例:
第一条被分成了一些词语(后来阻止和删除停用词):
第二条分为两个词:
这两篇文章产生了以下词频和文档频率计数器:
fox (字频:3,文档频率:2)jump (字频:1,文档频率:1) another (字频:1,文档频率:1) hunter (字频:1,文档频率:1) see (字频:1,文档频率:1) 鉴于新的文章文章,我如何衡量本文与以前的文章有多相似?
我已经阅读了关于df-idf测量但是它不适用于这里,因为我正在删除停用词,因此像"a"和"the"这样的单词不会出现在计数器中.
例如,我有一篇新的文章文章说"猎人爱狐狸",我怎么想出一个措施,说这篇文章与之前看到的很相似?
另一个例子,我有一篇新的文章说"鹿很有趣",然后这篇文章是一篇全新的文章,相似性应为0.
我想我在某种程度上需要对词频和文档频率计数器值进行求和,但是什么是一个好的公式?
标准解决方案是应用朴素贝叶斯分类器,其在给定文档D的情况下估计C类的后验概率,表示为P(C = k | D)(对于二元分类问题,k = 0和1).
这是由训练集类标记的文件,在给定的文档计算先验估计d我们知道它的类Ç.
P(C|D) = P(D|C) * P(D) (1)
Run Code Online (Sandbox Code Playgroud)
朴素贝叶斯认为术语是独立的,在这种情况下你可以写P(D | C)为
P(D|C) = \prod_{t \in D} P(t|C) (2)
Run Code Online (Sandbox Code Playgroud)
P(t | C)可以简单地通过计算某个术语在给定类中出现的次数来计算,例如,您希望足球这个词在属于类(类别)体育的文档中会出现很多次.
当涉及到其他因素P(d) ,可以通过计算标记的文件有多少来自每个类特定估计的话,可能是你有更多的运动比文章财务的,它让你相信,有较高的可能性一份看不见的文件,分类为体育类别.
将因子重要性(idf)或术语依赖性等因素纳入等式(1)非常容易.对于idf,您可以将其作为术语采样事件添加到集合中(与该类无关).对于术语依赖性,您必须插入形式为P(u | C)*P(u | t)的概率,这意味着您对不同的术语u进行采样并将其更改(转换)为t.
Naive Bayes分类器的标准实现可以在Stanford NLP包中找到,Weka和Scipy可以在许多其他包中找到 .
您似乎正在尝试回答几个相关问题:
所有这些问题通常分两步解决:
功能工程和建模都有很多选项.这里仅仅是少数.
特征提取
可以预处理特征以减少其中的相对噪声量.预处理的一些选项是:
您无法事先知道哪个选项最适合您的特定应用 - 您必须进行实验.
现在您可以构建ML模型.4个问题中的每一个都有自己的好解决方案.
对于分类,研究得最好的问题,可以使用多种模型,包括朴素贝叶斯,k近邻,逻辑回归,SVM,决策树和神经网络.同样,您无法提前知道哪个会表现最佳.
这些模型中的大多数可以使用几乎任何类型的功能.但是,KNN和基于内核的SVM要求您的特征具有特殊结构:在欧几里德距离度量的意义上,一类文档的表示应该彼此接近.这有时可以通过简单的线性和/或对数归一化来实现(见上文).更困难的情况需要非线性变换,原则上可以通过神经网络学习.学习这些变换是人们称之为度量学习的东西,通常它是一个尚未解决的问题.
最传统的距离度量确实是欧几里德.然而,其他距离度量是可能的(例如曼哈顿距离),或不同的方法,不基于文本的向量表示.例如,您可以尝试根据将一个文本转换为另一个文本所需的操作数量计算文本之间的Levenstein距离.或者,您可以计算"单词移动距离" - 单词对与最近嵌入的距离之和.
对于群集,基本选项是K-means和DBScan.这两种模型都要求您的特征空间具有此Euclidean属性.
对于异常检测,您可以使用由各种概率算法产生的密度估计:分类(例如朴素贝叶斯或神经网络),聚类(例如高斯模型的混合)或其他无监督方法(例如概率PCA).对于文本,您可以利用顺序语言结构,估计每个单词在前一个单词条件下的可能性(使用n-gram或卷积/递归神经网络) - 这称为语言模型,它通常比bag-of更有效朴素贝叶斯的词假设,忽略了词序.几种语言模型(每个类一个)可以组合成一个分类器.
无论你解决什么问题,强烈建议使用已知的" 基本事实 "来设置一个好的测试集:哪些文档彼此接近,或属于同一类,或者(通常).使用此集,您可以评估特征工程和建模的不同方法,并选择最佳方法.
如果您没有资源或不愿意进行多次实验,我建议您选择以下方法之一来评估文本之间的相似性:
基于这些表示之一,您可以为其他问题构建模型 - 例如用于分类的KNN或用于聚类的k均值.
| 归档时间: |
|
| 查看次数: |
401 次 |
| 最近记录: |