algorithm - 根据关键字组对文本进行分类?

标签 algorithm nlp text-processing

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

举个例子,假设我有这样的需求:

The system shall apply deposits to a customer's specified account.

和类别/关键字:

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

我希望算法在类别 1 中对要求评分最高,在类别 2 中评分较低,而在类别 3 中完全不评分。评分机制与我无关,但需要传达类别 1 适用的可能性有多大比第 2 类。

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

最佳答案

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

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

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

对于相似性度量,这个数字是介于 0 和 1 之间的数字,其中“0”表示“完全不匹配”,“1”表示“相同”

因此,您实际上可以将句子视为一个向量 - 句子中的每个词都代表该向量的一个元素。对于每个类别的关键字列表也是如此。

然后您可以做一些非常简单的事情:取“cosine similarity”或“Jaccard index”(取决于您构建数据的方式。)

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

举个例子:

从你的问题:

Customer Transactions: deposits, deposit, customer, account, accounts

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

那么现在你来听听你的句子:

The system shall apply deposits to a customer's specified account.

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

(实际上,这说明了另一个细微差别:您实际上有“customer's”。这等同于“customer”吗?)

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

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

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

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

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

(“相似性”度量和“距离”度量之间的区别在于前者是标准化的——它给你一个介于 0 和 1 之间的值。距离只是任何数字,所以它只给你一个相对值.)

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

(PS:“分类”——正如你在标题中所说的那样——会回答“如果你接受我的句子,它最有可能属于哪一类?”这个问题,这与说“多少我的句子与第 1 类比第 2 类更相似?”这似乎是您所追求的。)

祝你好运!

关于algorithm - 根据关键字组对文本进行分类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1490061/

相关文章:

python - 坚持下载碎片以从 Huggingface 加载 LLM 模型

python - 如何在给定偏移量 ID 的情况下获取 WordNet 同义词集?

php - 使用 PHP 操作 ODT 文档(基本搜索和替换)

python - 在 Python 中进行文本处理时遇到问题

r - 如何将单词列表 (chr) 与数据帧中多列中的值进行比较,并在 R 中存在匹配时输出二进制响应

algorithm - 寻找范围内的东西

c - dcraw的gamma_curve实现的算法叫什么名字?

algorithm - 最小化图保持连通性

java - Java 开源拼写检查库

c++ - 等效于 C++ 中用于缓冲读取的 python 生成器