基于关键词组对文本进行分类?

tec*_*cal 6 algorithm text-processing nlp

我有一个软件项目的要求列表,由其前身的遗体组装而成.每个要求应映射到一个或多个类别.每个类别都包含一组关键字.我想要做的是找到一个算法,它会给我一个分数排名,每个要求可能属于哪个类别.结果将用作进一步分类要求的起点.

举个例子,假设我有这个要求:

系统应将存款应用于客户的指定帐户.

和类别/关键字:

  1. 客户交易:存款,存款,客户,账户,账户
  2. 余额账户:账户,账户,借方,贷方
  3. 其他类别:foo,bar

我希望算法在类别1中得分最高,在类别2中得分较低,而在类别3中得不到.评分机制与我无关,但需要表达的类别1比第2类更有可能.

我是NLP的新手,所以我有点不知所措.我一直在阅读Python中的自然语言处理,并希望应用一些概念,但没有看到任何非常适合的东西.我认为简单的频率分布不会起作用,因为我正在处理的文本很小(一个句子).

pou*_*def 6

您可能想要查看“相似性度量”或“距离度量”的类别(用数据挖掘术语来说,这与“分类”不同。)

基本上,相似性度量是一种数学方法,您可以:

  1. 取两组数据(在你的情况下,单词)
  2. 做一些计算/方程/算法
  3. 结果是您有一些数字可以告诉您该数据有多“相似”。

对于相似性度量,这个数字是一个介于 0 和 1 之间的数字,其中“0”表示“根本没有匹配”,“1”表示“相同”

所以你实际上可以把你的句子想象成一个向量——你句子中的每个词都代表这个向量的一个元素。对于每个类别的关键字列表也是如此。

然后你可以做一些非常简单的事情:取“余弦相似度”或“ Jaccard索引”(取决于你如何构建数据。)

这两个指标的作用是采用两个向量(您的输入句子和您的“关键字”列表)并给您一个数字。如果您在所有类别中执行此操作,您可以对这些数字进行排名,以查看哪个匹配项具有最大的相似系数。

举个例子:

从你的问题:

客户交易:存款、存款、客户、账户、账户

所以你可以构造一个包含 5 个元素的向量:(1, 1, 1, 1, 1)。这意味着,对于“客户交易”关键字,您有 5 个词,并且(这听起来很明显)每个词都出现在您的搜索字符串中。跟我在一起。

所以现在你接受你的句子:

系统将存款应用到客户的指定账户。

这有来自“客户交易”集中的 2 个词:{deposits, account, customer}

(实际上,这说明了另一个细微差别:您实际上有“客户”。这是否等同于“客户”?)

你的句子的向量可能是 (1, 0, 1, 1, 0)

这个向量中的 1 与第一个向量中的 1 的位置相同——因为这些词是相同的。

所以我们可以说:这些向量有多少次不同?让我们比较:

(1,1,1,1,1) (1,0,1,1,0)

嗯。它们有 3 次相同的“位”——在第 1、第 3 和第 4 位。它们仅相差 2 位。所以假设当我们比较这两个向量时,我们的“距离”为 2。恭喜,我们刚刚计算了汉明距离!汉明距离越小,数据越“相似”。

(“相似性”度量和“距离”度量之间的区别在于前者是标准化的 - 它为您提供 0 到 1 之间的值。距离只是任何数字,因此它只为您提供一个相对值。)

无论如何,这可能不是进行自然语言处理的最佳方法,但就您的目的而言,它是最简单的,并且实际上可能对您的应用程序非常有效,或者至少作为起点。

(PS:“分类” - 正如你在标题中所说 - 将回答这个问题“如果你接受我的句子,它最有可能属于哪个类别?”这与说“更相似的程度有多大不同?”我的句子属于第 1 类而不是第 2 类?”这似乎是您所追求的。)

祝你好运!