我最近正在研究一个使用各种单词缩写的数据集。例如,
wtrbtl = water bottle
bwlingbl = bowling ball
bsktball = basketball
在使用的约定方面似乎没有任何一致性,即有时他们使用元音有时不使用。我正在尝试为没有完整的语料库或完整的术语列表(即可以引入未明确知道的缩写)的缩写及其对应单词构建一个像上面那样的映射对象。为简单起见,说它仅限于您在健身房找到的东西,但它可以是任何东西。
基本上,如果您只看示例的左侧,在将每个缩写与相应的全文标签相关联方面,哪种模型可以进行与我们的大脑相同的处理。
我的想法已经停留在取出第一个和最后一个字母并在字典中查找它们。然后根据上下文分配先验概率。但是由于有大量的词素没有指示词尾的标记,我看不出它是如何分割它们的。
更新:
我还想到了结合几个字符串度量算法(例如匹配评分算法)来确定一组相关术语,然后计算集合中每个单词与目标缩写之间的 Levenshtein 距离。但是,对于不在主词典中的单词的缩写,我仍然一无所知。基本上,推断单词构造 - 朴素贝叶斯模型可能会有所帮助,但我担心使用上述算法导致的任何精度错误都会使任何模型训练过程无效。
感谢任何帮助,因为我真的被困在这个问题上。
最佳答案
如果您找不到详尽的词典,您可以构建(或下载)一个概率语言模型,为您生成和评估候选句子。它可以是字符 n-gram 模型或神经网络。
对于您的缩写,您可以构建一个“噪声模型”来预测字符遗漏的概率。它可以从语料库中学习(您必须手动或半手动地对其进行标记),辅音比元音更容易丢失。
拥有一个复杂的语言模型和一个简单的噪声模型,您可以使用 noisy channel 方法(参见例如 the article by Jurafsky 了解更多详细信息)将它们结合起来,以建议候选句子。
更新。我对这个问题很感兴趣并实现了这个算法:
- 语言模型(在指环王文本上训练的 5-gram 字符)
- 噪声模型(每个符号被缩写的概率)
- 束搜索算法,用于候选短语建议。
我的解决方案已实现 in this Python notebook .对于训练有素的模型,它具有像 noisy_channel('bsktball', language_model, error_model)
这样的接口(interface),顺便说一下,它返回
{'basket ball': 33.5, 'basket bally': 36.0}
.字典值是建议的分数(越低越好)。
对于其他示例,它的效果更差:对于 'wtrbtl' 它返回
{'water but all': 23.7,
'water but ill': 24.5,
'water but lay': 24.8,
'water but let': 26.0,
'water but lie': 25.9,
'water but look': 26.6}
对于'bwlingbl'它给出了
{'bwling belia': 32.3,
'bwling bell': 33.6,
'bwling below': 32.1,
'bwling belt': 32.5,
'bwling black': 31.4,
'bwling bling': 32.9,
'bwling blow': 32.7,
'bwling blue': 30.7}
但是,当在适当的语料库(例如体育杂志和博客;可能对名词进行过采样)上进行训练时,并且可能使用更宽泛的束搜索宽度,此模型将提供更相关的建议。
关于Python - 如何使用 NLP 从缩写文本中直观地理解单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43510778/