本文主要是介绍NLP-倒排表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
1.原理
2.实现
1.原理
比如一个问答系统,输入一个问题之后,我们需要去匹配所有的问题,计算相似度,这个时间复杂度是O(N),但如果问题库里面的问题量非常大,那么耗费的时间就非常长。
我们可以通过对问题进行索引的方式,快速定位到相关问题。
①词典中的每一个词,都做为一个词典索引:{"basketball" : [], "football": []}
②每一个词,都对问题库中的所有问题进行遍历,如果单词在问题里面,那么就把问题的索引添加到倒排表中:{"basketball" : [2,3,5], "football": [1,2]}
③我们可以遍历一下输入的问题中的单词,判断一下是否在倒排表里面,比如输入的问题中包含“basketball”,那么我们就直接通过倒排表索引到这个[2,3,5],进而索引到第2,3,5个问题,并进行相似度的计算。
④也可以限定条件,比如这个问题中,至少要有2个词在同一个问题里面才行。以达到更精准的索引。
2.实现
这里只选择了200个单词。
其中new_qlist就是问题的列表。
这里我是直接对所有得到的索引进行了去重,然后直接计算每一个相似度,最后返回前五个最相似的问题的回答。
其中:
X是已经处理过的所有的问题,是一个通过tfidf得到的稀疏矩阵。
vec_q是通过tfidf转换得到的问题向量。
alist是每一个问题对应的答案。
这篇关于NLP-倒排表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!