R/python:从训练句子构建模型
我正在努力实现的目标:R/python:从训练句子构建模型,python,r,nltk,text-mining,tm,Python,R,Nltk,Text Mining,Tm,我正在努力实现的目标: 我已经寻找了很长一段时间的方法,但我无法找到(有效的)方法: 从例句中建立一个模型,同时考虑词序和同义词 根据该模型映射一个句子,并获得一个相似性分数(因此,一个分数表示该句子在多大程度上符合该模型,换句话说,符合用于训练该模型的句子) 我尝试的内容: Python:nltk与gensim结合使用(据我所知,它只能够使用单词相似性(但不考虑顺序) 账户) R:使用tm构建了一个TermDocumentMatrix,它看起来很有希望,但无法将任何东西映射到这个矩阵。此
我已经寻找了很长一段时间的方法,但我无法找到(有效的)方法:
- 从例句中建立一个模型,同时考虑词序和同义词李>
- 根据该模型映射一个句子,并获得一个相似性分数(因此,一个分数表示该句子在多大程度上符合该模型,换句话说,符合用于训练该模型的句子)
Python:
与nltk
结合使用(据我所知,它只能够使用单词相似性(但不考虑顺序) 账户)gensim
使用R:
构建了一个tm
,它看起来很有希望,但无法将任何东西映射到这个矩阵。此外,这个TermDocumentMatrix
似乎考虑了顺序,但忽略了同义词(我认为)。TermDocumentMatrix
我知道柠檬化没那么顺利哈:)
是否有任何方法可以使用R或Python实现上述步骤?一个简单的示例代码会很好(或者参考一个好的教程)有很多方法可以完成上面描述的工作,当然,要找到一个优化的解决方案需要大量的测试。但是这里有一些有用的功能可以帮助您使用python/nltk解决这个问题 从例句中建立一个模型,同时考虑词序和语法 同义词考虑在内 1。标记化 在这一步中,你需要将各个句子分解成一个单词列表 示例代码:
import nltk
tokenized_sentence = nltk.word_tokenize('this is my test sentence')
print(tokenized_sentence)
['this', 'is', 'my', 'test', 'sentence']
from nltk.corpus import wordnet as wn
synset_list = wn.synsets('motorcar')
print(synset_list)
[Synset('car.n.01')]
print( wn.synset('car.n.01').lemma_names() )
['car', 'auto', 'automobile', 'machine', 'motorcar']
2。查找每个单词的同义词。
示例代码:
import nltk
tokenized_sentence = nltk.word_tokenize('this is my test sentence')
print(tokenized_sentence)
['this', 'is', 'my', 'test', 'sentence']
from nltk.corpus import wordnet as wn
synset_list = wn.synsets('motorcar')
print(synset_list)
[Synset('car.n.01')]
print( wn.synset('car.n.01').lemma_names() )
['car', 'auto', 'automobile', 'machine', 'motorcar']
如果您不熟悉语法集,请随意研究它,但现在只需知道上面返回的是一个列表,因此可能会返回多个语法集
从synset可以获得同义词列表
示例代码:
import nltk
tokenized_sentence = nltk.word_tokenize('this is my test sentence')
print(tokenized_sentence)
['this', 'is', 'my', 'test', 'sentence']
from nltk.corpus import wordnet as wn
synset_list = wn.synsets('motorcar')
print(synset_list)
[Synset('car.n.01')]
print( wn.synset('car.n.01').lemma_names() )
['car', 'auto', 'automobile', 'machine', 'motorcar']
很好,现在您可以将句子转换为单词列表,并且可以在句子中找到所有单词的同义词(同时保留句子的顺序)。此外,您可能需要考虑删除停用词和填充令牌,所以如果您认为这有帮助的话,可以自由地查找这些概念。p>
当然,您需要为所有句子编写代码,并将数据存储在某些数据结构中,但这可能超出了本问题的范围
根据此模型映射一个句子,并获得相似性分数(因此
换句话说,分数表示这个句子有多符合模型
符合用于训练模型的句子)
这很难回答,因为这样做的可能性是无穷无尽的,但这里有几个例子可以说明如何处理它
如果你对二元分类感兴趣,你可以做一些简单的事情,比如,我以前见过这个句子的变体(变体是同一个句子,但单词被同义词替换)?如果是,分数为1,否则分数为0。这会起作用,但可能不是你想要的
另一个例子是,将每个句子连同同义词一起存储在python词典中,并根据您可以将新句子与词典对齐的距离来计算分数
示例:
训练句子1='这是我最棒的句子'
训练句子2='这并不可怕'
下面是一个关于如何存储这两个句子的示例数据结构:
my_dictionary = {
'this': {
'is':{
'my':{
'awesome': {
'sentence':{}
}
},
'not':{
'awesome':{}
}
}
}
}
然后,您可以为每个新句子编写一个遍历该数据结构的函数,并根据它的深度给它一个更高的分数
结论:
以上两个例子只是处理相似性问题的一些可能方法。关于计算文本间语义相似度的文章/白皮书不计其数,所以我的建议是探索许多选项
我故意排除了监督分类模型,因为您从未提到过可以访问带标签的训练数据,但如果您确实拥有金标准数据源,当然这条路线是可能的 有很多方法可以实现上述目的,当然,要找到一个优化的解决方案,还需要大量的测试。但是这里有一些有用的功能可以帮助您使用python/nltk解决这个问题 从例句中建立一个模型,同时考虑词序和语法 同义词考虑在内 1。标记化 在这一步中,你需要将各个句子分解成一个单词列表 示例代码:
import nltk
tokenized_sentence = nltk.word_tokenize('this is my test sentence')
print(tokenized_sentence)
['this', 'is', 'my', 'test', 'sentence']
from nltk.corpus import wordnet as wn
synset_list = wn.synsets('motorcar')
print(synset_list)
[Synset('car.n.01')]
print( wn.synset('car.n.01').lemma_names() )
['car', 'auto', 'automobile', 'machine', 'motorcar']
2。查找每个单词的同义词。
示例代码:
import nltk
tokenized_sentence = nltk.word_tokenize('this is my test sentence')
print(tokenized_sentence)
['this', 'is', 'my', 'test', 'sentence']
from nltk.corpus import wordnet as wn
synset_list = wn.synsets('motorcar')
print(synset_list)
[Synset('car.n.01')]
print( wn.synset('car.n.01').lemma_names() )
['car', 'auto', 'automobile', 'machine', 'motorcar']
如果您不熟悉语法集,请随意研究它,但现在只需知道上面返回的是一个列表,因此可能会返回多个语法集
从synset可以获得同义词列表
示例代码:
import nltk
tokenized_sentence = nltk.word_tokenize('this is my test sentence')
print(tokenized_sentence)
['this', 'is', 'my', 'test', 'sentence']
from nltk.corpus import wordnet as wn
synset_list = wn.synsets('motorcar')
print(synset_list)
[Synset('car.n.01')]
print( wn.synset('car.n.01').lemma_names() )
['car', 'auto', 'automobile', 'machine', 'motorcar']
很好,现在您可以将句子转换为单词列表,并且可以在句子中找到所有单词的同义词(同时保留句子的顺序)。此外,您可能需要考虑删除停用词和填充令牌,所以如果您认为这有帮助的话,可以自由地查找这些概念。p>
当然,您需要为所有句子编写代码,并将数据存储在某些数据结构中,但这可能超出了本问题的范围
根据此模型映射一个句子,并获得相似性分数(因此
换句话说,分数表示这个句子有多符合模型
符合用于训练模型的句子)
这很难回答,因为这样做的可能性是无穷无尽的,但这里有几个例子可以说明如何处理它
如果你感兴趣的话