Word2vec Gensim准确性分析

时间:2018-10-10 06:43:13

标签: python nlp gensim word2vec

我正在开发一个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 个答案:

答案 0 :(得分:1)

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

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

但是,此评估并不一定表明哪个词向量将最适合您的需求。 (例如,一组单词向量在此类比喻中得分可能更高,但对于特定的分类或信息检索目标却可能更差。)

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

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

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

答案 1 :(得分:0)

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