?

Log in

No account? Create an account

Компьютерная лингвистика

Новостная лента www.solarix.ru

Entries by tag: N-граммы

Датасеты по сочетаемости слов в группах из 2, 3 и 4 слов (mutual information)
kelijah
В репозитории https://github.com/Koziev/NLP_Datasets/tree/master/MutualInfo выложены датасеты со статистикой по устойчивым сочетаниям слов. Датасеты получены с помощью C# кода, выложенного тут (см. описание) и урезаны до 100,000 первых записей, так как выложить полные файлы размером более 2 Гб на гитхаб невозможно.

Внутри файлов можно увидеть такие данные:
Read more...Collapse )

Решения на базе deeplearning4j (Java) MLP и vanilla MLP (C#) для WordRepresentations
kelijah
Выложил в репозиторий:

https://github.com/Koziev/WordRepresentations/blob/master/JavaModels/WithDL4J/src/main/java/WordRepresentationsTest.java - решатель на базе MLP, реализованного средствами библиотеки deeplearning4j

https://github.com/Koziev/WordRepresentations/blob/master/CSharpModels/MyBaseline/Program.cs - решение на базе моей C# реализации vanilla MLP

Текущие результаты для keras/theano MLP модели в эксперименте с word representations
kelijah
Репозиторий эксперимента: https://github.com/Koziev/WordRepresentations

Сделал условный grid search для основных гиперпараметров. Для 2-грамм и 3-грамм эксперимент закончен, для 4-грамм продолжается:
Read more...Collapse )

Первый опыт использования KenLM для оценки валидности предложения
kelijah
Програмный пакет для построения и использования языковых моделей KenLM лежит на гитхабе: https://github.com/kpu/kenlm
Read more...Collapse )

Перестановочная нормализация фраз в результатах оценки сентимента
kelijah
Сделал очень простой алгоритм, который подбирает правильный порядок слов в ходе нормализации словосочетаний.

Выдержка из результатов тестового прогона по моей базе оценок из отзывов:

перестановочная нормализация словосочетаний...Collapse )

Сейчас в базе 23990 уникальных словосочетаний по которым сделана оценка или обнаружен факт наличия/отсутствия какого-то аспекта. Общее количество оценок и фактов равно 9677415. Думаю, можно попытаться поучить RNN/LSTM модель нормализовать словосочетания по такому шаблону:

Нормализация словосочетаний...Collapse )

100% качества добиться, наверное, вряд ли получится из-за ограничений на объем памяти в сетке, но общие закономерности рекуррентная модель должна уловить. Например:

приведение к нейтральной форме:
анимация бедноватенькая ==> бедноватая анимация

приведение главного существительного к словарной форме и пересогласование зависимого прилагательного:
анимационные программы очень веселые ==> очень веселая анимационная программа

и так далее.

Статистически устойчивые пары прилагательное+существительное
kelijah
Исходный материал - 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 записей выглядят так:

Read more...Collapse )

Вероятности для заполнения слота прилагательного у существительного
kelijah
Берем результаты синтаксического парсинга большого корпуса.
Берем узлы с существительным (именные группы в узком понимании).
Если у существительного нет согласованного атрибута-прилагательного, то запоминаем как формальную биграмму ((null))+сущ.
Если есть атрибут-прилагательное, то запоминаем как обычно прил|сущ.
Накапливаем частоту.
Read more...Collapse )

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

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

2-граммы по 3,000,000 синтаксическим деревьям
kelijah
Примерно 3 миллиона предложений длиной от 6 до 11 слов обработаны синтаксическим парсером.
В полученных леревьях найдены определенные ребра и собрана статистика их встречаемости.

прилагательное + существительное
примеры...Collapse )

существительное + существительное_в_род_падеже
Примеры...Collapse )

существительное_подлежащее + глагол_сказуемое
Примеры...Collapse )

глагол_сказуемое + существительное_прямое_дополнение
Примеры...Collapse )

Опять про 2-граммную модель текста с векторными репрезентациями слов
kelijah
Ошибки (см. предыдущий заход в тему тут) устранены, гиперпараметры модели подкручены, чудесных результатов почти не осталось, за исключением одного магического числа 13%.

Кратко опишу задачу еще разочек.

1. Имеем векторные репрезентации слов, полученные заранее по большому корпусу (~22 Гб русского текста в utf-8, с включенной туда русской википедией, региональными/международными новостями, худлитом и так далее).
2. Берем список предложений. Для простоты анализа я взял предложения длиной 6 токенов, то есть это обычно 5 слов и финализатор. Модель обсчитывается не очень быстро, ибо premature optimization, C# и бла-бла-бла, поэтому беру только 100,000 предложений. В принципе, модель успевает достичь равновесия, как будет видно далее на графике. Потом мы, наверное, загоним это куда-нибудь в caffe, чтобы посмотреть на жизнь с векторами длиной 500...3000.
3. В каждом предложении идем по словам, и для очередного слова пытаемся предсказать следующее слово. Модель видит не сами слова, а их векторы (см. п.1.), поэтому задача в сводится к экстраполяции многомерной функции N действительных переменных, при N=50...1000.
4. Евклидова мера разницы между экстраполированным вектором (предсказанным словом) и фактическим вектором дает текущую ошибку предсказания, которую мы будем рисовать далее.
5. Экстраполяцией будет заниматься нейросеть с одним скрытым слоем.

График сходимости при обучении (oy - ошибка в %, ox - число предложений):
Сходимость модели в ходе обучения......Collapse )
Интересный момент, которому я пока не придумал однозначного объяснения - существование какого-то магического значения в 12-13% для разных параметров и разных обрабатываемых корпусов. Модели тяготеют в конечном итоге именно к такой ошибаемости, хотя скорость выхода на это значение разная. Из общих соображений тут должна играть свою роль избыточность текста. Банальную ошибку тоже не исключаю, errare humanum est, тем более что график сходимости на плато демонстрирует странную синхронность. Хорошим способом проверки будет обсчет паттернов на caffe или аналогичном фреймворке.

Второй интересный момент: более простая модель с векторами длиной 50 сходится гораздо быстрее, чем более сложные модели. Предполагаю, что причиной может быть работа градиентного спуска в нейросети с полносвязанными слоями.

Хороший вопрос - какие слова предсказывать труднее всего? Для поиска ответа делаем так. После окончания обучения прогоняем через обученную модель предложения в режиме чистого распознавания и отрисовываем ошибочные слова с визуальным выделением желтым фоном. Чем желтее фон под словом, тем хуже у сети получилось предсказать его. Вот верхушка самых трудных случаев:
Большая ошибка предсказания...Collapse )

Вот серединка, желтизны гораздо меньше:
Средний уровень ошибок предсказания...Collapse )