Category: россия

Category was added automatically. Read all entries about "россия".

Доработки в коде чатбота

Доработка кода применения диалоговых правил в чатботе позволяет теперь немного более удобно задавать ответы в случае, когда в базе знаний и FAQ нет релевантной информации:
Collapse )

Дополнительно к этому реализован небольшой эксперимент с обработкой odqa-вопросов:
Collapse )

Сейчас в коде поставлена заглушка. Но по задумке эти нормализованные запросы можно будет обрабатывать через SPARQL-движок.

Большие братья смотрят за тобой! Но некоторые косят. (оффтопик)

На фоне "Strava’s data lets anyone see the names (and heart rates) of people exercising on military bases" конечно мелочь, но:
Сделал заказ на Яндекс.Такси из дома с планшета - мое местоположение автоматически определилось с точностью до дома, жаль подъезд не подцепился в заказ.
Вхожу в личный кабинет Ростелекома для оплаты инета - стабильно определяет, что я в Вологде, то есть ошибка в 100 км. Хотя кому как не им знать рутинг до квартиры.

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

Исходный материал - 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 )

Коллокации предлог+прилагательное+существительное

Продолжаею тему, начатую здесь.
Собраны предложные группы, состоящие из трех слов. Прилагательное является атрибутом существительного, то есть согласовано с ним по падежу, числу, роду, одушевленности.

TOP-100 по абсолютной частоте:
Collapse )

TOP-100 по mutual information:
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 )

Изменения в программе статистической обработки текста Empirika

Внес серьезные изменения в нее впервые более чем за год.

Изменение связано с алгоритмом разбивки обрабатываемого текста на слова в случаях, когда в лексиконе рабочего языка есть слова с символами-разделителями.

Хороший пример - русское существительное Нижний Новгород. Раньше программа считала его формы, встретившиеся в обрабатываемом текста, двумя отдельными словами Нижний и Новгород. Поэтому статистика о частотных свойствах грамматических форм и словарных статей получалась немного искаженная, так как частота форм слова Нижний Новгород фактически подмешивалась к частотам прилагательного нижний и существительного Новгород. В русском языке очень немного подобных "многословных" слов, поэтому искажение статистики получалось в целом несущественным для моих целей, но для английского языка, к примепру, ситуация гораздо сложнее из-за наличия большого количества фразовых глаголов.

Более того, такой алгоритм приводил к ложным уведомлениям об отсутствующих в лексиконе словах. Например, если в тексте встречалось словосочетание с оглядкой на маму, то после разбивки программа отдельно учитывала появление слова оглядкой. Это слово отдельно не употребляется, только в составе предлогов, например без оглядки на. Поэтому в лексиконе такого существительного нет. Но в списке "несловарных слов", выдаваемых Эмпирикой после обработки текстового массива, оно появится.

Новый алгоритм разбивки действует аккуратнее, с оглядкой на загруженный словарь и присутствующие в нем "многословные" грамматические формы. Взяв слово, он смотрит в лексиконе - не начинается ли с него какая-либо многословная форма, и если начинается, то определяет максимальную длину и переходит в режим накопления. Собрав из текста нужную цепочку слов, он пытается найти для них грамматическую форму, и если находит, то на дальнейшую статистическую обработку уходит уже объединенное слово.

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