我想要实现的目标:
我一直在寻找一种方法,但是我无法找到(有效的)方法:
我尝试了什么:
Python:
nltk
与gensim
结合使用(据我可以编码和阅读它只能使用单词相似性(但不能接受顺序)
帐户)。
R:
使用tm
构建TermDocumentMatrix
,看起来非常有前景,但无法将任何内容映射到此矩阵。此外,TermDocumentMatrix
似乎考虑了顺序,但错过了同义词(我认为)。
我知道词形推理没有那么顺利哈哈哈:)
问题:
有没有办法使用R或Python实现上述步骤?一个简单的示例代码将很棒(或引用一个很好的教程)
答案 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':{}
}
}
}
}
然后你可以编写一个遍历每个新句子的数据结构的函数,并根据它的深度,给它一个更高的分数。
<强>结论:强>
以上两个例子只是解决相似性问题的一些可能方法。关于计算文本之间语义相似性的文章/白皮书数不胜数,所以我的建议只是探索很多选项。
我故意排除有监督的分类模型,因为您从未提及可以访问标记的训练数据,但当然,如果您有金标准数据源,则可以使用该路线。