2012-05-12 2 views
2

Я новичок в компьютерном обучении и вычислительных вероятностях. Это an example from Lingpipe для добавления слога в слово по данным обучения.Как понять и добавить слог в этом примере?

Given a source model p(h) for hyphenated words, and a channel model p(w|h) defined so that p(w|h) = 1 if w is equal to h with the hyphens removed and 0 otherwise. We then seek to find the most likely source message h to have produced message w by: 

    ARGMAXh p(h|w) = ARGMAXh p(w|h) p(h)/p(w) 
        = ARGMAXh p(w|h) p(h)   
        = ARGMAXh s.t. strip(h)=w p(h) 

where we use strip(h) = w to mean that w is equal to h with the hyphenations stripped out (in Java terms, h.replaceAll(" ","").equals(w)). Thus with a deterministic channel, we wind up looking for the most likely hyphenation h according to p(h), restricting our search to h that produce w when the hyphens are stripped out. 

Я не понимаю, как использовать его для создания модели силлабификации.

Если есть обучающий набор, содержащий:

a bid jan 
a bide 
a bie 
a bil i ty 
a bim e lech 

Как иметь модель, которая будет разделять на слоги слова? Я имею в виду, что нужно вычислить, чтобы найти возможные слоговые перерывы нового слова.

Сначала вычислите что? затем вычислить что? Можете ли вы указать конкретный пример?

Большое спасибо.

ответ

3

Метод описанный в статье, основан на статистическом закона, позволяющего вычислить значение правильно наблюдения шумные значение а. Другими слова, не syllabified слово шумный или неправильно, как picnic, и цель найти возможно правильного значения, которое pic-nic.

Here - отличный видеоурок по этой теме (прокрутите до 1:25, но весь комплект лекций стоит посмотреть).

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

Существуют и другие языки с более сложной грамматикой. Например, тайцы не имеют пробелов между словами, но каждый слог может быть построен из нескольких символов, например. สวัสดี ->ส-วัส-ดี. Судебная силлабификация может быть трудной, но возможной.

По-английски, я бы не стал заморачиваться с Markov chains и N-grams и вместо того, чтобы просто использовать несколько простых правил, которые дают довольно хорошее соотношение матч (не идеально, однако):

  1. Две согласные между гласными VCCV - раскол между ними VC-CV как в с из-фе е, р IC-п с, кроме «кластер согласной», который представляет собой один звук: м ETH-о D, R о-че Ster, ч анг-о ут
  2. Три или более согласных между гласными VCCCV - разбивка по поддержанию смесей вместе, как в м на STE г или ч ILD-ре п (это кажется самым трудным, как вы не можете избежать словаря)
  3. Один согласного между двумя гласными VCV - расколом после первого гласного V-CV как в б а-совместно п, а-п д
  4. Правило выше, также имеет исключение, основанный на смеси: совместно Ур-а GE, пл ай-ти мне
  5. Два гласные вместе VV - раскол между ними, за исключением того, что они представляют собой «кластер гласный»: р ая м, но GLA cier, earl- еГО

Я хотел бы начать с «основными» правилами первыми, а затем покрыть их «сторожевые» правила, предотвращающие кассетные гласные и согласные должны быть разделены. Кроме того, было бы очевидное правило охраны, чтобы один согласный не мог стать слогом. Когда закончите, я добавил бы еще одно правило охраны на основе словаря.

+0

Большое вам спасибо за то, как разбить слово на возможные слоги. Теперь у меня есть общее представление о том, как использовать лингвистическое правило для этого, как вы объяснили. Рекомендуемая ссылка также полезна. Эта задача кажется не такой простой, поскольку в произношении может быть много исключений или нерегулярностей. Можете ли вы предложить или прокомментировать основанные на правилах и основанные на машинах подходы к решению проблемы разделения слов на слоги? – Dylan

+0

Благодарим вас за вашу оценку моего ответа. Я никогда не разрабатывал инструменты для написания английского языка, но я сделал это для тайского языка. Алгоритмически это выглядит просто: ** (1) ** получить простой список «Word | PunctuationMark | Space»; ** (2) ** Для каждого Слова, получите список * возможных * сломанных позиций; ** (3) ** Исключить некоторые позиции по правилам охраны. И еще одна мысль. Вполне возможно, что для Delphi существуют бесплатные библиотеки для работы. Извините, я не могу дать более конкретного ответа. Если вы не против функционального подхода, вы можете использовать 'Haskell' и' parsec' или 'F #' и 'fParsec'. – bytebuster

+0

Еще раз спасибо. – Dylan