Анализ точности Word2vec Gensim - PullRequest
       12

Анализ точности Word2vec Gensim

0 голосов
/ 10 октября 2018

Я работаю над приложением 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 голосов
/ 29 июля 2019

Gensim имеет различные другие метрики для тестирования ваших данных, и, используя их, вы, вероятно, можете определить свои собственные функции в несколько строк кода.Например, кроме models.wv.analogy() и evaluate_word_analogies, существуют такие функции, как evaluate_word_pairs, closer_than(), distance(), most_similar() и т. Д. (Подробности см. В документации по models.keyedvector). Это функцииэто может использоваться по отдельности или как часть больших функций для оценки ваших вложений в слова.Надеюсь, это поможет!

0 голосов
/ 10 октября 2018

Метод accuracy() для модели gensim слов-векторов (теперь не подходит по сравнению с evaluate_word_analogies()) не принимает ваши тексты в качестве входных данных - для этого требуется специально отформатированный файлслово-аналогия вызовы.Этот файл часто называют questions-words.txt.

. Это популярный способ тестирования текстовых векторов общего назначения, начиная с оригинальной статьи Word2Vec и выпуска кода от Google.

Однако эта оценка не обязательно указывает, какие словосочетания будут наилучшими для ваших потребностей.(Например, для набора векторов слов можно получить лучшие результаты по аналогиям такого рода, но хуже для конкретной классификации или цели поиска информации.)

Для хороших векторов для ваших собственных целей,Вы должны разработать некоторую оценку для конкретной задачи, которая дает оценку, соотнесенную с успехом в достижении вашей конечной цели.

Кроме того, обратите внимание, что в качестве неконтролируемого алгоритма для векторов слов не обязательно требуется набор тестов с задержкой для оценки.Как правило, вы хотите использовать как можно больше данных для обучения слов-векторов - обеспечивая максимальный словарный запас, с наибольшим количеством примеров на слово.Затем вы можете проверить векторы слов по какому-то внешнему стандарту - например, по вопросам аналогии, которые вообще не были частью обучения.

Или вы просто использовали бы векторы слов в качестве дополнительного ввода для некоторой задачи, выполняемой в нисходящем направлении, и в этой задаче, находящейся ниже, вы отказались бы от набора тестов из того, что использовалось для обучения некоторого контролируемого алгоритма.,Это гарантирует, что ваш контролируемый метод не просто запоминает / переоснащает помеченные входы, и дает вам косвенный качественный сигнал о том, помог ли этот набор слов-векторов последующей задаче или нет.(И этот набор слов-векторов можно сравнивать с другими на основании того, насколько хорошо они помогают выполнять эту другую контролируемую задачу, а не против своего же шага обучения без присмотра.)

...