Стойност на алфа в моделите за вграждане на думи на gensim (Word2Vec и FastText)?

Просто искам да знам ефекта от стойността на алфа в моделите за вграждане на думи gensim word2vec и fasttext? Знам, че алфа е initial learning rate и стойността му по подразбиране е 0.075 от блога на Radim.

Какво ще стане, ако променя това на малко по-висока стойност, т.е. 0,5 или 0,75? Какъв ще е ефектът му? Разрешено ли е да се променя същото? Въпреки това промених това на 0,5 и експериментирах с данни с голям размер с D = 200, прозорец = 15, min_count = 5, iter = 10, работници = 4 и резултатите са доста значими за модела word2vec. Въпреки това, използвайки модела fasttext, резултатите са малко разпръснати, което означава по-малко свързани и непредсказуеми резултати за сходство с високо-ниско ниво.

Защо този неточен резултат за едни и същи данни с два популярни модела с различна точност? Дали стойността на alpha играе толкова решаваща роля по време на изграждането на модела?

Всяко предложение се оценява.


person M S    schedule 17.12.2018    source източник


Отговори (1)


По подразбиране началният alpha е 0.025 в реализацията на Word2Vec на gensim.

В алгоритъма за стохастичен градиентен низход за коригиране на модела, ефективното alpha влияе върху това колко силна е корекцията на модела, след като се оцени всеки пример за обучение, и ще намалява линейно от началната си стойност (alpha) до малка крайна стойност (min_alpha ) по време на цялото обучение.

Повечето потребители няма да имат нужда да коригират тези параметри или може да ги коригират само малко, след като разполагат с надежден повтарящ се начин за оценка дали дадена промяна подобрява техния модел на техните крайни задачи. (Виждал съм начални стойности от 0.05 или по-рядко 0.1, но никога толкова високи, колкото отчетените от вас 0.5.)

person gojomo    schedule 17.12.2018
comment
Благодаря, gojomo. Очаквах този отговор. Добре, аз също ще използвам алфа стойност като 0,1 или в рамките на нея. 1 заявка, задължително ли е да посочите параметъра model.train(). Какво ще стане, ако не го използвам след изграждането на модела? Ако използвам параметъра model.train, какви могат да бъдат желаните стойности за параметъра model.train() след изграждане на модела с определен размер, прозорец, iter и min_count стойности. - person M S; 17.12.2018
comment
Изчислих приликата между две думи, без да използвам стойности на model.train(). Задължително ли е да посочите стойности на model.train()? - person M S; 17.12.2018
comment
Не бих променил alpha по подразбиране, докато всичко останало не работи и имате добър начин да оцените моделите си, за да видите дали промяната на alpha помага. - person gojomo; 17.12.2018
comment
Всички модели трябва да бъдат обучени, за да бъдат полезни, но ако сте предоставили итерируемия корпус в конструктора на модела, той автоматично ще е извършил обучението. Ако не сте предоставили корпус, ще трябва да направите сами инициализацията на речника (с метод build_vocab()) и след това обучението (с метод train()). В документите за train() е ясно какви параметри трябва да бъдат предоставени: radimrehurek.com/gensim/models/ - person gojomo; 17.12.2018
comment
да! Промяната на алфа стойността на 0,5 ми дава някои значими желани усетени резултати. - person M S; 17.12.2018
comment
Какво е итерируем корпус? Това означава ли токенизирани думи, определени като изречения във вложен списък или нещо друго? - person M S; 17.12.2018
comment
Изненадан съм, че началното alpha от 0.5 работи, това е много далеч от обичайните стойности. Това наистина ли е по-добре от това просто да го оставите 0.025 по подразбиране? Колко данни (общ брой примери и среден размер в думи на всеки пример) използвате? Какъв метод за оценка на качеството им използвате? - person gojomo; 18.12.2018
comment
Итерируемият обект на корпуса е параметърът sentences – незадължителен в конструктора на класа. За Word2Vec, това трябва да бъде повторяема последователност от списъци с токени. Ако се предостави на конструктора на класа, цялото откриване на речник и обучение ще се случи автоматично – тогава няма да е необходимо да извиквате train(). (Ако имате още въпроси, трябва да разширите въпроса си с ясна извадка от кода, който използвате.) - person gojomo; 18.12.2018
comment