Python – 如何使用NLP从缩写文本中直观推断单词?

我最近在处理一个使用各种单词缩写的数据库。例如,

wtrbtl = water bottlebwlingbl = bowling ballbsktball = basketball

似乎没有一致的缩写惯例,即有时使用元音,有时不使用。我试图构建一个类似于上面的缩写和相应单词的映射对象,但没有完整的语料库或全面的术语列表(即可能引入未明确知道的缩写)。为简单起见,假设它仅限于健身房中找到的物品,但实际上可以是任何东西。

基本上,如果只看示例的左侧部分,哪种模型可以像我们的大脑一样处理,将每个缩写与相应的完整文本标签关联起来。

我的想法停留在取首尾字母并在字典中查找这些字母。然后根据上下文分配先验概率。但由于有大量没有词尾标记的词素,我看不出如何将它们分开。

更新:

我还想到结合几个字符串度量算法,如匹配评级算法来确定一组相关术语,然后计算该组中每个单词与目标缩写之间的Levenshtein距离。然而,对于不在主字典中的单词的缩写,我仍然一头雾水。基本上,推断单词构造 – 或许Naive Bayes模型可以帮助,但我在使用上述算法时担心任何精度上的错误会使模型训练过程无效。

任何帮助都将不胜感激,因为我真的被这个问题困住了。


回答:

如果你找不到详尽的字典,你可以构建(或下载)一个概率语言模型,为你生成和评估句子候选。它可以是一个字符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}

然而,当在合适的语料库上训练(例如,体育杂志和博客;也许可以对名词进行过采样),并且可能使用更宽的波束搜索宽度时,这个模型将提供更相关的建议。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注