2016-09-21 3 views
4

В gensim, когда я даю строку в качестве входных данных для обучения doc2vec модели, я получаю эту ошибку:doc2vec - Формат ввода для doc2vec обучения и infer_vector() в Python

TypeError ('Don \' знаю как обрабатывать URI% s'% магнезии (URI))

я сослался на этот вопрос Doc2vec : TaggedLineDocument() , но все еще есть сомнения относительно формата входного сигнала.

documents = TaggedLineDocument('myfile.txt')

Должны Myfile.txt есть маркеры как список списков или отдельный список в каждой строке для каждого документа или строки?

For eg - У меня есть 2 документа.

Doc 1: Машиноведение - это подполе компьютерной науки, которое развивалось в результате изучения распознавания образов.

Doc 2: Артур Самуэль определил механизм обучения как «поле обучения, которое дает компьютерам возможность учиться».

Итак, что должно выглядеть myFile.txt?

Случай 1: простой текст каждого документа в каждой строке

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

Артура Самуэль определяются машинное обучение в области исследования, дает компьютерам возможность узнать

случай 2: список списков, имеющих маркеры каждого документа

[ ["Machine", "learning", "is", "a", "subfield", "of", "computer", "science", "that", "evolved", "from", "the", "study", "of", "pattern", "recognition"],

["Arthur", "Samuel", "defined", "machine", "learning", "as", "a", "Field", "of", "study", "that", "gives", "computers" ,"the", "ability", "to", "learn"] ] 

Случай 3: список лексем каждого документа в отдельной строке

["Machine", "learning", "is", "a", "subfield", "of", "computer", "science", "that", "evolved", "from", "the", "study", "of", "pattern", "recognition"] 

["Arthur", "Samuel", "defined", "machine", "learning", "as", "a", "Field", "of", "study", "that", "gives", "computers" ,"the", "ability", "to", "learn"] 

И когда я бегу это на тестовых данных, что должно быть формат предложения, которые я хочу, чтобы предсказать, вектор doc для? Должно ли это быть как случай 1 или случай 2 ниже или что-то еще?

model.infer_vector(testSentence, alpha=start_alpha, steps=infer_epoch)

Если testSentence быть:

Случай 1: Строка

testSentence = "Machine learning is an evolving field" 

Случай 2: список лексем

testSentence = ["Machine", "learning", "is", "an", "evolving", "field"] 

ответ

3

TaggedLineDocument это класс, который ожидает его исходный файл (или файл-подобный объект) должен быть ограниченным пространством d токенов, по одной на линию. (То есть, что вы называете «Случай 1» в своем первом вопросе.)

Но вы можете написать свой собственный Iterable объекта скормить gensim Doc2Vec как documents корпуса, до тех пор, как этот корпус (1) iterably-возвращает next() объектов, которые, как TaggedDocument, имеет words и tags списков; и (2) можно повторить несколько раз, для нескольких проходов Doc2Vec требуется как для начальной лексики, так и для iter учебных пропусков.

Метод infer_vector() принимает списки токенов, похожие на атрибуты words отдельных TaggedDocument-подобных объектов. (То есть, что вы называете «Случай 2» в своем втором вопросе.)

Смежные вопросы