我正在处理一个文档搜索问题,给定一组文档和一个搜索查询,我希望找到最接近查询的文档。我使用的模型基于scikit中的TfidfVectorizer。我使用4种不同类型的标记器为所有文档创建了4个不同的tf_idf向量。每个标记器将字符串拆分为n个gram,其中n在范围1中。。。4。在
例如:
doc_1 = "Singularity is still a confusing phenomenon in physics"
doc_2 = "Quantum theory still wins over String theory"
所以型号1将使用1克的标记器,型号2将使用2克的标记器。在
接下来,对于给定的搜索查询,我使用这4个模型计算搜索项和所有其他文档之间的余弦相似度。在
例如,搜索查询:量子物理学中的奇点。 将搜索查询分解为n个gram,并根据相应的n-gram模型计算tf_-idf值。在
因此,对于每个查询文档对,我有4个基于使用的n-gram模型的相似性值。 例如:
^{pr2}$所有这些相似性得分在0到1之间进行标准化。现在我想计算一个聚合的标准化分数,这样对于任何查询文档对,更高的n-gram相似度将获得非常高的权重。基本上,ngram相似度越高,对总分的影响就越大。在
有人能提出解决办法吗?在
有很多种方法可以玩弄数字:
最终,无论什么能让你在最终的任务中获得更高的准确度分数,都是最好的解决方案。在
毫无疑问:
为了计算文档相似性,有一个长期运行的SemEval任务调用语义文本相似度https://groups.google.com/forum/#!forum/sts-semeval
共同的策略包括(并非详尽):
使用带有相似性分数的标注语料库,提取一些特征,训练回归器并输出相似性分数
使用某种向量空间语义(强烈推荐阅读:http://www.jair.org/media/2934/live-2934-4846-jair.pdf),然后做一些向量相似度评分(看看How to calculate cosine similarity given 2 sentence strings? - Python)
向量空间语义学术语的子集将派上用场(有时称为单词嵌入),有时人们用主题模型/神经网络/深度学习(其他相关的流行语)训练向量空间,参见http://u.cs.biu.ac.il/~yogo/cvsc2015.pdf
二。你也可以使用一个更传统的词包向量,用TF-IDF或任何其他“潜在”维度缩减来压缩空间,然后使用一些向量相似度函数来获得相似度
iii.创建一个奇特的向量相似性函数(例如
cosmul
,参见https://radimrehurek.com/gensim/models/word2vec.html),然后调整该函数并在不同的空间上对其求值。使用一些包含概念本体的词汇资源(例如WordNet、Cyc等),然后通过遍历概念图来比较相似度(参见http://www.nltk.org/howto/wordnet.html)。例如https://github.com/alvations/pywsd/blob/master/pywsd/similarity.py
以上述为背景,在没有注释的情况下,让我们试着找出一些向量空间的例子:
首先,让我们用简单的二进制向量来尝试普通ngram:
^{pr2}$[出来]:
现在让我们尝试从1gram到ngram的include(其中
n = len(sent)
),并将所有内容与二进制ngram一起放入向量字典:[出来]:
现在,让我们尝试通过可能的ngram数量来规范化:
看起来好多了,出去:
现在让我们尝试计数ngram,而不是使用
1/len(_vec)
,即_vec.count(ng) / len(_vec)
:不出意外的是,所有的相似度都是一样的:
除了ngrams你也可以试试skipgrams:How to compute skipgrams in python?
相关问题 更多 >
编程相关推荐