当前位置: 首页 > 知识库问答 >
问题:

Word2vec Gensim精度分析

符学
2023-03-14

我正在开发一个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)

我不知道如何修复最后一部分。请帮忙。提前谢谢!

共有2个答案

田柏
2023-03-14

Gensim有各种其他指标来测试您的数据,使用它们,您可能可以在几行代码中定义自己的函数。例如,除了models.wv.analogy()evaluate_word_analogies之外,还有像evaluate_word_pairscloser_than()距离()most_similar()等函数(参见文档models.keyedvector了解更多详情。)这些函数可以单独使用,也可以作为评估单词嵌入的大型函数的一部分。希望这能有所帮助!

赵禄
2023-03-14

一个gensim词向量模型(现在与evaluate_word_analogies()相比不受欢迎)的准确性()方法不把你的文本作为输入-它需要一个特定格式的单词类比挑战文件。这个文件通常被命名为questions-words.txt

这是一种测试通用词向量的流行方法,可以追溯到谷歌最初发布的Word2Vec论文和代码。

然而,这种评估并不一定表明哪些词向量最适合您的需要。(例如,一组词向量在这类类比中得分可能更好,但在特定分类或信息检索目标中得分更差。)

为了达到你自己的目的,你应该设计一些特定于任务的评估,给出一个和你最终目标的成功相关的分数。

此外,请注意,作为一种无监督算法,字向量不一定需要一个测试集来评估。你通常希望使用尽可能多的数据来训练单词向量——确保最大的词汇覆盖率,每个单词有最多的例子。然后你可能会测试一些外部标准的词向量——比如类比问题,这些问题根本不是训练集的一部分。

或者,您只需使用单词向量作为您正在测试的某个下游任务的额外输入,在该下游任务上,您将保留用于训练某个受监督算法的测试集。这确保了您的受监督方法不仅仅是记忆/过度拟合标记的输入,还为您提供了一个间接的质量信号,表明该词向量集是否有助于下游任务。(而且,这个词向量集可以根据它们对其他受监督任务的帮助程度与其他词向量集进行比较,而不是与它们自己的无监督训练步骤进行比较。)

 类似资料:
  • 问题内容: 文档的内容如下(强调我的意思)。 此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。返回的值表示自某个固定但任意时间以来的纳秒(也许是将来的时间,因此值可能为负)。 此方法提供纳秒精度,但不一定提供纳秒精度。 无法保证值更改的频率。 如我所见,这可以用两种不同的方式解释: 在句子中 大胆 上面是指个人的返回值。然后,将在数字意义上理解精度和准确性。也就是说,精度是指有效

  • 如何分析Weka中的混淆矩阵,以获得准确度?我们知道,由于数据集不平衡,精度不准确。混淆矩阵如何“确认”准确性? 示例:a)准确率96.1728% b) 准确率:96.8% 等...

  • 问题内容: java中双值的乘法运算符的保证精度是多少? 例如,2.2 * 100是220.00000000000003,但是220是双精度数。220.00000000000003是220之后的下一个两倍。 问题答案: 乘法工作正常,但不能精确表示为双精度。最接近的双打是: 2.199999999999999733(0x4001999999999999) 2.200000000000000177(

  • 我有一个神经网络,它对3个输出进行分类。我的数据集非常小,我有340张火车图像和60张测试图像。我构建了一个模型,当我编译时,我的结果是: 纪元97/100 306/306 [==============================] - 46s 151ms/阶跃损失: 0.2453-精度: 0.8824-val_loss: 0.3557-val_accuracy: 0.8922纪元98/10

  • 问题内容: 我试图确定双精度的最大精度是多少。在此链接的可接受答案的注释中,Java中的double保持精度 @PeterLawrey将max precision设置为15。 您如何确定呢? 问题答案: @PeterLawrey表示最大精度为15。 实际上,这根本不是他所说的。他说的是: 双精度有15个小数位 他错了。它们的精度为15个十进制 数字 。 任何数字中的小数位数由其对数10的对数给出。

  • 我试图确定double的最大精度是多少。在这个链接中接受的答案的注释中,Java中的Retain precision with double@PeterLawrey声明max precision In 15。 你如何确定这一点?