Category: россия

Статистически устойчивые пары прилагательное+существительное

Исходный материал - tree bank размером 143,139,298 слов, полученный синтаксическим разбором примерно 1.4 Гб русского текста в utf-8.

Из синтаксических деревьев брались именные группы прилагательное+существительное. Если прилагательное отсутствовало, то в статистике такая пара отражалась с подстановочным маркером прилагательного ((null)). Слова приводились к леммам.

Далее результат был загружен в MS SQL в табличку с тремя столбцами adj, n и freq. С помощью запроса

select A_N.adj + REPLICATE(' ', 20-LEN(A_N.adj) ), A_N.n + REPLICATE(' ', 20-LEN(A_N.N)), A_N.freq
 from adj_n A_N, adj_n NULL_N
 where NULL_N.n=A_N.n
       and A_N.adj!='((null))'
       and NULL_N.adj='((null))'
       and A_N.freq>NULL_N.freq
 order by A_N.freq desc
    
выведены такие пары adj+n, для которых частотность ((null))+n ниже, чем частотность adj+n. Другими словами, в выборку попали такие существительные, которые употребляются без определения реже, чем с ним. Первые 100 записей выглядят так:

Collapse )

Сравнение ранжировки словосочетаний adj+noun по mutual information и по частоте

Парсер обработал почти 1 Гб русского текста (в utf-8).
Результат парсинга - примерно 40 Гб в XML с частеречной разметкой и синтаксическими деревьями.
Специальная утилита разбирает эти деревья, выделяет из них словосочетания заданного типа. В данном случае мы собираем согласование прилагательное+существительное.
После сортировки по убыванию частоты словосочетаний получаем такую картину:
Collapse )

А если подсчитать mutual information и отсортировать по ее убыванию, то получается:
Collapse )
В глаза сразу бросается, что из топа пропали прилагательные "свой", "мой" и так далее.

Текучка по word2vec

Что самое главное в "обучении без учителя"? А то, что запустил с утра прокачку модели, и можно спокойно отправляться гонять на тракторе по лужам, или строить гараж из песка и досочек, или сходить покормить голубей и воробушков. В общем, отличный выбор, если вам 2-3 года и на улице хорошая погодка.

Итак, я собрал отладочный стенд для проверки word2vec в таком составе.
1. Сегментатор текста получается на вход текстовый корпус и сохраняет отдельные предложения в текстовом файле в формате "1 строка=одно предложение".
2. POS Tagger, обученный на эталонном размеченном корпусе, снимает неоднозначность и заменяет слова на леммы. Также он выкидывает из текста знаки препинания и приводит слова к нижнему регистру.
3. Результат скармливаем утилите word2vec, которая подбирает для слов векторно-непрерывное представление.
4. Проверяем разные пары слов на близость. Конкретно, ищем косинус угла между векторами, так что косинус=1 означает полное совпадение векторов (угол=0), а косинус=0 означает ортогональность.

Дальше для проверки надо попробовать создать вероятностную модель POS Tagger'а или shift-reduce парсера с использованием векторов в качестве признаков слов, но это на следующем этапе, если на текущем все заработает как хочется.

Итак, текущие результаты - близость некоторых пар, от самых близких до самых непохожих. На входе п.3 имеем файл размером примерно 174 Мб в utf-8.

Collapse )