3.1 评估帖子的关联性
从机器学习角度来看,原始文本的用处并不大。只有当我们把它转换为有意义的数值,才能传入机器学习算法,例如聚类。对文本的其他一般性操作,如相似性衡量,也与此类似。
3.1.1 不应该怎样
有一种文本相似性的衡量方式叫做Levenshtein距离,又叫做编辑距离。假设我们有两个单词:“machine”和“mchiene”。它们之间的相似度可以表示成将一个单词转换为另一个单词所需要的最少的必要编辑次数。在这个例子里,编辑距离是2,因为我们可以在“m”后面加一个“a”,并删掉第一个“e”。然而,这个算法比较耗时,它的运行时间受限于两个单词长度的乘积。
看看要处理的帖子,我们可以将整个单词看成字符,并在词语粒度上进行编辑距离计算。假设我们有两个帖子(为了简单起见,我们只考虑帖子的标题)——“How tformat my hard disk”和“Hard disk format problems”;我们得到编辑距离6(删除“how”“to”“format”“my”,然后在末尾加上“format”和“problems”)。因此,我们可以把两个帖子的差距表达为,把一段文本转化为另一段所需要增加或删除的词语个数。尽管这样可以使整个方法的速度提升不小,但时间复杂度依然是一样的。
即使它的运行速度已经足够快了,还有另外一个问题:“format”这个单词本来出现在了“hard disk”前面,修改后出现在了“hard disk”后面,所以它的编辑距离为2(先把这个词删掉,再把它加上)。因此我们定义的距离似乎还不够稳健,它没有把词语的重新排列考虑进去。
3.1.2 应该怎样
有一个比编辑距离更为健壮的方法叫做词袋 (bag-of-word)方法。它基于简单的词频统计;对每一个帖子中的词语,将它的出现次数记录下来并表示成一个向量。毫无疑问,这一步也叫做向量化。这里的向量通常很庞大,这是因为它包含的元素个数,跟出现在整个数据集中的词语数目一样多。考虑上述两个示例帖子,下面是词频统计:
词语 | 帖子1中的出现次数 | 帖子2中的出现次数 |
disk | 1 | 1 |
format | 1 | 1 |
how | 1 | 0 |
hard | 1 | 1 |
my | 1 | 0 |
problems | 0 | 1 |
to | 1 | 0 |
现在可以把帖子1和帖子2这两列看做两个简单向量。我们简单地计算所有帖子向量之间的欧氏距离,并选出最近的一个帖子(速度很慢,正如之前发现的那样)。同样,我们之后可以把它们当做特征向量在以下聚类步骤中使用。
1. 对每个帖子提取重要特征,并针对每个帖子存储为一个向量。
2. 在这些向量上进行聚类计算。
3. 确定每个待聚类帖子所在的簇。
4. 对每个簇,获取几个与待聚类帖子不同的帖子。这样可以提升多样性。
然而,在进行上述操作之前我们还有很多工作要做,而在做这些工作之前,我们需要一些数据。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论