на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Распознавание слов естественного языка с использованием нейросетей
p align="left">{ switch (znaks[i])

{ case "с": result = "существительное";//если в конце слова буква с - возвращаем результат

return result;

case "п": result = "прилагательное";

return result;

case "г": result = "глагол";

return result; } } }

if (hash.CheckHash(sLetter, "predlog") == true)//проверяем, является ли слово предлогом (ищем в соответствующей хеш-таблице

{ result = "предлог";//если слово есть в хеш-таблице - возвращаем результат

return result; }

//Для местоимений, союзов, деепричастий и наречий аналогично

if (String.Compare(sLetter, "не") == 0 || String.Compare(sLetter, "бы") == 0)

{ result = "частица";

return result; }

if (sLetter.Length < 2)

{ return "предлог"; }

//--------------------------------------------------------------------

string[] pril = {"ий","ый","ая","яя","го","ую","ое","их","ых","ым"};//массив окончаний прилагательных

string[] glagol = {"ит","ат","ят","ут","ют","ул","ял","ал","ли","ла","ег","ел","сь","ыл","ил"};//глаголов

string[] prich = {"вший","шими","вшая","вшем","вшие","ящий","ящая","ящие","щими","ющий","ющая","ющие","ущий","ущая","ущие","ащий","ащая","ащие","шего","щего"};//окончаний и суффиксов причастий

string okonchanie= (sLetter[sLetter.Length - 2].ToString() + sLetter[sLetter.Length - 1].ToString());

if (Array.IndexOf(pril,okonchanie)!=-1)//если окончание слова содержится в массиве окончаний прилагательных переходим к проверке суффикса

{string ok_i_suff = sLetter[sLetter.Length - 4].ToString() + sLetter[sLetter.Length - 3].ToString() + okonchanie;

if (Array.IndexOf(prich,ok_i_suff)!= -1)//ищем в массиве суффиксов и окончаний причастий

{ return "причастие"; //если есть - результат причастие }

return "прилагательное"; //если нет - прилагательное }

else

if (String.Compare(okonchanie, "ом") == 0)//если окончание -ом

{ string res= GetNeuroResult(sLetter,"-ом",N_HID,beta,m,Epoch,flag_om);//распознаем слово нейросетью

flag_om = true;//при повторном поступлении слова на -ом нейросеть повторно обкчаться не будет

return res; }

else

//Аналогично для -ем, -им, -ой, -ие, -ми.

….}

Метод Scaning логически можно разделить на 3 блока:

- поиск слова в хеш-таблицах;

- идентификация слова по окончанию и определение его типа;

- идентификация слова по окончанию и проведение углубленного анализа с помощью нейронной сети.

Во втором блоке подразумевается определение типа слова по окончанию (последние две буквы) при помощи условных операторов:

- при помощи метода IndexOf класса Array определяется наличие в соответствующем массиве (массиве окончаний глаголов - glagol, прилагательных - pril) данного окончания;

- если это окончание прилагательного или -ся то критерий поиска изменяется до идентификации по паре суффикс-окончание: определяется наличие данной пары в массиве prich (причастие);

- после проведения вышеуказанных операций функция возвращает тип лексемы: глагол, прилагательное или причастие;

- в случае, если окончание не найдено ни в одном из массивов, то тип лексемы определяется как существительное;

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

В третьем блоке в зависимости от окончания слова производится вызов функции private string GetNeuroResult(string sLetter, string sFileName, int N_HID, double beta, double m, int Epoch, bool flag) параметрами:

- sLetter - лексема,

- sFileName - имя файла с обучающей выборкой,

- N_HID - количество скрытых нейронов,

- beta - коэффициент обучения,

- m - момент,

- Epoch - количество эпох обучения,

- flag - логическая переменная, в значении «истина» означающая, что анализ будет производиться без обучения;

Код данной функции представлен ниже:

private string GetNeuroResult(string sLetter, string sFileName, int N_HID, double beta, double m, int Epoch, bool flag)

{ string[] techears = File.ReadAllLines(sFileName+".txt");

Binarization binar = new Binarization(techears);//проводим бинаризацию

double[,] inp = new double[1, 1], outp = new double[1, 1]; double[] test = new double[1]; //обучающая выборка, выходы, тестовая выборка

int max_inp, max_pat;//кол-во нейронов и выборок

inp = binar.GetBinarizeText(out outp, out max_pat, out max_inp);//получаем обучающую выборкув закодированном виде

test = binar.GetBinarizeWord(sLetter);//получаем тестовую выборку в закодированном виде

NeuroNetwork neuro = new NeuroNetwork(inp, outp, max_inp, N_HID, max_pat, beta, m, Epoch, sFileName, flag);//создаем объект нейросеть

if (flag == false)//если она не обучена

{ neuro.random_weights();//инициализируем весовые коэффициенты случайными числами

neuro.train_the_network(); //обучаем нейросеть }

string[] m_resultat = neuro.test_the_network(test);

string res1="",res2="";

switch (sFileName)

{ //в зависимости от имени файла с обучающей выборкой возможны определенные комбинации возвращаемых результатов

case "-ой":

res1 = "существительное";

res2 = "прилагательное";

break;

… }

//анализируем полученные значения нейросети и возвращаем результат

if (double.Parse(m_resultat[0]) < 0.5 && double.Parse(m_resultat[1]) < 0.5 && double.Parse(m_resultat[2]) < 0.5)

{ return res1; }

if (double.Parse(m_resultat[0]) < 0.5 && double.Parse(m_resultat[1]) < 0.5 && double.Parse(m_resultat[2]) > 0.5)

{ return res2; }

return "неизвестно"; }

Алгоритм данной функции можно разделить на следующие этапы:

- извлечение обучающей выборки из файла,

- ее бинаризация при помощи класса Binarization,

- если flag==false - обучение нейронной сети,

- получение результата,

- определение по полученному результату типа лексемы.

2.5 Описание тестирующей программы

Программа выполнена в виде Windows-приложения в среде Microsoft Visual Studio и имеет оконный интерфейс.

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

Приложение состоит из трех окон:

- окно ввода текста для анализа (рисунок 13);

- окно анализа текста (рисунок 14);

- окно добавления лексемы в хеш-таблицу или в обучающую выборку (рисунок 15).

Текст для анализа загружается из файла или вводится с клавиатуры в richTextBox. Результат анализа (лексема и класс) выводится в dataGridView (рисунок 10)

Рисунок 10 - электронная таблица dataGridView

2.6 Результаты тестирования

Программа запускается из файла KursP.exe. В интерфейсе окна ввода текста (рисунок 11) присутствуют две кнопки: “Загрузить из файла” - загрузка текста для анализа, «Далее» - перейти к анализу. Текст для анализа можно вводить и вручную.

Рисунок 11 - Окно ввода текста

При нажатии кнопки «Далее» на экране появится окно анализа текста (рисунок 12). В окне анализа текста имеются кнопки «Анализ» и «Обучение». Первая используется для анализа текста без обучения нейросети, вторая - соответственно с обучение. Кнопка «Анализ» становится активной только при наличии файлов с весовыми коэффициентами для всех нейросетей. Результаты анализа выводятся в таблицу лексем.

Рисунок 12 - Окно анализа текста

При необходимости можно добавить слово в хеш-таблицу или в обучающую выборку при нажатии на кнопки “Добавить слово в хеш-таблицу” и «Добавить слово на -ой, -им, -ем». После нажатия данных кнопок перед пользователем появится окно добавления слова (рисунок 13). Далее пользователю необходимо ввести слово и класс и нажать кнопку «Добавить».

Рисунок 13 - Окно добавления лексемы в хеш-таблицу или в обучающую выборку

Для тестирования программы будем использовать отрывок из произведения Л.Н. Толстого «Война и мир»:

«В штабе Кутузова ожидали вестей от командующего австрийской армией Мака. В это время в штаб неожиданно прибыл незнакомый генерал, которого адъютанты не захотели пропустить к Кутузову. Главнокомандующий вышел в приемную и узнал в прибывшем генерала Мака, который подтвердил слухи о поражении австрийцев под Ульмом и о сдаче всей армии. Князь Андрей понимал, что русская армия оказалась в очень тяжелом положении, что ей предстоит трудное сражение с французами. С одной стороны, он был рад этому, так как представилась наконец возможность принять участие в бое, с другой стороны - опасался поражения русской армии, понимая, что в данной ситуации преимущество на стороне Бонапарта.»

При тестировании будем использовать нейросеть со следующими параметрами:

- эпох - 6000;

- нейронов в скрытом слое - 15;

- момент - 0,7

- коэффициент обучения - 0,7.

При анализе полученного результата была выявлена ошибка (рисунок 14).

Рисунок 14 - Окно программы с результатом анализа с ошибкой

Данной ошибки можно избежать, добавив слово «Французами» в файл с тестовой выборкой.

После внесения соответствующих изменений в нейросеть был получен следующий результат (рисунок 15):

Рисунок 15 - Окно программы с результатом анализа с без ошибки

3. Руководство программисту

Используемые в тестирующей программе классы содержатся в библиотеке классов NeuroLibrary. Соответствующий библиотечный файл NeuroLibrary.dll содержится в одной директории с исполняемым файлом программы (файл KursP.exe).

Рассмотрим процедуру создания библиотеки классов. Для этого необходимо создать в VisualStudio проект типа ClassLibrary (рисунок 16).

Рисунок 16 - Создание проекта «Библиотека классов» в VisualStudio

После создания всех необходимых классов в библиотеке, необхлодимо произвести компиляцию проекта. В случае отсутствия ошибок в коде в папке NeuroLibrary/Debug/bin будет создан библиотечный файл.

Далее подключаем библиотеку классов к тестирующей программе. Для этого необходимо в окне «Обозреватель решений» (правый верхний угол) выбрать пункт «Ссылки», вызвать контекстное меню и выбрать пункт «Добавить ссылку». В появившемся окне (рисунок 17) необходимо открыть вкладку «Обзор» и указать путь к библиотечному файлу и нажать ОК. Выбранный файл будет автоматически добавлен в папку с испольняемым файлом программы.

Рисунок 17 - Окно добавления ссылки

Далее необходимо подключить соответсвующее пространство имен NeuroLibrary с помощью директивы using и классы данной библиотеки станут доступны.

В тестирующей программе для получения результата достаточно создать объект класса Analization и вызвать свойство GetResult. Все необходимые действия будут произведены в конструкторе класса. GetResult необходим для получения результата в виде списка объектов типа string.

Для возможности влиять на работу анализатора понадобится использование класса Hash. С помощью методов данного класса можно добавить слово-исключение в хеш-таблицу. Содержимое хеш-таблиц хранится в папке с исполняемым файлом программы в текстовых файлах: narechie, predlog, soyuz, deepr, iskl, mest.

Для возможности добавления слова в обучающую выборку нейросети предусмотрен статический метод AddToFile класса Analization. Обучающие выборки нейросети хранятся в текстовых файлах: -ом, -ем, -им, -ми, -ие, -ой.

Страницы: 1, 2, 3, 4, 5, 6, 7



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.