R/python:从训练句子构建模型

R/python: build model from training sentences

我要实现的目标:
我一直在寻找一种方法很长一段时间,但我找不到一种(有效的)方法来解决这个问题:

我试过的:

问题:
有什么方法可以使用 R 或 Python 实现上述步骤吗?一个简单的示例代码会很棒(或参考一个好的教程)

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

解决这个问题

build a model from example sentences while taking word order and synonyms into account.

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')]

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

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

示例代码:

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

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

太好了,现在您可以将句子转换为单词列表,并且可以找到句子中所有单词的同义词(同时保留句子的顺序)。此外,您可能需要考虑删除停用词和词干化标记,因此如果您认为有帮助,请随时查阅这些概念。

你当然需要编写代码来对所有句子执行此操作,并将数据存储在某种数据结构中,但这可能不在本题的讨论范围之内。

map a sentence against this model and get a similarity score (thus a score indicating how much this sentence fits the model, in other words fits the sentences which were used to train the model)

这很难回答,因为这样做的可能性是无穷无尽的,但这里有几个示例可以说明如何处理它。

如果你对二元分类感兴趣,你可以做一些简单的事情,比如,我以前见过这个句子的变体吗(变体是同一个句子,但单词被它们的同义词代替)?如果是这样,得分为 1,否则得分为 0。这可行,但可能不是您想要的。

另一个例子,将每个句子连同同义词一起存储在 python 词典中,并根据您可以将新句子对齐到词典的多远来计算分数。

示例:

training_sentence1 = 'This is my awesome sentence'

training_sentence2 = 'This is not awesome'

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

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

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

结论:

以上两个示例只是解决相似性问题的一些可能方法。关于计算文本之间的语义相似度有无数 articles/whitepapers,所以我的建议是探索多种选择。

我故意排除了监督分类模型,因为您从未提到可以访问带标签的训练数据,但是如果您确实拥有黄金标准数据源,那条路线当然是可能的。