1

这可能是一个相当基本的 NLP 问题,但我手头有以下任务:我有一组文本文档,我需要根据可能是 1-、2-、3- 等的(英语)术语词典对这些文档进行评分N-字长。N受一些“合理”数字的限制,但字典中各种术语的各种值的分布n = 1, ..., N可能相当均匀。例如,该词典可以包含特定类型的设备列表,我想查看给定文档是否可能与这些设备中的任何一个有关。因此,如果文档中的任何词典条目出现一次或多次,我想给它打高分。

在考虑词典中可能出现的各种形式的单词的同时进行评分的标准 NLP 技术是什么?输入文档和词典都需要什么样的预处理才能执行评分?有哪些用于预处理和评分的开源工具?

4

1 回答 1

2

大约一年前, 我学习了LSI和主题建模,所以我所说的应该仅作为一个指针,让您大致了解在哪里寻找。

有许多不同的方法可以取得不同程度的成功。这是信息检索领域的难题。您可以搜索主题建模以了解不同的选项和最新技术。

如果单词可以以不同的形式出现,您肯定需要一些预处理和规范化。NLTK 和它的一个词干分析器怎么样:

>>> from nltk.stem.lancaster import LancasterStemmer
>>> st = LancasterStemmer()
>>> st.stem('applied')
'apply'
>>> st.stem('applies')
'apply'

你有一个术语词典,我将称之为术语,还有一堆文档。我将探索一种非常基本的技术来根据术语对文档进行排名。您可以阅读大量更复杂的方法,但我认为如果您不是在寻找过于复杂和严格的东西,这可能就足够了。

这称为向量空间 IR 模型。术语和文档都被转换为 k 维空间中的向量。为此,我们必须构建一个逐个文档矩阵。这是一个样本矩阵,其中的数字表示文档中术语的频率:

在此处输入图像描述

到目前为止,我们有一个 3x4 矩阵,每个文档可以使用该矩阵由一个 3 维数组(每列)表示。但是随着术语数量的增加,这些数组变得太大并且越来越稀疏。此外,在大多数文档中出现了许多诸如I或之类的词,而没有添加太多语义内容。and所以你可能想忽略这些类型的词。对于大和稀疏的问题,您可以使用一种称为SVD的数学技术,在缩小矩阵的同时保留其包含的大部分信息。

此外,我们在上图中使用的数字是原始计数。另一种技术是使用布尔值:1 表示存在,0 表示文档中没有术语。但是这些假设单词具有相同的语义权重。实际上,稀有词比普通词更有分量。因此,编辑初始矩阵的一个好方法是使用诸如tf-id 之类的排名函数来为每个术语分配相对权重。如果现在我们已经将 SVD 应用于我们的加权逐个文档矩阵,我们可以构建 k 维查询向量,它们只是一个词权重的数组。如果我们的查询包含同一术语的多个实例,则将使用频率和术语权重的乘积。

我们需要从那里做的事情有点简单。我们通过分析它们的余弦相似性来比较查询向量和文档向量,这将是文档相对于查询排名的基础。

于 2015-10-22T01:27:36.497 回答