Word2vec Gensim Accuracy Analysis



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

我不知道如何解决最后一部分。请帮忙。提前感谢!

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

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

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

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

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

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

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

相关内容

最新更新