Тема на проекта




ИмеТема на проекта
Димитър Маринов Вулджев
Дата на преобразуване14.01.2013
Размер161.33 Kb.
ТипДокументация
източникhttp://lsa-svd-application-for-analysis.googlecode.com/svn-history/r128/trunk/LSA/Other/noit.doc
НАЦИОНАЛНА ОЛИМПИАДА ПО ИНФОРМАЦИОННИ ТЕХНОЛОГИИ

2012г.


Номер:

712

Тема на проекта:
Relate2spot

Категория:

Приложни програми


Автори:
Димитър Маринов Вулджев
11 клас, НПМГ „Акад. Л. Чакалов“, гр. София

Иван Стефанов Стефанов
11 клас, ПМГ „Н. Обрешков“, гр. Казанлък

Лични данни 3

Въведение 4

Съществуващи решения 5

Основни етапи 5

Основни познания 7

Предварителна обработка 7

Векторно пространство и матрица на асоциациите 7

Трансформации на матрицата на асоциации 8

Декомпозиция по сингулярни стойности 8

Същност на Латентния семантичен анализ 8

Клъстеризация на векторите 9

На база центроиди (k-means) 9

Реализация 10

Технически пречки 10

Памет 10

Точност на изчисленията 11

По реализацията 11

Честотна матрица 12

Декомпозиране и P/Invoke 12

Архитектура 13

C++ 13

Латентно пространство 13

Интернет ресурси 14

Интерфейс 14

Кратко ръководство 15

Заключение 18

Използвана литература 20


Лични данни


Автор: Димитър Маринов Вулджев
Адрес: ул. Парчевич 46, ет. 3, ап. 7, гр. София
Телефон: +359897912128
E-mail: vouldjeff@gmail.com
Училище: НПМГ „Акад. Л. Чакалов”, София
Клас: 11

Автор: Иван Стефанов Стефанов
Адрес: ул. Хината 1, гр. Казаналък
Телефон: +359897912128
E-mail: inj.stefanov@gmail.com
Училище: ПМГ „Никола Обрешков”, Казанлък
Клас: 11


Научен ръководител: Георги Георгиев, студент първи курс във ФМИ, специалност Софтуерно инженерство
Телефон: +359895021180
E-mail: gopigabrovo@gmail.co​m


Въведение


В днешно време хиляди източници бълват информация всяка секунда. От политически статии до доклади на служби за контраразузнаване, прочитането и обработването на определена група текстове става все по-трудна задача. Един от основните проблеми за потребителя е концентрирането му върху специфичен сегмент от колекцията. Създавайки механизъм, който автоматично да анализира текстовете и да съобщава на потребителя за потенциално интересни връзки, ще получим по-голямо ниво на разбиране и съответно по-добри резултати, които понякога биха могли да спасят животи [1].

Целта на настоящата разработка е да разгледа гореспоменатия проблем, базирайки се на статистическата техника Латентен семантичен анализ (ЛСА) [2]. В основната на тази техника стои хипотезата, че между отделните термини (думи или словосъчетания) съществуват неявни (латентни) връзки. Откриването на тези взаимовръзки позволява на ЛСА да се справи със синонимията и частично с полисемията1: едни от основните проблеми при статистическите подходи.

Всъщност интерес при анализирането на корпуси от данни представляват не всички думи, а субектите2 (или термини) и най-вече взаимовръзките между тях: комуникации, финансови транзакции, физически срещи и др. По-късно в настоящата разработка ще бъде обсъдено каква точно информация и с каква точност може да бъде извлечена от тези взаимовръзки.

Примерни приложения на подобна система за идентифициране на интересна информация в големи корпуси3 са:

  • Статистически проучвания на база новини в пресата.

  • Запознаване на правните фирми с множество документи преди началото на самия съдебен процес.

  • Бързо анализиране на получени съобщения с цел контраразузнаване.

  • Идентифициране на връзки между гените на биологичен вид и съответно предсказване на неизвестни до момента функции на даден ген [3].

Съществуващи решения


Статиите в интернет пространството, занимаващи се с Латентен Семантичен Анализ, не са малко. Повечето от тях използват метода с цел по-добри резултати при търсещи машини [4], а други – за препоръчване на нови продукти на база вече закупени [5] [6]. Също бяха открити и статии, които адресират точно откриването на взаимовръзки в големи корпуси [1] [7].

По-долу ще откриете някои от основните разлики между проучените разработки и настоящата:

  • Съществуващите разглеждат проблема единствено за английски език и за една област (политически новини, доклади за контраразузнаване).

  • Съществуващите не дават ясна информация за процеса на реализация и основните проблеми.

  • Настоящата се опитва да обясни как да получим по-добри резултати (памет, бързодействие, многонишково програмиране).

  • Настоящата предоставя завършено приложение, позволяващо на потребителя да настройва всеки един аспект на алгоритмите.

Основни етапи


Идеята за подобен проект се появи в следствие на нуждата от подобен инструмент на единия автор. В началото бе направено обстойно проучване на това какво е Латентен Семантичен Анализ, авторите се запознаха със съществуващите продукти и разработки, техните плюсове и минуси. След което бе формиран план за работа, заедно със спецификация на системата (архитектура, функционалност, технологии). Към днешна дата съществува работещо приложение с основна функционалност, като се работи по добавянето на нови модули и оптимизирането на вече съществуващи. Основните проблеми, които възникнаха по време на реализацията са:

  • Реализация на високо продуктивен метод за анализ на колекцията от текстове и построяване на асоциативна матрица (в следващата глава ще се запознаете).

  • Интегриране на високо оптимизираната библиотека SVDLIBC, писана на C, към настоящата разработката, писана на C#.

  • Реализиране на редица методи за автоматизирано откриване на субекти в текстовете.

  • Реализация на запис и зареждане на „проект“ (работната среда в програмата) – записа на данни от неуправляемата памет (в следващите глави) бе проблем.

  • Работа по общоприети стандарти за сегментация на функционалността и кода при потребителския интерфейс.

Инсталатор за самото приложение може да бъде открит както на CD-то, така и на http://code.google.com/p/lsa-svd-application-for-analysis/ (публична хранилка на проекта).
Допълнителни файлове, с които да тествате самото приложение, също могат да бъдат открити на диска. Кратко потребителско ръководство може да бъде открито на края на настоящата документация.

Основни познания


Тази глава обяснява всичко необходимо за разбирането на Латентния семантичен анализ. Ще бъдете запознати с важни методи за предварителна обработка на информацията. Следва описание на латентното пространство, а на края на главата може да откриете няколко метода, които, приложени върху латентното пространство, дават интересни резултати.

Предварителна обработка


  • Премахване на Стоп-думи
    Премахване на най-често срещаните думи в езика – съюзи, предлози, местоимения, междуметия и др.

  • Премахване на Словоформи
    Свеждане на думите към тяхната основна форма (сегментация), така например ходя и ходейки ще се възприемат като една и съща дума.

  • Откриване на Субекти и премахване на псевдоними
    Разпознаване на словосъчетанията (напр. Иван Вазов) и механизъм за псевдоними – такъв, който ще разпознае Българска народна банка и БНБ като един и същи субект.

Векторно пространство и матрица на асоциациите


Векторното пространство представлява модел за извличане на информация. Връзките между термини и документи са представени чрез вектори в матрица на асоциациите (честотна матрица) [8]. Векторното пространство интерпретира кохезията (връзката) между думите и документите, чрез присвояване на оценки към всяка двойка термин / документ, процес, наречен претегляне (на англ. term weighting). Най-простата оценка е броят на срещания на думата в съответния документ.

Трансформации на матрицата на асоциации


За получаване на по-добри резултати следва да се използва по-сложна претегляща функция, която взима предвид не само колко често се среща определена дума, а и редица други фактори. Най-популярната претегляща функция е Term frequency – Inverse document frequency (TF-IDF). Този тип претегляне взима предвид следните неща:

  • Термините, които се появяват по-често в документ, вероятно са по-важни.

  • Термин, който се среща в по-малко документи, е по-важен от термин, които се среща във всеки документ.

  • По-големите документи трябва да се третират еднакво спрямо по-малките документи.

Декомпозиция по сингулярни стойности


Декомпозицията по сингулярни стойности (Singular Value Decomposition) е математически метод, който в линейната алгебра представлява факторизация4 на реална или комплексна матрица с много приложения в обработката на сигнали и статистиката [9].

Същност на Латентния семантичен анализ


След като сме извършили Декомпозиране по сингулярни стойности на честотната матрица получаваме резултат от три нови матрици, на базата на които функционира Латентния семантичен анализ. Взаимовръзките между два термина например може да се намери като се сравнят съответните им вектори при произведението на две матрици. По-известните методи за сравнение на тези вектори са са:

  • Евклидово разстояние;

  • Косинус на ъгъл;

  • Корелация на Пиърсън (обикновено най-добри резултати).

Някои от основните характеристики на ЛСА са:

  • ЛСА векторите отразяват дълбоки взаимовръзки открити на база холистичен5 анализ на цялостната индексирана информация (колекция) [10].

  • Налице е пълна обща приложимост по отношение на тематика на текстовете, жанр и език.

  • Идентифицираните взаимовръзки представляват наслагване на поредица асоциации от високи редове. Това е причина ЛСА да открива „силни“ (и при това правилни) връзки, за които на пръв поглед няма връзки от по-нисък ред.

  • Поне в някои приложения ефективността на техниката расте, когато и количеството документи расте.

Клъстеризация на векторите


Друга интересна операция, която може да се извършва на база матриците субект-субект или документ-документ, е клъстеризацията. Това представлява процес, който разделя p субекта (или документа) в n групи. Благодарение на основното свойство на латентното пространство, в зависимост от броя и обхвата на групите, субектите в една група малко или много описват еднаква тематика по отношение на текстове.

На база центроиди (k-means)


В този тип клъстеризация, групите са представени чрез централни вектори наречени центроиди. Когато имаме фиксирани k групи, клъстеризацията представлява задача за оптимизация и се търсят приближения. Най-известният алгоритъм е този на Лойд или по-известен като k-means, който открива локален максимум.

До момента авторите на настоящата разработка са провели експерименти чрез k-means клъстеризиране. Дори и с голям брой измерения, при избиране на по-фини параметри и филтриране на ненужните субекти, резултатите биват добри, а също и във връзка с реалността.

Реализация


В процеса на работа срещнахме доста трудности и проблеми, върху които работихме, но в крайна сметка успяхме да създадем успешно работещо приложение с редица подобрения по програмната логика. В тази глава се обсъждат основните проблеми в хода на реализацията.

Технически пречки

Памет


При анализ на голям обем от текстове, паметта се оказва ключов фактор. За съжаление, дори днес с 16GB оперативна памет не може да избягваме от оптимизациите. Например, ако при зареждане на масив от тип double с над милион клетки (всяка по 8 байта, повдигнати на степен, равна на измеренията) получаваме TB-ти памет. При по-внимателен анализ на честотната матрица, ще забележим, че тя е с доста ниска гъстота на ненулеви стойности (на англ. sparse matrix). При проведен експеримент с колекция от 9674 документа и 74 538 уникални думи (субекта), размерът на обикновената честотна матрица ще е около 5,37GB. Реално ненулевите данни представляват само 430MB от цялата матрица. Използвайки ортогонален списък за записване, може да изградим честотната матрица използвайки единствено 0.86GB памет.



фигура – пример за ортогонален списък

Точност на изчисленията


Тъй като в ядрото на приложението стоят математически модели с голямо количество изчисления, бе направен експеримент за точността на аритметиката при C# и C++.

double d1 = (1 ∗ (0.5 − 0.4 − 0.1));
decimal d2 = (1 ∗ (0.5m − 0.4m − 0.1m));

C# - double

C# - decimal

-2.77555756156289E-17

0.0


Типът double се оказва силно повлиян в следствие на стандартът IEEE 754, който дефинира как се записват числа с плаваща запетая в системата и как се извършват основните математически операции върху тях. Тъй като decimal е конструиран главно, заради софтуерните продукти, които оперират с пари, там не се наблюдава подобен тип неточности. За сметка на това decimal заема двойно повече памет от double, а аритметичните операции са 20 пъти по-бавни. За настоящето приложение подобни минимални отклонения не са проблемни, а и цената на decimal е твърде висока, затова се използва double като тип за съхранение на числовите стойности.

По реализацията


При започването на работа по проекта, първото направено нещо след кратко проучване на материята бе наивна реализация, която да построява честотна матрица и изчислява ДСС. Тази реализация не използваше сложни методи, подходи и програмни техники. При изпълнение на програмата с колекция от 128 патента (10МБ в .txt формат) на машина с Intel Core i5 процесор с четири ядра на 2,3GHz, изграждането на честотна матрица трае около 20 минути, а декомпозиция по сингулярни стойности не може да бъде извършена поради липса на достатъчно памет.

Честотна матрица


След внимателно пренаписване на кода, анализиращ колекцията, изграждането на същата честотна матрица се изпълни за 5 сек! Средствата, които бяха използвани за подобряване бързодействието са:

  • Многонишково анализиране на документите.

  • Използване на хеш-таблици с цел по-бърза проверка (константна6) дали дадена дума е вече срещана, и ако да, то какъв е нейният идентификатор.

  • Анализиране на документите, четейки ги ред по ред от файлов поток, а не първо да бъдат прочетени, а после анализирани. Втория начин освен бавен, използва и много памет за запазване на текста в оперативната памет.

  • Преструктуриране на цялостната логика на изпълнение.

Декомпозиране и P/Invoke


Тъй като с цел използване на по-малко памет, честотната матрица бива записана като ортогонален списък, трябва да се използва друг (ненаивен) алгоритъм. След дълго проучване и опити за авторско реализиране се стигна до заключението, че ще бъде използвана готовата библиотека SVDLIBC, написана на C++. Комуникацията между двата езика се извършва посредством P/Invoke7 услугите в .NET.

Най-голям проблем предизвика фактът, че C++ работи с обекти от неуправляема памет, a C# с управляема8, и тъй като честотната матрица се изгражда от C# трябва по някакъв начин да се подаде на C++. За решението на проблема част от кода на C# бе пренаписан на C++, а останалата част бе променена така, че да оперира върху информация от неуправляемата памет. Това допълнително ускорява някои операции с матриците.



фигура – структура на P/Invoke

Архитектура


Преди самото програмиране, бе направен обстоен анализ на логическите връзки между елементите на приложението. В следствие на това бе изведена структура, в която всеки компонент отговаря за точно една логическа функция, като по този начин се постига максимална автономност.

фигура – разделение по тип функционалност (реализирана чрез .dll файлове)

C++


Този пакет (библиотека или .dll файл) е написан на C, но компилиран с Visual C++. В него се дефинират няколко основни структури за неуправляема памет, с които оперират както математическите операции в този пакет, така и пакетите от по-горно ниво, посредством P/Invoke.

  • DMat – стандартна матрица, представена чрез double[][].

  • SMat – ортогонален списък, представен чрез два int[] и един double[], като масивите са с размер броя на ненулевите стойности в асоциативната матрица.

  • SVDRec – декомпозицията на матрица, представена чрез две DMat и един double[] за сингулярните стойности.

Латентно пространство


Този пакет контролира цялостния процес по анализиране на колекцията. По-долу ще откриете схематично представяне на главния процес на обработка на текстовете.


фигура – схема на процеса на анализ

Интернет ресурси


При разглеждане на субектите и техните взаимовръзки, за нас е важно да получим колкото се може повече информация всяка една връзка. Освен търсене в текстовете на самия корпус е полезно да се предоставят и резултати от интернет. За момента е реализиран модул, който по даден субект или комбинация от субекти извежда топ n резултата от Bing (Google вече не предлага API за търсене).

Интерфейс


Този пакет може да бъде разглеждан като един шлюз – границата между потребителя и софтуерния продукт. Интерфейс контролира какво правят пакетите от по-долно ниво на база потребителски команди. Един от фундаменталните проблеми при разработка на интерфейси е, че ако бъде пренебрегната тяхната важност в цялостния процес, се получава както лош код (всички операции и данни са в един клас), така и е възможно потребителя да не бъде удовлетворен от крайния продукт.

За разработката на настоящия проект бе използвана платформата .NET и Windows Presentation Foundation (WPF) технологията за потребителския интерфейс9.
Проблем при реализацията представляваше това как да бъде сегментиран кода, за да получим максимална независимост и гъвкавост. В крайна сметка бе избран шаблона Model-View-ViewModel за основа, тъй като той въвежда и трети слой ViewModel (ИзгледМодел) в стандартното разделение Model-View. С помощта на този трети слой се премахва омешването на код с различно логическо предназначение.

Потребителският интерфейс се състой от няколко основни панела (контейнера с информация), които са реализиране независимо един от друг. По този начин освен много добро сегментиране на кода, можем да позволим на потребителя да размества панелите из екрана така както той сметне за удобно.


фигура – структура на потребителския интерфейс

Кратко ръководство


Приложението разполага с инсталатор Setup.exe (и съответно деинсталатор), който може да бъде открит на приложения диск. Нужен ви е единствено .NET Framework 4.0. За работата на програмата е необходим корпус с текстови файлове, като на диска също може да намерите примерени корпуси (и също вече създадени проекти), който могат да се използват на готово за разглеждане на това как работят анализите.



фигура – начален екран на програмата

При стартиране се отваря началният екран (фиг. 6). От него трябва да изберете дали искате да създадете нов проект, или да заредите вече съществуващ. Бихте могли да заредите ms-corpus.lsa от диска (ще ви попита да посочите един файл от корпуса – посочете произволен файл от папката MS-Stenograms), който е примерен проект с 46 стенограми на Министерски съвет на Република България. В случай, че искате да започнете нов проект, ще преминете през няколко други екрана, в които ще бъдете попитани за стандартни настройки на процеса (описани в предишните глави).



фигура – екран след зареждане на корпус

След като сте заредили корпус ще видите екрана от фиг. 7. В червено е списъкът с всички субекти, открити в корпуса. При двукратен щрак ще се зареди графиката в синьо, която показва най-близките думи на щракнатата спрямо латентното пространство. С десен щрак на връх от графиката може да го премахнете, а с десен щрак на дума от списъка с червено може да добавите друга дума към съществуващата графика. В зелено се изписват топ резултати при търсене на щракната дума в Bing.



фигура – преглед на групировката на субектите.



фигура – векторите на най-близките думи на РЗС, представени в правоъгълна координатна система

Заключение


Настоящата разработка разглежда Латентния семантичен анализ и неговото приложение в откриване на „дълбоки“ взаимовръзки между субекти при голямо количество документи. Авторите са направили проучване в областта и представят оптимизирано приложение, с помощта на което да се откриват интересни взаимовръзки в корпус от текстове. Една програма от подобно естество би намерила приложение в редица области, където се налага анализиране на много информация, например статистически проучвания за тенденции из новинарски сайтове.

Със създаденото приложение е направен експеримент, използвайки колекция от патенти, и резултатите са положителни. ЛСА успешно открива взаимовръзки между различните биологични термини например, или при групиране компютърните термини попадат в една група.

Друг, по-интересен експеримент, който бе проведен, с български текстове на база стенограми на Министерски съвет направи обещаващи заключения. Трябва да се отбележи, че повечето прегледани връзки, след изпълнение на програмата, не биха били забелязани при едно обикновено четене. По-долу ще откриете таблица, която показва за връзката между два термина какво казват 5 човека и програмата (съответно и кое е вярно).

Субект 1

Субект 2

Оценка човек

Оценка ЛСА

Кой?

мораториум

Яне Янев

0;0;0;1;0 => 0,2

0,64

ЛСА

Военно-въздушни сили на САЩ

Варна

0;0;0,2;0 => 0,04

0,36

ЛСА

Нефт

Енергетика

1;1;1;1;1 => 1

0,86

Човек

Нефт

ВЕИ

0,5;0,5;1;0 => 0,4

0,72

ЛСА

Република България

Росен Плевнелиев

1;1;1;1;1 => 1

0,49

Човек

Шеврон

Фонд „Изследвания“

0,5;0;1;0;0,5 => 0,4

0,68

ЛСА



Бъдещите планове за развитие са в следните насоки:

  • Автоматизирано извличане на новинарски статии с цел проучване на тенденции.

  • Използване на методи за намаляване на измерения при визуализирането на субекти в правоъгълна координатна система.

  • Създаване на методи, които да спомогнат за по-лесното определяне дали дадена връзка между субекти е вярна или грешна (в реалността).

  • Категоризиране на субектите в категории (човек, компания) и автоматично изготвяне на доклади (напр. двойки човек-компания с най-голяма взаимовръзка).

  • Преструктуриране на изчислението и начина на запазване на латентното пространство с цел позволяване на опериране в облачни конфигурации (и съответно реално постижим анали на огромни колекции).

  • Изготвяне на подробно потребителско ръководство.

Авторите се надяват, предвид потенциалните възможности, тяхната разработка да намери приложение в редица сфери.


Използвана литература


x

[1]

R. B. Bradford, "Relationship Discovery in Large Text Collections Using Latent Semantic Indexing".

[2]

Deerwester et al., "Computer information retrieval using latent semantic structure ," 4,839,853, June 13, 1989.

[3]

Bogdan Done, Purvesh Khatri, Arina Done, and Sorin Draghici, "Predicting Novel Human Gene Ontology Annotations Using Semantic Analysis," IEEE/ACM Transactions on Computational Biology and Bioinformatics, vol. 7, no. 1, January-March 2010.

[4]

Preslav Nakov, "Getting Better Results With Latent Semantic Indexing".

[5]

Tomas Hofmann, "Latent Semantic Models for Collaborative Filtering," ACM Transactions on Information Systems, vol. 22, no. 1, pp. 89-114, January 2004.

[6]

David Gleich and Leonid Zhukov, "SVD based Term Suggestion and Ranking System".

[7]

Dhiraj Joshi and Daniel GaticaPerez, "Discovering Groups of People in Google News".

[8]

Vijay V. Raghavan and S. K. M. Wong., "A critical analysis of vector space model for information retrieval," Journal of the American Society for Information Science, vol. 37, no. 5, pp. 279-287, January 1999.

[9]

Thomo A., "Latent Semantic Analysis (Tutorial),".

[10]

A. Kontostathis and W. Pottenger, "A Mathematical View of Latent Semantic Indexing: Tracing Term Co-occurrences," 2002.

[11]

Marc Pieterse, "A tool for click data preprocessing," June 2010.

x



1 Способността на дадена дума да е носител на няколко значения едновременно (син напр.).

2 (термини) Става на въпрос за определени думи или словосъчетания, които имат пряко значение (имена, местоположения, организации и др.).

3 Под големи корпуси се има предвид над 10000 или 100000 документа.

4 Разлагане на един обект като произведение на други.

5 Холисъм представлява идеята, че нито един от компонентите на дадена система (физична, биологична, лингвистична и тн.) не може да бъде описан взет отделно. Вместо това системата като цяло определя доста точно поведението на частите.

6 Операцията четене от хеш-таблица има сложност O(1).

7 Самата реализация, която се възползва от p/invoke и комуникира с C++ може да бъде разгледана в приложените файлове.

8 Този тип оперативна памет използват езиците, които най-често предлагат garbage collection и не позволяват използване указатели (C# позволява при ясно посочване в настройките).

9 Използват се и две библиотеки, AvalonDock и FluentRibbon – едната позволява изграждането на динамични (движещи се) панели, а другата е Ribbon потребителско меню

Свързани:

Тема на проекта iconОтчет тема на проекта
Чрез осъществяването на изследванията и другите дейности, включени в проекта, се преследват следните основни цели
Тема на проекта iconИсследовательская работа Тема
Идеей данного проекта является участие автора проекта в обработке собранного материала, его систематизации и распространения с помощью...
Тема на проекта iconОсновные этапы реализации специального проекта
С 1 по 14 октября необходимо предоставить на электронную почту окружным координаторам проекта: Резюме; Презентацию социального проекта...
Тема на проекта iconНа проекта
Тема на проекта
Тема на проекта iconТема 1 Жизнен цикъл на проекта или шестте фази на един проект
Планирането, разработването, оценяването, изпълнението, крайната оценка и одитът, както и окончателното закриване на проекта са задължителни...
Тема на проекта iconТема: строителство, строителен контрол
Нона Караджова. Искането за отстраняване на Караджова било заради спряната втора фаза на проекта за водния цикъл на Сливен. Нямам...
Тема на проекта iconЗаявка за участие като автор в проекта "Е-книга на учителя"
Описание на проекта. Цел, задачи, предмети, по които се реализира работата, форми на работа. Етапи на реализиране на проекта
Тема на проекта iconНаименование на проекта (напишете името на проекта си) Автор на проекта

Тема на проекта iconВ множество малки и големи градове в Югоизточна Европа все още има значителен брой архитектурни следи от двата тоталитарни режима на 20 век. Често днешните
Крайната цел на проекта е създаване на транснационален Културен маршрут на територията на страните партньори по проекта на тема „тоталитарна...
Тема на проекта iconТема 5 Апликационни форми за кандидатстване за проекти – грантови схеми и фондове за малки проекти
Онната форма, един от основните стандартни документи, които трябва да познавате и, разбира се, използвате удачно във фазите на управление...
Поставете бутон на вашия сайт:
Документация


Базата данни е защитена от авторски права ©bgconv.com 2012
прилага по отношение на администрацията
Документация
Дом