根据他使用的单词发现多个不同用户帐户后面的用户

Mar*_*Nuc 5 language-agnostic algorithm nlp

我想创建算法来区分在不同昵称下在论坛上写作的人.

目标是发现人们匿名注册新帐户到火焰论坛,而不是在他们的主帐户下.

Basicaly我正在考虑使用他们使用的单词并根据相似性或这些单词来比较用户.

用户使用单词

如图所示,user3和user4使用相同的单词.这意味着计算机背后可能有一个人.

很明显,所有用户都使用了许多常用词.所以我应该专注于"用户特定"的话.

输入是(与上图相关):

<word1, user1>
<word2, user1>
<word2, user2>
<word3, user2>
<word4, user2>
<word5, user3>
<word5, user4>
... etc. The order doesnt matter
Run Code Online (Sandbox Code Playgroud)

输出应该是:

user1
user2
user3 = user4
Run Code Online (Sandbox Code Playgroud)

我在Java中这样做,但我希望这个问题与语言无关.

有什么想法怎么做?

1)如何存储单词/用户?什么数据结构?

2)如何摆脱大家使用的常用词?我必须以某种方式忽略用户特定的单词.也许我可以忽略它们因为它们迷路了.我担心他们会隐藏"用户特定词汇"的显着差异

3)如何识别相同的用户? - 不知何故在每个用户之间计算相同的单词?

我非常感谢提前的每一条建议.

Fre*_*Foo 1

我推荐一种语言建模方法。您可以对每个用户帐户的单词训练语言模型(一元语法、二元语法、简约等)。这为您提供了从单词到概率的映射,即 0 到 1(含)之间的数字,表示用户使用您在完整训练集中遇到的每个单词的可能性。语言模型可以存储为对数组、哈希表或稀疏向量。网络上有很多用于拟合 LM 的库。

这种映射可以被认为是高维向量,就像信息检索的向量空间模型中文档被视为向量一样。然后,您可以使用KL 散度或任何流行的距离度量来比较这些向量:欧几里得距离、余弦距离等。两个用户向量之间的强相似性/小距离可能表明它们属于同一个用户。