Почему встраивание слова FastText может генерировать представление слова из другого языка? - PullRequest
0 голосов
/ 06 марта 2019

Недавно я обучил встраиванию слов FastText из sentiment140 , чтобы получить представление для английских слов. Однако сегодня, просто для ознакомления, я запускаю модуль FastText на пару китайских слов, например:

import gensim.models as gs

path = r'\data\word2vec'

w2v = gs.FastText.load(os.path.join(path, 'fasttext_model'))

w2v.wv['哈哈哈哈']

Это выводит:

array([ 0.00303676,  0.02088235, -0.00815559,  0.00484574, -0.03576371,
       -0.02178247, -0.05090654,  0.03063928, -0.05999983,  0.04547168,
       -0.01778449, -0.02716631, -0.03326027, -0.00078981,  0.0168153 ,
        0.00773436,  0.01966593, -0.00756055,  0.02175765, -0.0050137 ,
        0.00241255, -0.03810823, -0.03386266,  0.01231019, -0.00621936,
       -0.00252419,  0.02280569,  0.00992453,  0.02770403,  0.00233192,
        0.0008545 , -0.01462698,  0.00454278,  0.0381292 , -0.02945416,
       -0.00305543, -0.00690968,  0.00144188,  0.00424266,  0.00391074,
        0.01969502,  0.02517333,  0.00875261,  0.02937791,  0.03234404,
       -0.01116276, -0.00362578,  0.00483239, -0.02257918,  0.00123061,
        0.00324584,  0.00432153,  0.01332884,  0.03186348, -0.04119627,
        0.01329033,  0.01382102, -0.01637722,  0.01464139,  0.02203292,
        0.0312229 ,  0.00636201, -0.00044287, -0.00489291,  0.0210293 ,
       -0.00379244, -0.01577058,  0.02185207,  0.02576622, -0.0054543 ,
       -0.03115215, -0.00337738, -0.01589811, -0.01608399, -0.0141606 ,
        0.0508234 ,  0.00775024,  0.00352813,  0.00573649, -0.02131752,
        0.01166397,  0.00940598,  0.04075769, -0.04704212,  0.0101376 ,
        0.01208556,  0.00402935,  0.0093914 ,  0.00136144,  0.03284211,
        0.01000613, -0.00563702,  0.00847146,  0.03236216, -0.01626745,
        0.04095127,  0.02858841,  0.0248084 ,  0.00455458,  0.01467448],
      dtype=float32)

Следовательно, я действительно хочу знать, почему модуль FastText, обученный с sentiment140 , мог сделать это. Спасибо!

1 Ответ

2 голосов
/ 07 марта 2019

Фактически, правильное поведение для модели FastText, основанное на поведении исходной / эталонной реализации Facebook, заключается в том, чтобы всегда возвращал вектор для слова из словарного запаса.

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

В Gensim до версии не ниже 3.7.1 класс FastText выдаст ошибку KeyError: 'all ngrams for word _____ absent from model', если нет ни одного n-граммы слов из словаря, но это ошибочное поведение, котороебудет изменен, чтобы соответствовать FastText Facebook, в будущем выпуске Gensim.( PR для исправления этого поведения был объединен с веткой разработки Gensim и поэтому должен вступить в силу в следующем выпуске после 3.7.1.)

Я не уверен, почему выне получить такую ​​ошибку с конкретной моделью и набором данных, которые вы описали.Возможно, ваш fasttext_model был на самом деле обучен другому тексту, чем вы думаете?Или, обученный с очень маленьким нестандартным параметром min_n, так что одного , появляющегося внутри данных sentiment140, достаточно, чтобы внести в синтезированный вектор для 哈哈哈哈?

Но, учитывая, что стандартное поведение FastText всегда сообщает о каком-либо синтезированном векторе, и Gensim будет соответствовать этому поведению в будущем выпуске, вы не должны рассчитывать на получение ошибки здесь.Ожидайте возврата по существу случайного вектора для совершенно неизвестных слов без сходства с обучающими данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...