В чем разница между args wordNgrams, minn и maxn в обучении с учителем fassttext?

Я немного сбит с толку после прочтения «Мешка уловок» для эффективной классификации текста. В чем разница между args wordNgrams, minn и maxn

Например, задача классификации текста и внедрение перчаток как предварительно обученных векторов.

ft.train_supervised(file_path,lr=0.1,epoch=5,wordNgrams=2,dim=300,loss='softmax', minn=2,maxn=3,pretrainedVectors='glove.300d.txt',verbose=0)

входное предложение - «Я люблю тебя». Если minn = 2, maxn = 3, все предложение преобразуется в [<I, I>], [<l, <lo, lo, lov,.....] и т. Д. Для слова любовь его вставка в быстрый текст = (emb (любовь) (как полное слово) + emb (‹l) + emb (‹ lo) + ....) / н. В предложении оно разбито на [I love, love you] (потому что wordNgrams = 2), и эти 2-граммовые вложения равны [(fasttext emb(I)+fasttext emb(love))/2, (fasttext emb(love)+fasttext emb(you))/2]. Вложение предложения является средним для 2-граммовых вложений и имеет размерность 300. Затем оно проходит через слой, который имеет нейроны #labels (т.е. умножается на матрицу размером [300, #labels]).

Это правильно? Пожалуйста, поправьте меня, если я ошибаюсь


person Rajan Raju    schedule 10.07.2020    source источник
comment
Задайте вопрос, если он у вас есть. Не размещайте ссылки на другие сайты, на которых есть ваш вопрос.   -  person James Z    schedule 10.07.2020
comment
@JamesZ Отредактировал сообщение.   -  person Rajan Raju    schedule 10.07.2020


Ответы (1)


раджу

Вы почти правы, но усреднение происходит в самом конце.

Во-первых, как токенизируется предложение?

Все предложение помечено пробелами. Итак, я люблю тебя, получим 4 слова: я, люблю, ты и специальное слово EOS (конец предложения). Пока у нас 4 токена. Затем для каждого слова, в зависимости от того, что вы установили для minn и maxn, fastText вычисляет подслова и также рассматривает их как токены. Итак, в вашем случае с minn = 2, maxn = 3 это будет: "<I", "<I>", "I>", "<l", "<lo", "lo", "lov", "ov", "ove", "ve", "ve>", "e>", "<y", "<yo", "yo", "you", "ou", "ou>", "u>" (мы также добавляем начало и конец символов слова (< и >)).

Таким образом, общее количество токенов будет "I", "love", "you", EOS, "<I", "<I>", "I>", "<l", "<lo", "lo", "lov", "ov", "ove", "ve", "ve>", "e>", "<y", "<yo", "yo", "you", "ou", "ou>", "u>".

Теперь, когда wordNgrams = 2, мы также добавляем токены, соответствующие паре слов: "I love", "love you", "you EOS"

Как только у нас появятся жетоны:

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

person Onur Celebi    schedule 11.01.2021
comment
большое спасибо. - person Rajan Raju; 13.01.2021