使用 NLP 将速记文本转换为普通文本有哪些方法?例如“snr engr”到“高级工程师”?
我在网上找到的大多数文章都涉及使用预定义的速记到普通书写转换的字典,例如{'snr': '高级', 'engr': '工程师'}。有没有办法在没有预定义字典的情况下做到这一点?
David Dale 针对类似问题提供了非常详细的答案 Python - How to intuit word from abbreviated text using NLP?
为了快速阅读,我将他的答案复制粘贴到此处。如果您找不到详尽的词典,您可以构建(或下载)概率语言模型,为您生成和评估候选句子。它可以是字符 n-gram 模型或神经网络。
对于您的缩写,您可以构建一个“噪声模型”来预测字符遗漏的概率。它可以从语料库中学习(您必须手动或半手动标记它)辅音的丢失频率低于元音。
拥有复杂的语言模型和简单的噪声模型,您可以使用
噪声通道方法将它们组合起来(例如,请参阅Jurafsky的文章了解更多详细信息),以建议候选句子。
更新。我对这个问题充满热情并实现了这个算法:语言模型(根据指环王文本训练的字符 5-gram) 噪声模型(每个符号被缩写的概率) 束搜索算法,用于候选短语建议。 我的解决方案是在这个Python笔记本中实现的。对于经过训练的模型,它具有像noisy_channel
('bsktball', language_model, error_model)
这样的接口,顺便说一句,它返回
{'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}
但是,当在适当的语料库上进行训练时(例如体育杂志和博客;可能会对名词进行过采样),并且可能具有更宽泛的波束搜索宽度,该模型将提供更相关的建议。