可以使用哪种算法来查找常见的相邻词语/模式识别?

我的数据库中有一个大表,其中包含来自各种文本的单词,并按文本顺序排列。我想找到某些词语集合一起出现的次数/频率。

示例:假设我在许多文本中有这 4 个词:United | States | of | America。我将得到如下结果:

United States:50
United States of:45
United States of America:40

(这只是一个包含 4 个词的示例,但词语的数量可以少于或多于 4 个)。

有没有什么算法可以做到这一点或者与此类似?

编辑: 欢迎提供一些 R 或 SQL 代码来展示如何操作。我需要一个我需要做什么的实际例子。

表结构

我有两个表:Token,其中有 idtexttextUNIQUE 的,并且此表中的每个条目代表一个不同的单词。

TextBlockHasToken 是保存文本顺序的表。每一行代表文本中的一个单词。

它有 textblockid,它是 token 所属的文本块。sentence 是 token 所属的句子,position 是 token 在句子中的位置,tokenid 是 token 表的引用。


回答:

这被称为 N-gram;在您的情况下是 4-gram。它确实可以作为马尔可夫链的副产品获得,但您也可以使用滑动窗口(大小为 4)来遍历(线性)文本,同时更新 4 维“直方图”。

2011-11-22 更新:马尔可夫链是一种对转换到新状态的概率进行建模的方法,给定当前状态。这是“状态机”的随机等价物。在自然语言的情况下,“状态”由“前 N 个词”形成,这意味着您将先前的概率(在前 N 个词之前)视为等于 1。计算机人员最有可能使用树来实现 NLP 案例中的马尔可夫链。“状态”只是从根到当前节点所采用的路径,而后续单词的概率是当前节点的后代的概率。但是,每次我们选择一个新的子节点时,我们实际上都会向下移动树,并“忘记”根节点,我们的窗口只有 N 个词宽,这转化为树中 N 层深。

您可以很容易地看到,如果您像这样遍历马尔可夫链/树,则在任何时候,第一个词之前的概率为 1,第一个词之后的概率为 P(w1),第二个词之后 = P(w2) || w1,等等。因此,在处理语料库时,您构建了一个马尔可夫树(:= 更新节点中的频率),在旅程结束时,您可以通过 freq(word) / SUM(freq(siblings)) 来估计给定单词选择的概率。对于树中深度为 5 的单词,这是给定前 4 个词的单词的概率。如果您想要 N-gram 概率,您需要从根到最后一个单词的路径中所有概率的乘积

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注