我将员工的姓名保存在一个文本文件中。我处理了这个文件,并比较了其中已存在的姓名。当我使用most_similar方法进行检查时,我发现即使在语料库中存在完全相同的姓名,它返回的也是完全不相关的姓名。
import gensimtraining_file='todel.txt'mylist=list()with open(training_file, encoding="iso-8859-1") as f: for i, line in enumerate(f): mylist.append(gensim.models.doc2vec.TaggedDocument(gensim.utils.simple_preprocess(line), [i]))model = gensim.models.doc2vec.Doc2Vec(vector_size=50, min_count=2, epochs=55)model.build_vocab(mylist)inferred_vector=model.infer_vector(['aakash', 'prakash', 'patel'])sims = model.docvecs.most_similar([inferred_vector])' '.join(mylist[sims[0][0]].words)
我如何正确地训练数据以返回(近似)匹配的姓名?
回答:
您定义的相似性是以编辑距离为基础的,即两个字符串有多相似。
x2vec模型定义的相似性是以语义接近度为基础的,即两个含义有多相似,这是通过机器学习和共现统计计算得出的。
换句话说,您用大锤子来打一只苍蝇。请查看计算字符串距离的工具:
from Levenshtein import distancestring1 = 'aakash'string2 = 'akash'string3 = 'konstantinos'print(distance(string1, string2))1print(distance(string1, string3))11