Как мы решаем количество измерений для скрытого семантического анализа? - PullRequest
8 голосов
/ 06 марта 2012

В последнее время я работаю над скрытым семантическим анализом.Я реализовал это в Java, используя пакет Jama.

Вот код:

    Matrix vtranspose ; 
    a = new Matrix(termdoc);  
    termdoc = a.getArray(); 
    a = a.transpose() ; 
    SingularValueDecomposition sv =new SingularValueDecomposition(a) ; 
    u = sv.getU();
    v = sv.getV(); 
    s = sv.getS();
    vtranspose = v.transpose() ; // we obtain this as a result of svd 

    uarray = u.getArray();
    sarray = s.getArray(); 
    varray = vtranspose.getArray(); 
    if(semantics.maketerms.nodoc>50)
    {

        sarray_mod = new double[50][50]; 
        uarray_mod = new double[uarray.length][50];
        varray_mod = new double[50][varray.length]; 
        move(sarray,50,50,sarray_mod); 
        move(uarray,uarray.length,50,uarray_mod); 
        move(varray,50,varray.length,varray_mod); 
        e = new Matrix(uarray_mod); 
        f = new Matrix(sarray_mod);
        g = new Matrix(varray_mod);
        Matrix temp  =e.times(f); 
        result = temp.times(g);  

    }
    else 
    {
        Matrix temp = u.times(s); 
        result = temp.times(vtranspose); 
    }
    result = result.transpose(); 
    results = result.getArray() ; 

    return results ; 

Но как мы можем определить количество измерений?Существует ли метод определения количества измерений, до которых следует сократить систему, чтобы получить наилучшие результаты?Какие еще параметры мы учитываем для эффективной работы LSA?

1 Ответ

14 голосов
/ 18 марта 2012

Относительно выбора количества измерений:

1) http://en.wikipedia.org/wiki/Latent_semantic_indexing:

Еще одной проблемой для LSI стала предполагаемая сложность в определении оптимального количества используемых размеров.для выполнения СВД.Как правило, меньшее количество измерений позволяет проводить более широкие сравнения концепций, содержащихся в наборе текста, в то время как большее количество измерений позволяет проводить более конкретные (или более релевантные) сравнения концепций.Фактическое количество измерений, которое можно использовать, ограничено количеством документов в коллекции.Исследования показали, что около 300 измерений, как правило, дают наилучшие результаты при работе с документами среднего размера (сотни тысяч документов) и, возможно, 400 измерений для больших коллекций документов (миллионы документов).Тем не менее, последние исследования показывают, что 50-1000 измерений подходят в зависимости от размера и характера коллекции документов.

Проверка количества отклонений в данных после вычисления SVD может использоваться для определения оптимального числаразмеры сохранить.Дисперсию, содержащуюся в данных, можно просмотреть, нанеся сингулярные значения (S) на график осадки.Некоторые специалисты по LSI выбирают размерность, связанную с коленом кривой, в качестве точки отсечения для количества измерений, которые необходимо сохранить.Другие утверждают, что некоторое количество отклонений должно быть сохранено, а количество отклонений в данных должно диктовать правильную размерность для сохранения.Семьдесят процентов часто упоминается как сумма отклонений в данных, которые следует использовать для выбора оптимальной размерности для повторного расчета SVD.



2) http://www.puffinwarellc.com/index.php/news-and-articles/articles/33-latent-semantic-analysis-tutorial.html?showall=1:

Хитрость в использовании SVD состоит в том, чтобы выяснить, сколько измерений или «концепций» использовать при аппроксимации матрицы.Остается слишком мало измерений и важных шаблонов, слишком много, и шум, вызванный случайным выбором слов, снова закрадывается. Алгоритм SVD немного сложен, но, к счастью, в Python есть функция библиотеки, которая делает его простым в использовании.Добавив метод из одной строки ниже к нашему классу LSA, мы можем разделить нашу матрицу на 3 другие матрицы.Матрица U дает нам координаты каждого слова в нашем «концептуальном» пространстве, матрица Vt дает нам координаты каждого документа в нашем «концептуальном» пространстве, а матрица S единичных значений дает нам подсказку о том, сколько измеренийили «понятия», которые мы должны включить.

def calc(self): self.U, self.S, self.Vt = svd(self.A)

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

enter image description here

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

Причина, по которой мы выбрасываем первое измерение, интересна.Для документов первое измерение соотносится с длиной документа.Для слов это соотносится с тем, сколько раз это слово использовалось во всех документах.Если бы мы центрировали нашу матрицу, вычитая среднее значение столбца из каждого столбца, мы бы использовали первое измерение.В качестве аналогии рассмотрим результаты игры в гольф.Мы не хотим знать фактический счет, мы хотим знать счет после вычитания его из номинала.Это говорит нам, сделал ли игрок птичку, тележку и т. Д.



3) Ландауэр Т.К., Фольц П.В., Лахам Д., (1998), «Введениек латентному семантическому анализу ', Дискурсивные процессы, 25, 259-284:

enter image description here

...