【问题标题】:Applied NLP: how to score a document against a lexicon of multi-word terms?应用 NLP:如何根据多词词汇对文档进行评分?
【发布时间】:2016-01-19 11:29:44
【问题描述】:

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

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

【问题讨论】:

  • 您可能想要搜索术语“词形还原”——在一个标题(词根或词根)下组合单词的多种形式。如果您扫描machine-learning 标签,您会发现很多工具参考:MLlib、SciKit Learn、SCLearn 等。开源中一个相当新的工具是 Trusted Analytics Platform(我在软件团队中)。

标签: nlp matching n-gram scoring lexicon


【解决方案1】:

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

有许多不同的方法可以实现不同程度的成功。这是information retrieval 领域的难题。您可以搜索 topic modeling 以了解不同的选项和最新技术。

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

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

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

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

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

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

我们需要从那里做的事情有点简单。我们通过分析它们的cosine similarities 将查询向量与文档向量进行比较,这将是文档相对于查询的排名的基础。

【讨论】:

    猜你喜欢
    • 2021-01-27
    • 1970-01-01
    • 2018-08-21
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 2015-05-30
    • 2016-10-02
    相关资源
    最近更新 更多