应用NLP:如何根据多词词汇对文档进行评分?

应用NLP:如何根据多词词汇对文档进行评分?,nlp,matching,n-gram,scoring,lexicon,Nlp,Matching,N Gram,Scoring,Lexicon,这可能是一个相当基本的NLP问题,但我手头有以下任务:我有一个文本文档集合,我需要对一个(英语)词汇表中可能有1、2、3-etcN-单词长的词汇进行评分N以某个“合理”的数字为界,但是对于N=1,…,N的各种值,词典中各种术语的分布可能相当均匀。例如,这个词典可以包含一个特定类型的设备列表,我想看看给定的文档是否可能与这些设备有关。因此,如果一个文档中出现了一个或多个词汇条目,我想给它打个高分(er) 在对词典中可能出现的各种形式的单词进行评分时,什么是标准的NLP技术?输入文档和词典都需要什么

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

在对词典中可能出现的各种形式的单词进行评分时,什么是标准的NLP技术?输入文档和词典都需要什么样的预处理才能进行评分?什么样的开源工具既可以用于预处理,也可以用于评分?

我差不多在一年前研究过主题建模,所以我所说的应该仅仅作为一个指针,让您大致了解应该在哪里查找

有许多不同的方法可以做到这一点,并取得不同程度的成功。这是教育领域的一个难题。您可以搜索以了解不同的选项和最新技术

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

>>> from nltk.stem.lancaster import LancasterStemmer
>>> st = LancasterStemmer()
>>> st.stem('applied')
'apply'
>>> st.stem('applies')
'apply'
你们有一个术语词典,我称之为术语,还有一堆文档。我将探索一种非常基本的技术,根据术语对文档进行排序。你可以读到无数更复杂的方法,但我认为如果你不想寻找太复杂和严格的东西,这可能就足够了

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

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

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


我们需要从那里做的事情有点直截了当。我们通过分析查询向量和文档向量,将它们进行比较,这将是文档相对于查询进行排序的基础

您可能希望搜索术语“lemmatizing”——在一个标题(引理或词根)下组合单词的几种形式。如果你扫描标签,你会发现很多工具参考:MLlib、SciKit Learn、SCLearn等等。开源中一个相当新的工具是可信分析平台(我在软件团队中)。