В предыдущем посте я писал о том, что такое морфологическая омонимия (пример со словом «стали») и упоминал о том, что для её разрешения используют скрытые Марковские модели (Hidden Markov Model, HMM).
Вначале немного о разметке теста (в английской литературе этот процесс называется «part-of-speech tagging» (POST)) – это ручной или автоматический процесс, в результате которого каждому слову текста приписывает атрибутивная информация (тэг), которая определяет какой частью речи является это слово: существительное, глагол, прилагательное, наречие, местоимение, частица, союз, междометие и т.д. Именно тут мы и наткнёмся на проблему «стали».
Если не углубляться в детали работы алгоритма, то основной вопрос, на который он отвечает: «Подбери наиболее вероятный тэг для этого слова».
А если говорить о деталях, то для данной последовательности слов HMM таггер (программа, реализующая упомянутый алгоритм) подбирает такой тэг, который максимизирует формулу:
[1] P(слово|тэг)*P(тэг|предыдущие n тэгов), где «P(слово|тэг)» – условная вероятность появления в данном месте указанного слова, при условии, что оно будет иметь данный тэг, «P(тэг|предыдущие n тэгов)» — условная вероятность появления данного тэга, при условии наличий до этого указанной серии из n тэгов.
Настоящий таггер определяет последовательность тэгов для последовательности слов, но в педагогических целях мы посмотрим, как таггер назначает тэг одному слову.
Вначале мы используем базовую формулу, потом пройдёмся по примеру, а те, кто заинтересованы в том, как выводится «боевая» формула и кому нужны все математические выкладки, могут обратиться к указанной в конце статьи литературе.
Двусловный (использующий информацию лишь о предыдущем слове) (bigram) таггер выбирет тэг tj для слова wi, при условии, что предыдущий тэг был ti-1:
[2] ti = argmax(j) P(tj|ti-1, wi)
Используя некоторые упрощения условий Марков (так же перечислены в литературе) формулу [2] можно переписать в виде:
[3] ti = argmax (j) P(tj|ti-1)P(wi|tj)
В качестве примера используем предыдущие фразы:
«Рабочие выплавили много стали за смену»
«Дети за лето стали сильнее»
В первом примере слово «стали» является существительным, во втором глаголом. Для целей примера предположим, что каким-то лучшим способом все слова в предложении были подвергнуты таггированию, и лишь слово «стали» было пропущено в обоих примерах.
Теперь цель нашего таггера назначить наиболее вероятный тэг для следующих последовательностей:
много{НАРЕЧ} стали{???}
лето{СУЩ} стали{???}
Давайте посмотрим как формула [3] может быть применена для нашего примера. Формула говорит, что если мы попытаемся её использовать для последовательности «много стали», нам нужно будет выбрать тэг, имеющий наибольшую вероятность из двух вариантов:
[4] P(ГЛАГ|НАРЕЧ)P(стали|ГЛАГ)
и
[5] P(СУЩ|НАРЕЧ)P(стали| СУЩ)
Формула [3] и её порождения [4] и [5] состоят из 2-х частей: вероятности последовательности тэгов и вероятности слова для соответствующего тэга. Для «стали» вероятности P(ГЛАГ|НАРЕЧ) и P(СУЩ|НАРЕЧ) ответят нам на вопрос: «Какова вероятность того, что после наречия мы встретим глагол (существительное)?». Этот вопрос мы можем легко разрешить с использованием размеченного корпуса (например «ruscorpora.ru»). Вероятность следования существительного после наречия более велика, чем глагола (хотя и это не является исключением):
P(ГЛАГ|НАРЕЧ) = 0.021
P(СУЩ|НАРЕЧ) = 0.34
Заметьте, что вторые часть формул [3], [4] и [5] отвечают не на вопрос «Какова вероятность того, что у слова «стали» будет тэг ГЛАГ (СУЩ)?», а «Если данный тэг будет ГЛАГ (СУЩ), какова вероятность что это будет слово «стали»?»
P(стали|ГЛАГ) = 0.00003
P(стали|СУЩ) = 0.00041
В итоге получаем, что в искомой последовательности «много стали» слово «стали» должно быть помечено тэгом «СУЩ».
P(стали|ГЛАГ)=0.000007
P(стали|СУЩ)=0.00001
Вначале немного о разметке теста (в английской литературе этот процесс называется «part-of-speech tagging» (POST)) – это ручной или автоматический процесс, в результате которого каждому слову текста приписывает атрибутивная информация (тэг), которая определяет какой частью речи является это слово: существительное, глагол, прилагательное, наречие, местоимение, частица, союз, междометие и т.д. Именно тут мы и наткнёмся на проблему «стали».
Если не углубляться в детали работы алгоритма, то основной вопрос, на который он отвечает: «Подбери наиболее вероятный тэг для этого слова».
А если говорить о деталях, то для данной последовательности слов HMM таггер (программа, реализующая упомянутый алгоритм) подбирает такой тэг, который максимизирует формулу:
[1] P(слово|тэг)*P(тэг|предыдущие n тэгов), где «P(слово|тэг)» – условная вероятность появления в данном месте указанного слова, при условии, что оно будет иметь данный тэг, «P(тэг|предыдущие n тэгов)» — условная вероятность появления данного тэга, при условии наличий до этого указанной серии из n тэгов.
Настоящий таггер определяет последовательность тэгов для последовательности слов, но в педагогических целях мы посмотрим, как таггер назначает тэг одному слову.
Вначале мы используем базовую формулу, потом пройдёмся по примеру, а те, кто заинтересованы в том, как выводится «боевая» формула и кому нужны все математические выкладки, могут обратиться к указанной в конце статьи литературе.
Двусловный (использующий информацию лишь о предыдущем слове) (bigram) таггер выбирет тэг tj для слова wi, при условии, что предыдущий тэг был ti-1:
[2] ti = argmax(j) P(tj|ti-1, wi)
Используя некоторые упрощения условий Марков (так же перечислены в литературе) формулу [2] можно переписать в виде:
[3] ti = argmax (j) P(tj|ti-1)P(wi|tj)
Пример
В качестве примера используем предыдущие фразы:
«Рабочие выплавили много стали за смену»
«Дети за лето стали сильнее»
В первом примере слово «стали» является существительным, во втором глаголом. Для целей примера предположим, что каким-то лучшим способом все слова в предложении были подвергнуты таггированию, и лишь слово «стали» было пропущено в обоих примерах.
Теперь цель нашего таггера назначить наиболее вероятный тэг для следующих последовательностей:
много{НАРЕЧ} стали{???}
лето{СУЩ} стали{???}
Давайте посмотрим как формула [3] может быть применена для нашего примера. Формула говорит, что если мы попытаемся её использовать для последовательности «много стали», нам нужно будет выбрать тэг, имеющий наибольшую вероятность из двух вариантов:
[4] P(ГЛАГ|НАРЕЧ)P(стали|ГЛАГ)
и
[5] P(СУЩ|НАРЕЧ)P(стали| СУЩ)
Формула [3] и её порождения [4] и [5] состоят из 2-х частей: вероятности последовательности тэгов и вероятности слова для соответствующего тэга. Для «стали» вероятности P(ГЛАГ|НАРЕЧ) и P(СУЩ|НАРЕЧ) ответят нам на вопрос: «Какова вероятность того, что после наречия мы встретим глагол (существительное)?». Этот вопрос мы можем легко разрешить с использованием размеченного корпуса (например «ruscorpora.ru»). Вероятность следования существительного после наречия более велика, чем глагола (хотя и это не является исключением):
P(ГЛАГ|НАРЕЧ) = 0.021
P(СУЩ|НАРЕЧ) = 0.34
Заметьте, что вторые часть формул [3], [4] и [5] отвечают не на вопрос «Какова вероятность того, что у слова «стали» будет тэг ГЛАГ (СУЩ)?», а «Если данный тэг будет ГЛАГ (СУЩ), какова вероятность что это будет слово «стали»?»
P(стали|ГЛАГ) = 0.00003
P(стали|СУЩ) = 0.00041
В итоге получаем, что в искомой последовательности «много стали» слово «стали» должно быть помечено тэгом «СУЩ».
P(стали|ГЛАГ)=0.000007
P(стали|СУЩ)=0.00001
Литература
- Speech And Language Processing, D. Jurafsky, J.H. Martin, 1999