假设我有两套,
a = {"this is a title", ...}
b = {"this is a short description of some title from a", ...}
在集合b中为集合a中的元素找到最佳匹配的最佳方法是什么,反之亦然。我尝试的方法是使用b的标记创建一个单词向量空间的tf-idf包,然后找到余弦相似度。对于给定的a,如果余弦相似度高于任何其他元素b,则选择对(a,b)。但它不是很准确。
有没有更好的方法来做到这一点?如何提高准确度?
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
# titles and abstracts are arrays of strings
tfidf = TfidfVectorizer(stop_words='english', analyzer='word')
vec = tfidf.fit_transform(abstracts)
def predict(title):
titlevec = tfidf.transform([title])
sim = cosine_similarity(titlevec,vec)
return np.argmax(sim)
for i, title in titles:
index = predict(title)
print "Title: {0}\nAbstracts:{1}".format(title,abstracts[index])