我正在开发一个NLP应用程序,其中我有一个文本文件集。我想使用Gensim word2vec算法创建单词向量。
我做了90%的训练和10%的测试。我在适当的集合上训练了模型,但我想在测试集上评估模型的准确性。
我在网上浏览过任何关于准确性评估的文档,但我找不到任何方法让我这么做。有人知道有一个函数可以进行精确分析吗?
我处理测试数据的方法是从测试文件夹中的文本文件中提取所有的句子,然后把它变成一个巨大的句子列表。在那之后,我使用了一个我认为是正确的函数(结果是它给了我这个错误:TypeError:不知道如何处理uri)。我就是这样做的:
test_filenames = glob.glob('./testing/*.txt')
print("Found corpus of %s safety/incident reports:" %len(test_filenames))
test_corpus_raw = u""
for text_file in test_filenames:
txt_file = open(text_file, 'r')
test_corpus_raw += unicode(txt_file.readlines())
print("Test Corpus is now {0} characters long".format(len(test_corpus_raw)))
test_raw_sentences = tokenizer.tokenize(test_corpus_raw)
def sentence_to_wordlist(raw):
clean = re.sub("[^a-zA-Z]"," ", raw)
words = clean.split()
return words
test_sentences = []
for raw_sentence in test_raw_sentences:
if len(raw_sentence) > 0:
test_sentences.append(sentence_to_wordlist(raw_sentence))
test_token_count = sum([len(sentence) for sentence in test_sentences])
print("The test corpus contains {0:,} tokens".format(test_token_count))
####### THIS LAST LINE PRODUCES AN ERROR: TypeError: don't know how to handle uri
texts2vec.wv.accuracy(test_sentences, case_insensitive=True)我不知道最后这部分该怎么解决。请帮帮忙。提前感谢!
发布于 2018-10-10 17:52:12
accuracy()方法的gensim字向量模型(现在不喜欢相比evaluate_word_analogies())不接受您的文本作为输入-它需要一个特定格式的文件的词类推挑战。这个文件通常被命名为questions-words.txt。
这是一种很流行的测试通用字向量的方法,可以追溯到最初的Word2Vec论文和Google的代码发布。
然而,这个评估并不一定表示哪个字向量最适合您的需要。(例如,一组字向量可以在这类类比中获得更好的分数,但对于特定的分类或信息检索目标则可能更糟。)
为了达到你自己的目的,你应该设计一些特定于任务的评估,给出一个与你最终目标的成功相关的分数。
此外,请注意,作为一个无监督的算法,字向量不一定需要一个持久测试集来评估。你通常希望使用尽可能多的数据来训练单词向量--确保最大的词汇量,每个单词都有最多的例子。然后你可以把单词向量测试到一些外部标准,比如类推问题,这根本不是训练集的一部分。
或者,你只需要使用单词向量作为你测试的下游任务的额外输入,而在下游任务上,你会保留一个测试集来训练有监督的算法。这确保了你的监督方法不仅仅是记忆/过配标记的输入,并给你一个间接的质量信号,关于这个字向量集是否帮助下游的任务,或没有。(而且,可以根据这些词向量集对其他受监督任务的帮助程度来与其他人进行比较-而不是与它们自己相同的无监督的训练步骤进行比较。)
发布于 2019-07-29 09:11:07
Gensim有各种测试数据的其他度量标准,使用它们,您可能可以在几行代码中定义自己的函数。例如,除了models.wv.analogy()和evaluate_word_analogies之外,还有一些函数,如evaluate_word_pairs、closer_than()、distance()、most_similar()等(关于models.keyedvector的更多细节,请参见文档)。这些函数可以单独使用,也可以作为大型函数的一部分,用于计算单词嵌入。希望这能有所帮助!
https://stackoverflow.com/questions/52734146
复制相似问题