【问题标题】:Word2vec Gensim Accuracy AnalysisWord2vec Gensim 精度分析
【发布时间】:2019-03-15 00:09:12
【问题描述】:

我正在开发一个 NLP 应用程序,其中我有一个文本文件语料库。我想使用 Gensim word2vec 算法 创建词向量。

我进行了 90% 的训练和 10% 的测试。我在适当的集上训练了模型,但我想评估模型在测试集上的准确性。

我已经在互联网上浏览了有关准确性评估的任何文档,但我找不到任何允许我这样做的方法。有谁知道做精度分析的函数吗?

我处理测试数据的方式是从测试文件夹中的文本文件中提取所有句子,并将其变成一个巨大的句子列表。在那之后,我使用了一个我认为是正确的函数(结果它不是因为它给了我这个错误:TypeError: don't know how to handle 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)

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

【问题讨论】:

    标签: python nlp gensim word2vec


    【解决方案1】:

    Gensim 有各种其他指标来测试您的数据,并且使用它们,您可能可以在几行代码中定义自己的函数。 例如,除了models.wv.analogy()evaluate_word_analogies, 有evaluate_word_pairscloser_than()distance()most_similar() 等功能(有关更多详细信息,请参阅models.keyedvector 的文档。) 这些函数可以单独使用,也可以作为更大函数的一部分用于评估您的词嵌入。 希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      gensim 词向量模型的 accuracy() 方法(现在与 evaluate_word_analogies() 相比不受欢迎)不会将您的文本作为输入 - 它需要一个特定格式的词类比挑战文件。该文件通常命名为questions-words.txt

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

      但是,此评估不一定​​表明哪些词向量最适合您的 需求。 (例如,一组词向量可能在这些类比上得分更高,但在特定分类或信息检索目标上得分更差。)

      为了您自己的目的的良好向量,您应该设计一些特定于任务的评估,它给出与您最终目标的成功相关的分数。

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

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

      【讨论】:

      • 感谢您的精彩回复!
      猜你喜欢
      • 2015-10-10
      • 2019-07-02
      • 1970-01-01
      • 2014-04-02
      • 2017-03-28
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多