R / python:从训练句

时间:2017-05-05 12:24:15

标签: python r nltk text-mining tm

我想要实现的目标:
我一直在寻找一种方法,但是我无法找到(有效的)方法:

  • 在考虑词序和同义词的同时,从例句构建模型。
  • 针对此模型绘制一个句子并获得相似度得分(因此得分表示该句子与模型的匹配程度,换句话说,拟合用于训练模型的句子)

我尝试了什么

  • Python: nltkgensim结合使用(据我可以编码和阅读它只能使用单词相似性(但不能接受顺序) 帐户)。

  • R:使用tm构建TermDocumentMatrix,看起来非常有前景,但无法将任何内容映射到此矩阵。此外,TermDocumentMatrix似乎考虑了顺序,但错过了同义词(我认为)。
    enter image description here
    我知道词形推理没有那么顺利哈哈哈:)

问题:
有没有办法使用R或Python实现上述步骤?一个简单的示例代码将很棒(或引用一个很好的教程)

1 个答案:

答案 0 :(得分:2)

有很多方法可以完成上面描述的操作,当然需要进行大量测试才能找到优化的解决方案。但是这里有一些有用的功能来帮助解决这个问题,使用python / nltk。

  

通过单词顺序和语句从例句构建模型   同义词。

<强> 1。标记化

在此步骤中,您需要将单个句子分解为单词列表。

示例代码:

import nltk
tokenized_sentence = nltk.word_tokenize('this is my test sentence')

print(tokenized_sentence)

['this', 'is', 'my', 'test', 'sentence']  

<强> 2。查找每个单词的同义词。

示例代码:

from nltk.corpus import wordnet as wn
synset_list = wn.synsets('motorcar')

print(synset_list)

[Synset('car.n.01')]

如果您不熟悉,请随意研究同义词集,但现在只需知道上面的内容会返回一个列表,因此可能会返回多个同义词。

从synset中,您可以获得同义词列表。

示例代码:

 print( wn.synset('car.n.01').lemma_names() )

 ['car', 'auto', 'automobile', 'machine', 'motorcar']

很好,现在你可以将你的句子转换为单词列表,并且你能够找到句子中所有单词的同义词(同时保留你的句子的顺序)。此外,您可能需要考虑删除停用词并阻止令牌,因此如果您认为这些概念会有所帮助,请随时查看这些概念。

您当然需要编写代码来为所有句子执行此操作,并将数据存储在某些数据结构中,但这可能超出了此问题的范围。

  

针对此模型绘制句子并获得相似性得分(因此a   换句话说,该分数表示该句子与模型的拟合程度   适合用于训练模型的句子)

这很难回答,因为这样做的可能性是无穷无尽的,但这里有一些如何处理它的例子。

如果你对二进制分类感兴趣,你可以做一些简单的事情,我之前是否看过这句话的变异(变异是同一个句子,但是单词被他们的同义词取代)?如果是,则得分为1,否则得分为0.这可行,但可能不是您想要的。

另一个例子,将每个句子与同义词一起存储在python词典中,并根据你可以在新词中对齐新词语的距离来计算得分。

示例:

training_sentence1 ='这是我真棒的句子'

training_sentence2 ='这不是很棒'

以下是关于如何存储这两个句子的示例数据结构:

my_dictionary = {
    'this': {
        'is':{
            'my':{
                'awesome': {
                    'sentence':{}
                }
            },
            'not':{
                'awesome':{}
            }
        }
    }
}

然后你可以编写一个遍历每个新句子的数据结构的函数,并根据它的深度,给它一个更高的分数。

<强>结论:

以上两个例子只是解决相似性问题的一些可能方法。关于计算文本之间语义相似性的文章/白皮书数不胜数,所以我的建议只是探索很多选项。

我故意排除有监督的分类模型,因为您从未提及可以访问标记的训练数据,但当然,如果您有金标准数据源,则可以使用该路线。