学习令牌字典

数据挖掘 机器学习 nlp 文本挖掘 解析
2022-03-06 15:00:41

在处理以人类可读语言编写的文本时,通常第一步是标记化,其中我们有一个标记(单词)字典,我们将该字典中的每个子字符串折叠成一个标记。对于像英语这样的语言,字典是预先知道的。

就我而言,我想解析格式不基于任何人类语言的文件。我没有已知标记的字典;相反,我想学习这本词典。我确实有很多可以分析的样本数据。

给定许多示例文件,是否有生成字典的技术?

我希望出现在许多文件中的任何公共子字符串都是令牌的良好候选者,因此一个明显的方法是查找所有公共子字符串并将它们添加到字典中。然而,一个复杂的问题是没有等效的空格来分隔标记,因此似乎可能需要进行一些过滤以避免将短语(多个标记的序列)视为新标记。例如,假设我们有一个很大的英语写作语料库,除了所有的空格和标点符号都被省略了,我们试图从中推断出一本英语单词词典。我们可以自然地推断出“ARE”、“THE”和“HER”是合理的标记,因为它们经常作为子字符串出现。到目前为止一切都很好。但是,我们不希望算法将“ARETHE”添加到字典中,即使“ARETHE”出现得相当频繁,因为“ARETHE”只是两个标记“ARE”和“THE”的串联。我怀疑有可能检测到这一点,因为“ARETHE”的频率并不比“ARE”和“THE”频率的乘积高多少,但我不确定。有没有干净的方法来处理这种皱纹?

3个回答

实际上,您通常可以只拆分空格,删除标点符号和小写字母。这将提供您的令牌。例如,如果我有一个字符串“jdf asdsa sdfr”(没有英文),那么我可以导出标记 jdf、asdsa 和 sdfr。唯一事先知道的就是停用词(而且,不管它),它们确实来自英语词典。但是,在这种情况下,听起来您不需要停用词。我建议查看 python 中可用的以下库:

斯帕西

NLTK

Scikit-学习

你有办法评估结果吗?你怎么知道一个字符串在这种语言中是否确实是一个标记?

为了获得可能的令牌,我建议您尝试Huffman coding压缩算法。它构建的树将包含令牌。

  • 它将识别出“the”比预期的更频繁且值得压缩。
  • 它将识别“ARETHE”并不比“Are”“The”更频繁,并且不会浪费表示空间来压缩它。
  • 它是一种经典算法,因此您可能会找到许多合适的实现,并且能够快速分析您的数据。

此外,对于一起出现的单词,例如“wordsthatappeartogetherasone”,我建议使用 Microsoft Cognitive Services Bing Spell Check API。它具有分词功能。你可以在这里测试它:

https://www.microsoft.com/cognitive-services/en-us/bing-spell-check-api