如何解决无效的令牌化导致更好的结果
我正在遵循here中的代码。
我有一个包含8000个问题和答案的csv文件,并使用gensim通过tfidf语料库制作了具有1000个主题的LSI模型。我只将问题作为正文的一部分,而不是答案。
texts = [jieba.lcut(text) for text in document]
# tk = WhitespaceTokenizer()
# texts = [tk.tokenize(text) for text in document]
dictionary = corpora.Dictionary(texts)
feature_cnt = len(dictionary.token2id)
corpus = [dictionary.doc2bow(text) for text in texts]
tfidf = models.TfidfModel(corpus)
tfidf_corpus = tfidf[corpus]
lsi_model = models.LsiModel(tfidf_corpus,id2word=dictionary,num_topics=1000)
corpus_lsi = lsi_model[tfidf_corpus]
index = similarities.SparseMatrixSimilarity(corpus_lsi,num_features = feature_cnt)
在此之前,我还通过使用nltk删除停用词并使用regex和lemmatizing,使用wordnet和nltk替换标点符号来预处理数据。
我知道jieba并不是适合英语的分词器,因为它也对空格进行分词,如下所示:
Sample: This is untokenized text
Tokenized: 'This',' ','is','untokenized','text'
当我从jieba切换到nltk空白令牌生成器时,发生了奇怪的事情,我的准确性突然下降,也就是说,当我使用以下代码创建新句子时,我得到的结果更糟
keyword = "New sentence the similarity of which is to be found to the main corpus"
kw_vector = dictionary.doc2bow(jieba.lcut(keyword)) # jieba.lcut can be replaced by tk.tokenize()
sim = index[lsi_model[tfidf[kw_vector]]]
x = [sim[i] for i in np.argsort(sim)[-2:]]
我的理解是,多余和无用的单词和字符(如空格)会降低准确性,但在这里我看到了相反的效果。可能是什么原因?
我想出的一个可能解释是,大多数问题都很简短,只有5到6个字
- 办公室地址是什么?
- 谁要联系X?
- 在哪里可以找到文件Y?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。