【问题标题】:Text completion using Machine Learning使用机器学习完成文本
【发布时间】:2018-03-30 01:37:53
【问题描述】:

我有一个速记文本列表。全部用英语。是否有机器学习算法可用于扩展这些缩写?例如,如果简写是 'txt',它可能会建议 'text'、'context'、'textual' 等,并具有不同的惩罚值。

另外,当我选择正确的单词时,我希望它学会这一点,这样当我下次输入相同的速记时,我的选择会得到高评分。

编辑

具体来说,我尝试使用here 描述的这种语言模型,但它仅适用于最多两个级别的编辑。 “编辑”功能如下:

def edits1(word):
    "All edits that are one edit away from `word`."
    letters    = 'abcdefghijklmnopqrstuvwxyz'
    splits     = [(word[:i], word[i:])    for i in range(len(word) + 1)]
    deletes    = [L + R[1:]               for L, R in splits if R]
    transposes = [L + R[1] + R[0] + R[2:] for L, R in splits if len(R)>1]
    replaces   = [L + c + R[1:]           for L, R in splits if R for c in letters]
    inserts    = [L + c + R               for L, R in splits for c in letters]
    return set(deletes + transposes + replaces + inserts)

它基本上从一个字母开始,然后删除、转置、替换和插入字母(使用字母表中的字母)。

如何将其扩展到两个以上的编辑?

【问题讨论】:

  • 您问题的第一部分并不是真正的机器学习,只是将扩展映射到替换。第二部分是机器学习。
  • 欢迎来到 Stack Overflow,请查看:stackoverflow.com/help/how-to-ask
  • 您可能的条目数据集中有多少种不同的速记文本输入字符串?
  • 未定义简写文本输入的数量。真的可以是任意长度

标签: python r machine-learning nlp n-gram


【解决方案1】:

第一部分与生成单词有关,第二部分与对这些单词进行排名(并更新这些排名)有关。我将依次讨论这两个部分,并尝试指出任何机器学习,因为这是原始问题的一部分。

对于第一部分,我认为您不需要机器学习,并且诚然考虑过这一点,在这部分使用 ML 似乎是不自然的。我认为您可以通过结合使用同义词的首字母缩略词词典取得良好的进展。

  1. 例如,首先在this 等列表中查找“txt”,该列表将“text”列为“txt”的扩展。
  2. 获取“文本”并查找同义词。您可能希望将同义词限制为与原始首字母缩略词相似的同义词,即包含与“txt”的编辑距离较小的子字符串或包含首字母缩略词字典(“文本”)中的首字母缩略词。 看看这个post,了解如何使用 NTLK 查找 Synset。

这里的重要部分是涵盖您将遇到的所有首字母缩写词,因此您可能希望允许用户输入缺少的首字母缩写词和这些首字母缩写词的扩展名。

对于第二部分,您可能希望结合两种评分算法为每个单词分配一个分数,并根据它们的分数对单词进行排名。

第一个评分算法应该是在没有任何用户数据的情况下工作的东西,这样一开始你就有了一些半智能的单词排序。一个例子是根据单词对首字母缩略词的编辑次数对单词进行评分。因此,对于首字母缩略词“txt”,“textual”的得分会低于“text”,因为从“txt”到“textual”需要更多的字母。

当您获得更多用户数据时,第二个评分算法将接管。您可以使用的一个示例是跟踪每个单词的流行度(即选择它的次数)。见Online machine learning

通过学习的线性函数将这两个分数组合成最终分数(参见Linear Regression)。

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 2017-12-18
    • 1970-01-01
    • 2021-06-17
    • 2020-02-08
    • 2019-06-13
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多