所以我正在学习自然语言处理课程,我需要创建一个三元语言模型来根据一些样本数据生成在一定程度上看起来“真实”的随机文本。
本质上需要创建一个“trigram”来保存各种 3 个字母的语法单词组合。我的教授暗示,这可以通过拥有我试图创建的字典字典来完成:
trigram = defaultdict( defaultdict(defaultdict(int)))
但是我收到一条错误消息:
trigram = defaultdict( dict(dict(int)))
TypeError: 'type' object is not iterable
我将如何创建一个 3 层嵌套字典或int
值字典的字典?
如果人们不知道如何回答,我猜人们会否决有关堆栈溢出的问题。我将添加一些背景知识,以便为那些愿意提供帮助的人更好地解释这个问题。
此三元组用于跟踪三字模式。它们用于文本语言处理软件,几乎无处不在自然语言处理“现在想想 siri 或谷歌”。
如果我们将字典的 3 级指定为dict1 dict2 和 dict3则解析文本文件并读取语句“The boy runs”将具有以下内容:
具有“the”键的 dict1。访问该密钥将返回包含密钥“boy”的 dict2。访问该键将返回包含键“运行”的最终 dict3,现在访问该键将返回值 1。
这象征着在本文中“男孩跑”出现了1次。如果我们再次遇到它,那么我们将遵循相同的过程并将 1 增加到 2。如果我们遇到“the girl walks”,那么 dict2 的“the”键字典现在将包含另一个“girl”键,其中 dict3 的键为“walks”,值为 1,依此类推。最终在解析大量文本(并跟踪字数)之后,您将拥有一个三元组,它可以根据它们在先前解析的文本中出现的频率来确定某个起始词导致 3 个词组合的可能性.
这可以帮助您创建语法规则来识别语言,或者在我的情况下创建看起来非常像语法英语的随机生成的文本。我需要一个三层字典,因为在 3 个单词组合的任何位置都可能有另一个单词可以创建一组完全不同的组合。我尽我所能解释三元组及其背后的目的……当然,我几周前刚刚讲过这门课。
现在……说了这么多。我将如何创建一个字典的字典,其基本字典在 python 中包含 int 类型的值?
trigram = defaultdict(defaultdict(defaultdict(int)))
为我抛出错误