Приложение, использующее машинное обучение для автоматической коррекции пользовательских предложений: с чего начать?

Прежде чем задать мой вопрос, вот ситуация:

У меня есть некоторые базовые знания об искусственном интеллекте, я знаю о Inference Engine, кодировании на LISP или Prolog, немного о нейронной сети, но немного. Это то, что я изучал.

У меня есть проект, приложение, которое должно исправить некоторые пользовательские предложения.

Эти предложения являются обычными строками, которые могут содержать много разных символов. К счастью, благодаря Flex (lexer) я определил токены, которые теперь легче анализировать. Пример строки:

AZERTY AWESOME 333.222 AZERTY MAGIC P

Который дает токены (пример):

VERB NOUN NUMBER VERB ADJECTIVE SPEC

Я также использую Bison, чтобы разрешить некоторые комбинации, и отклонить другие:

VERB NOUN NUMBER VERB ADJECTIVE SPEC is ok
VERB VERB NOUN NUMBER  ADJECTIVE SPEC is not ok
etc...

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

AZERTY AWESOM E 333.222 AZERTY MAGIC POINT

Дополнительное пространство в слове awesome заставляет синтаксический анализатор распознавать VERB и SPEC вместо NOUN (как выше). Таким образом, исправление было бы удалить дополнительное пространство.

Другими ошибками могут быть пропущенный пробел (из-за чего вставляются два слова), неизвестные токены, неизвестный комбо (для бизонов), вообще без пробелов и т.д …

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

С моей «фиксированной коррекцией», скажем, 70% коррекции хорошо, и я бы хотел, чтобы этот процент вырос с помощью машинного обучения. Было бы учиться на неправильном&исправил предложения, а затем смог бы сам исправить предложения, которые я не смог исправить (последние 30%).

Вот мой вопрос, я новичок в машинном обучении, даже если я уже немного изучал ИИ и не знаю, с чего начать.

Мой первый вопрос: я знаю о нейронной сети, но она используется, чтобы угадать, верно? Например, я бы дал ему предложение, и он мог бы сказать мне, правильно это или нет. Но это не то, что я хочу, я хочу, чтобы приложение исправило это, а не просто сообщало, правильно ли это. Дело в том, что я не вижу, как приложение может «удалить / изменить» само по себе.

В каком направлении вы бы предложили мне пойти? Какие принципы / инструменты / технологии машинного обучения вы бы предложили для такого применения?

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

2

Решение

Ну, так как другие ответы не были опубликованы, а Бенджи Кесслер не суммировал свою ссылку, я решил опубликовать свой собственный ответ, если он кому-нибудь поможет.

Я решил использовать стратегию N-граммов, которая, я думаю, является хорошим способом решения моей проблемы. Это просто теория, и я начал ее кодировать, но она может не сработать. Но мне нравится идея, и я думаю, что стоит попробовать.

N-граммы — это UNIGRAM (слово), или BIGRAM (пара слов) или TRIGRAM (три слова) и т. Д. И т. Д.

Основная идея состоит в том, чтобы предоставить моему приложению много обучающих данных со строками хорошего формата. Для каждого из них я собираюсь посчитать n-грамм (от универа до три).

Я получу что-то вроде этого (после того, как приложу тысячи данных):

таблица униграмм (фигуры поддельные и случайные)

     word     |  occurrence  |   prob
________________________________________
I        |     500      |   0.2
want     |     645      |   0.2
a        |    2434      |   0.5
cat      |      20      |   0.1

биграмный стол

 first word    |   second word   |  occurrence  |   prob
___________________________________________________________
|    I        |     want       |      600      |    0.5
|    want     |     a          |      500      |    0.4
|    a        |     cat        |      100      |    0.1

то же самое для таблицы триграмм.

Поэтому, когда у меня есть эти данные, их легче проанализировать, давайте рассмотрим пример:

 I WANTA CAT

При анализе приложение сначала увидит, что WANTA не существует в таблице, поэтому оно будет разбивать это слово до тех пор, пока не получит «предложение» с хорошей вероятностью произойти.

Так что при разделении на «ХОЧУ» & «А», приложение увидит, что «ХОЧУ» имеет хорошую вероятность, то же самое для «А», затем он проверит совместимость биграмм, что тоже хорошо. Даже триграммы с «I» и «CAT» для большей точности.

Я думаю, что это хорошее решение, которое не требует много времени и которое, я надеюсь, будет довольно эффективным.

Надеюсь, я прояснил ситуацию и помог людям, которые задавали те же вопросы.

1

Другие решения

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector