Разработка программного обеспечения для разрешения семантической неоднозначности текстов
Разработка программного обеспечения для преобразования текста в векторное пространство с разрешением его семантической неоднозначности для русского языка. Адаптация метода AdaGram для работы на языке Python. Тестирование алгоритмов анализа текста.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 04.12.2019 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
6
Размещено на http://www.allbest.ru/
Аннотация
текст семантический программный алгоритм
Для развития и распространения использования машинного обучения для анализа текстовой информации требуются новые методы генерации очень точных цифровых представлений слов. В настоящее время наиболее популярные методы построения таких представлений не учитывают разнообразие значений одного и того же слова в зависимости от контекста, что приводит к ухудшению качества моделей, созданных на их основе.
Целью настоящей работы является разработка программного обеспечения, которое способно производить преобразование текста в векторное пространство с разрешением его семантической неоднозначности для русского языка. Для построения решения были изучены существующие практики создания цифрового представления текста, а также методы разрешения неоднозначностей в тексте, предложена адаптация метода AdaGram для работы на языке Python, а также протестирована на трех различных задачах. Результаты данной работы могут быть использованы для дальнейшего анализа методов разрешения семантической неоднозначности русского языка, а также для повышения точности работы алгоритмов анализа текста.
Выпускная квалификационная работа состоит из 49 страниц, содержит 4 рисунка, 4 таблицы, 5 листингов и 11 приложений.
Ключевые слова: машинное обучение; интеллектуальный анализ данных; автоматическая обработка текстов; разрешение семантической неоднозначности.
Введение
В настоящее время с распространением социальных сетей и онлайн издательств количество текстовой информации, которая появляется в интернете каждый день, возросло до неизмеримых объемов. Согласно последним исследованиям, к 2020 году для каждого человека на Земле каждую секунду будет создаваться 1,7 МБ данных [1]. Анализ даже небольшой части этой информации может позволить компаниям создавать и предлагать пользователю только необходимые ему продукты, сократить расходы на рекламу, излишнее производство, тем самым все дальше двигая тенденцию к рациональному потреблению и кастомизации товаров. Подобные в прогнозы мотивируют такие конгломераты как Amazon, Alphabet, Volkswagen и Samsung тратить более 15 млрд. долларов в год на исследования и разработки [2]. Благодаря большому количеству открытых данных и инструментов и фреймворков, предоставляемых этими компаниями, у независимых исследователей также расширились возможности для развития сферы компьютерной лингвистики с применением методов машинного обучения.
Разнообразие задач обработки естественных языков варьируется от морфологической разметки, определения тональности текста, тематического моделирования и машинного перевода до суммаризации, генерации и построения сложных диалоговых систем, таких как Alexa, Siri и Алиса. Уже в 2014 году чат-бот, разговаривающий как мальчик-подросток, впервые смог пройти письменную вариацию теста Тьюринга. Однако, даже самые развитые модели естественной обработки языка все еще не показывают желаемых результатов и не способны понимать язык в той же степени, что и человек, в особенности когда их обучение построено на небольших корпусах данных, содержащих новые, неисследованные или непопулярные слова.
Фундаментальной проблемой обработки естественных языков является перевод текстового представления языка в цифровое пространство. Существующие подходы позволяют эффективно решить задачу создания векторных представлений слов и формирования соотносящихся семантических связей между ними, однако неоднозначность, которая может быть представлена полисемией, омонимией и др., обычно не разрешается с помощью этих методов. Именно в момент такого преобразования теряется огромное количество потенциально важной для разрабатываемых алгоритмов информации, в особенности при наличии слов, значение которых можно понять лишь опираясь на контекст, в котором оно употребляется. Например, слово «банка» может иметь как значение сосуда для хранения чего-либо, так и являться финансовым учреждением в зависимости от связи с окружающими его словами. Однако, несмотря на такое сильное различие между контекстами, в которых употребляются значения данного слова, большинство алгоритмов преобразования текста в векторное пространство не будут этого учитывать. Можно возразить, что существующие подходы преобразования текста с помощью нейронных сетей позволяют улавливать контекстные зависимости между словами и сразу же анализировать текст для его классификации или любой другой поставленной задачи, однако проверить реальное семантическое разрешение неоднозначностей для этих методов нельзя - нейронные сети относятся к классу моделей - черных ящиков и не являются интерпретируемыми. Более того, такой подход обязывает использовать нейронные сети, что в случае небольшого количества размеченных данных невозможно.
Исходя из приведенной проблематики, целью данной работы является разработка программного обеспечения, которое способно производить преобразование текста в векторное пространство с разрешением его семантической неоднозначности.
В рамках работы рассматриваются существующие способы преобразования текста в числовой вид для русского языка, а также методы, позволяющие решить проблему неоднозначности слов. Выбор русского языка обусловлен недостатком изученности проблемы неоднозначности при большей сложности и количестве случаев омонимии по сравнению с английским языков. Найденное решение позволит выполнять более точные прогнозы при решении многих задач анализа текстов с использованием небольших выборок, тем самым повышая стоимость разрабатываемого решения.
Глава 1 содержит обзор существующих подходов (с учетом ограничений исследования, приведенных в предыдущем абзаце) для решения этой и связанных задач.
В Главе 2 приводится реализация инструмента разрешения неоднозначностей с помощью метода AdaGram.
В рамках Главы 3 описываются условия экспериментов с полученным программным обеспечением и приводятся результаты его работы на примере вычисления ближайших по смыслу слов, при решении соревнования RUSSE-2018, а также сравнение результатов использования полученных векторных представлений с другими популярными методами на задаче определения тональности текста.
1.Анализ существующих решений
1.1 Задача числового представления слов
Для обработки и анализа с помощью алгоритмов машинного обучения текстовые данные должны быть преобразованы в числовой вид. Наиболее простой идеей такого преобразования является кодирование слов в словаре цифрами по порядку, что исключает факт того, что новый словарь будет занимать много места в памяти. Однако, существенный недостаток такой идеи заключается необходимости каждый раз изменять нумерацию в словаре при добавлении нового слова, а также отсутствии какой либо смысловой связи между ними. Для того, чтобы такая связь все же была отображена, было предложено использовать эмбеддинги - векторы, обозначающие значение слова в векторном пространстве всех слов.
Таким образом, задача представления слова сводится к тому, что для каждого слова w из словаря W необходимо найти вектор .
К таким представлениям необходимо добавить определенные требования и ограничения:
? Размерность d не должна быть очень большой в силу вычислительных возможностей;
? Похожие слова должны иметь векторы, близкие между собой;
? Арифметические операций над такими векторами должны иметь смысл.
1.1.1 Технология Word2vec
Одним из наиболее популярных способов преобразования слов в эмбеддинги стал предложенный Томасом Миколовым в 2013 году алгоритм Skip-Gram [3], который позже вместе с алгоритмом CBOW (continious bag of words), предложенный в той же работе, вошел в состав инструмента word2vec. Особенность Skip-Gram заключается в том, что на выходе обученная алгоритмом модель представляет такие векторы слов, которые в отлично отражают отношения слов в текстах.
На Рис. 1 изображен один из наиболее ярких примеров усвоения смысла и семантики слов данной моделью.
Рис. 1. Примеры арифметически верных отношений между словами
Дистрибутивная гипотеза, которая легла в основу для создания word2vec, говорит о том, что слова, встречающиеся в схожих контекстах, имеют схожие смыслы. Опираясь на это, можно сказать, что чем ближе друг к другу контексты, в которых встречаются два слова, тем ближе должны быть соответствующие векторы этих слов. Общий интуитивный подход Skip-Gram модели может быть объяснен как предсказание появления слова в данном контексте. Таким образом, вероятность встретить слово в контексте слова равна:
(1)
Тогда для выборки текстов X = {}, где текстимеет длину, можно определить и максимизировать правдоподобие:
(2)
Где контекстом словаявляются слова в предложении на расстоянии не далее чем K.
В таком виде Skip-Gram был представлен в 2013 году, однако, вычисление функции soft-max (1) имеет линейную сложность, что является неэффективным, поэтому при реализации модели soft-max был заменен на иерархический soft-max[4]:
(3)
Таким образом, Skip-Gram сперва загружает корпус и вычисляет хеш-таблицу частотности слов, которая затем оптимизируется для ускорения вычислений, а затем предсказывает слово в контексте с помощью нейронной сети прямого распространения [5] и функцией активации иерархический soft-max (3). Модель Skip-Gram эффективно работает, улавливая отношения между словами,например, она позволяет проводить математические операции по вычитанию из слова «Король» слова «Мужчина» и получению «Королева». Однако данная модель не способна обойти одну из тех задач компьютерной лингвистики, решение которой приблизит алгоритмы к большему пониманию человеческой речи, а именно, задачу извлечения значений слова. Как можно заметить, векторное пространство создается вокруг слова с учетом его единого значения. Однако, как уже упоминалось ранее, в русском языке существует большое количество одинаковых по написанию слов, носящих разное значение. Например, слово «замок» употребляется как в качестве обозначения дворца, крепости, так и в качестве приспособления для запирания чего-либо ключом. При использовании модели Skip-Gram для преобразования такого слова, в близкое к нему векторное пространство попадут контексты всех значений «замка», что может помешать при дальнейшем использовании такого эмбеддинга для решения задач обработки естественных языков.
1.1.2 GloVe репрезентация
Следующей часто используемой моделью для создания эмбеддингов является GloVe - Global Vectors representation, предложенная в 2014 году Джеффри Пеннингтоном, Ричардом Сошером и Кристофером Д. Мэннингом из лаборатории компьютерной лингвистики университета Стэнфорд [6].
Как и Skip-Gram, данная модель предсказывает появление вектора определенного слова в данном контексте. Однако, GloVe рассчитывается на основе частоты появления слов. При построении модели сперва создается матрица слов и частоты появления его в определенном контексте. Затем размерность этой матрицы снижается до векторных представлений слов.
Одним из плюсов такого подхода является возможность проводить параллельные вычисления, что способно значительно ускорить процесс обучения. Согласно работе «GloVe: Global Vectors for Word Representation» [6], качество модели GloVe растет значительно сильнее с увеличением размера обучающей выборки, что можно наблюдать в Таблице 1.
Несмотря на свою эффективность в сравнении с Skip-Gram, для обучения качественной GloVe модели необходима очень большая выборка. К тому же, GloVe не способен передавать различие смыслов одного и того же слова, что снижает качество работы моделей, основанных на использовании таких эмбеддингов.
Таблица 1. Сравнение результатов работы моделей Skip-Gram и GloVe по метрике accuracy.
Модель |
Размерность |
Количество слов в выборке |
Качество |
|
Skip-Gram |
300 |
1 млрд |
61 |
|
GloVe |
300 |
1.6 млрд |
70.3 |
|
Skip-Gram |
300 |
6 млрд |
69.1 |
|
GloVe |
300 |
6 млрд |
71.1 |
|
Skip-Gram |
1000 |
6 млрд |
65.6 |
|
GloVe |
300 |
42 млрд |
75 |
1.1.3 Adaptive Skip-Gram
Как уже было сказано, модель Skip-Gram хорошо справляется с пониманием семантических отношений между словами, однако она не учитывает неоднозначность значений слова и создает только одно векторное представление для каждого слова. В 2015 году Сергей Бартунов представил модифицированную версию Skip-Gram - AdaGram, которая представляет из себя непараметрическое Байесовское расширение Skip-Gram [7]. Главное отличие этой модели заключается в том, что она способна предоставлять необходимое количество представлений слов с разрешением их семантической неоднозначности.
Предположим, что каждое слово можно представить в виде K значений этого слова и обозначим индекс значения переменной z. Таким образом, формула (3) принимает вид:
Стоит заметить, что в данном случае рассматривается значение слова в контексте при том, что многообразие значений слов самого контекста опускается и считается достаточным для того, чтобы уловить различия в употреблении этих значений.
Модель AdaGram является наиболее перспективной с точки зрения решения задачи создания семантически однозначных векторных представлений слов. Однако, ее реализация не является популярной при решении практических задач по причине того, что она написана на языке программирования Julia. Несмотря на отличные преимущества в оптимизации и распределении вычислений Julia занимает всего лишь 6-е место по популярности среди языков программирования для машинного обучения, согласно отчету компании GitHub [8], в то время как Python лидирует по своему использованию.
1.2. Задача разрешения семантической неоднозначности
Данная задача является открытой для решения и в настоящее время не существует ни одного способа, который с приемлемым качеством способен с ней справиться. Для мотивации исследователей и сравнения результатов созданных моделей в 2018 году был создан размеченный набор данных для русского языка для проведения соревнования RUSSE-2018 [9]. Во время создания этого датасета исследователи опирались на практику проведения известных соревнований SemEval2007 и SemEval2010 [10] [11], которые представили наборы данных по оценке разрешения семантической неоднозначности для английского языка.
Структурная составляющая RUSSE-2018 аналогична задачам с SemEval2007 и SemEval2010. Участникам было предложено определить индекс значения слова, опираясь на «лексический пример» - употребление данного слова в каком либо контексте. Номер или любое другое обозначение индекса значения не влияли на результат, единственным требованием было только то, чтобы примеры, имеющие одно и то же значение имели один и тот же индекс.
За измерение качества моделей отвечала метрика ARI - Adjusted Rand Index, описаная в работе «Comparing Partitions» [12]. Сперва для расчета ARI строится матрица сопряженности ожидаемых и полученных индексов:
X\Y |
... |
Сумма |
|||||
... |
|||||||
... |
|||||||
... |
|||||||
Сумма |
... |
Где Y = {, , … , } - ожидаемые верные индексы, а X = {, , … , } - предсказанные индексы. Затем ARI рассчитывается как :
Собранный для соревнования набор данных состоял из трех отдельных вручную размеченных наборов:
1. Wiki-wiki - в тренировочной выборке содержал 4 слова по 2 смысла на каждое и 439 контекстов употребления этих слов, а в тестовой выборке содержал 5 слов, по 2.4 значения на каждое с 539 контекстами. Был собран на основе русскоязычных статей из Википедии;
2. Bts-rnc - набор, основанный на значениях из Большого Толкового Словаря русского языка [13]. Контексты слов были извлечены и Национального Корпуса Русского Языка [14]. Итого он содержал в тренировочной выборке 30 слов, примерно 3.2 значений на каждое слово и 3491 контекст, а в тестовой выборке 51 слово, по 3 значения и 6556 контекстов;
3. Active-dict - набор значений и контекстов из Активного словаря русского языка [15][16]. Количество слов в тренировочной выборке составило 85, на каждое из которых приходилось 3.7 значений, общая сумма контекстов была равна 2073, в тестовой выборке находилось 168 слов, по 3.3 значения и 3729 контекстов.
Во время проведения соревнования были успешные попытки создания моделей, которые показывали хорошее качество, однако они были настроены именно под набор данных и их результат нельзя использовать отдельно в качестве векторных представлений: Латентное распределение Дирихле (Latent Dirichlet allocation LDA), традиционно используемое для тематического моделирования, и контекстная кластеризация средневзвешанных векторов word2vec. Согласно экспериментам работы «Автоматическое извлечение значений слов для русского языка: детальное исследование и сравнение со словарями» [17], данные методы дают следующие усредненные результаты на наборе RUSSE-2018: LDA - 0.07, контекстная кластеризация - 0.24.
Выводы
Существующие подходы либо позволяют решить задачу числового представления слов без каких-либо попыток к разрешению семантической неоднозначности, либо отдельно решают последнюю без возможности какого-либо дальнейшего использования для улучшения качества моделей анализа текста. Единственным методом, который способен в результате перевести текст в векторное пространство и вычислить разные представления для разных значений одного слова является Adagram.
Однако, факт реализации Adagram на столь непопулярном для анализа текстовой информации языке Julia, сильно усложняет его использование в быстром процессе разработки. Реализация возможности работы с векторными моделями с разрешением неоднозначности может значительно улучшить качество алгоритмов анализа текста, поэтому в следующей главе будет построена адаптация использования Adagram на языке Python и описано его использование для разнообразных задач обработки и анализа текста.
2. Адаптация AdaGram
2.1 Сбор данных
Для проведения экспериментов и обучения моделей необходимо было собрать и обработать большое количество текстов различной тематики. Одним из наиболее крупных открытых наборов данных является Taiga Corpus [18]. Описание характеристик собранных текстов содержится в Таблице 2.
Таблица 2.Описание использованных данных.
Ресурс |
Количество текстов |
Количество слов |
|
Проза ру |
958 960 |
3 452 258 151 |
|
Стихи ру |
1 192 590 |
1 228 368 034 |
|
Журнальный зал |
39 890 |
192 401 426 |
|
Социальные сети:Вконтакте, LiveJournal, Twitter, Facebook |
- |
61 841 644 |
|
Фонтанка ру |
342 683 |
60 870 661 |
|
Субтитры |
7 921 |
28 467 037 |
|
Лента ру |
36 446 |
7 713 381 |
|
Интерфакс |
46 429 |
6 053 240 |
|
Комсомольская Правда |
45 503 |
4 920 900 |
|
N+1 |
7 696 |
3 778 306 |
|
Арзамас |
311 |
738 084 |
|
Всего |
5 047 410 864 |
Таким образом, выборка текстов содержала 72.2% литературных текстов, 24.3% поэтических, 1.5% новостных, 1.2% комментариев из социальных сетей, а также 0.6% субтитров сериалов и 0.1% текстов другой тематики. Несмотря на внушительный объем собранного датасета, он накладывает определенные ограничения на созданную модель: новости, комментарии и диалоги представлены в малом количестве, а именно они являются потенциально богатыми на современную и сленговую речь форматами.
Собранные данные были разархивированы, и обработаны. Основная часть отображена в Листинге 1:
Листинг 1
mystem = Mystem()
month = os.listdir(sys.argv[1] + sys.argv[2] + sys.argv[3])
for m in month:
with open(sys.argv[3] + '.txt', 'a+') as log:
log.write(m + '\n')
files = os.listdir(sys.argv[1] + sys.argv[2] + sys.argv[3] + '/' + m)
for filename in files:
if filename[-4:] == '.txt':
with open('../data/' + 'tokenized' + '_' + sys.argv[2] + '_' + sys.argv[3] + '.txt', 'a+') as fw:
with open(sys.argv[1] + sys.argv[2] + sys.argv[3] + '/' + m + '/' + filename) as f:
text = f.read()
text = text.split('/n')
for i in range(len(text)):
text[i] = [w.lower() for w in mystem.lemmatize(text[i]) if re.match('[\w\-]+$', w)]
fw.write(' '.join(text[i]) + '\n')
Первый аргумент принимает путь к разорхивированным файлам, второй название папки, которую необходимо просмотреть, третий аргумент принимает год, за который были собраны файлы. Для некоторых папок, в которых отсутствовал год сбора был использован упрощенный скрипт из Приложения 1. Обработка файлов производилась построчно, каждая строка была лемматизированна с помощью python-обертки инструмента MyStem [19]. Его выбор был обусловлен быстротой действия алгоритма и его хорошим качеством: обучение данного алгоритма производилось на большой выборке текстов компании Яндекс, кроме того MyStem обладает способностью лемматизации незнакомых слов, что отлично подходит для собранной выборки, содержащей большое количество современных и сленговых выражений. Лемматизация производилась для того, чтобы уменьшить количество уникальных слов и увеличить частоту их появления - это обеспечивает более качественное обучение в дальнейшем. После лемматизации строк, они были очищены от пунктуации и прочих знаков, не входящих в состав слов, записаны в файлы и объединены в один. Общий объем полученного файла составил 56.5 ГБ.
2.2 Обучение модели AdaGram
Для дальнейшего использования модели AdaGram необходимо было обучить ее на собранных данных. Реализация данной модели была предоставлена разработчиками метода, однако, как уже упоминалось, языком реализации был выбран Julia, в то время как наиболее популярным языком для машинного обучения является Python. В связи с этим было принято решение оставить этап обучения на готовой реализации, а затем перевести ее в формат, пригодный для работы на языке Python. Причиной, по которой AdaGram не был перенесен на язык Python полностью является то, что он сильно уступает Julia в возможностях оптимизации и ускорения процессов обучения, а размер набора данных даже на оригинальной реализации предполагал очень долгое обучение.
Для тренировки модели на Julia необходимо было установить язык, саму библиотеку и ее зависимости. Кроме того, предполагалось, что в процессе обучения понадобится большое количество RAM и процессоров. Для облегчения разработки и развертывания всей системы был использован удаленный сервер Google Cloud c 300Гб на жестком диске, 16-ю процессорами и 32 Гб оперативной памяти, во время вычисления некоторых отдельных процессов RAM была расширена до 50 Гб.
По собранному набору данных был создан отсортированный по алфавиту словарь частотности слов (Листинг 2).
Листинг 2
#!/bin/bash
tr ' ' '\n' < $1 | sort -S 10G | uniq -c | awk '{print $2" "$1}' > $2
Затем были произведены эксперименты по обучению с подбором гиперпараметров. Гиперпараметром будем считать параметры, значения которых задаются до начала обучения модели и не изменяются в процессе обучения. По причине долгой тренировки каждой модели, перебор гиперпараметров производился вручную. AdaGram позволяет использовать следующие параметры при обучении:
1. Window - контекстное окно. Данный параметр отвечает за количество слов, которые ограничивают контекст слова в тексте до и после него. Наиболее оптимальное с точки зрения качества разрешения семантической неоднозначности согласно работе «Breaking Sticks and Ambiguities with Adaptive Skip-gram» [7] считается значение 5;
2. Workers - количество запускаемых параллельных процессов. Для ускорения вычислений были заняты все 16 процессоров;
3. Min-freq - минимальная частота встречи слова в словаре. Слова, которые встречаются реже игнорируются моделью во избежание зашумления векторного пространства. Подходящие значения от разработчиков AdaGram от 5 до 50. Были опробованы 10, 25 и 50 и финальное выбрано как 50;
4. Remove-top-k - порог для удаления наиболее частотных слов. Данный порог не был установлен, т.к. при решении некоторых задач часто используемые слова могут играть большую роль, например, в задаче определения тематики текста, где служебные части речи употребляются в зависимости от стиля текста и являются его важной составляющей;
5. Dim - размерность выходного вектора. Размерность для удобства использования векторов в дальнейших преобразованиях была выбрана 300;
6. Alpha - параметр, отвечающий за внутреннее вычисление процесса Дирихле. Оптимальное значение данного параметра - 0.2. Кроме этого было проверено качество с параметром 0.1, которое обеспечивало наилучшее качество согласно работе «Breaking Sticks and Ambiguities with Adaptive Skip-gram» [7], однако измерения проводились на текстах на английском языке, что могло повлиять на различие;
7. Context cut - булевый параметр, позволяющий рандомно уменьшать размер контекстного окна, что ускоряет процесс обучения. Он был активирован для уменьшения времени обучения модели;
8. Epochs - количество эпох для обучения. С возрастанием количества эпох качество модели улучшается, однако время обучения возрастает пропорционально количеству эпох и в случае большого набора данных можно было ограничиться одной эпохой.
Результаты экспериментов по подбору параметров отображены в Таблице 3.
Таблица 3Сравнение качества моделей в зависимости от гиперпараметров
Alpha |
Минимальная частота |
Результат |
|
0.1 |
10 |
0.2014 |
|
0.1 |
25 |
0.2155 |
|
0.1 |
50 |
0.2489 |
|
0.2 |
10 |
0.2376 |
|
0.2 |
25 |
0.2615 |
|
0.2 |
50 |
0.2710 |
В качестве метрики использовалось среднее качество модели на тренировочной выборке в соревновании RUSSE-2018. С финальными параметрами: window 5, workers 16, min-freq 50, dim 100, alpha 0.2, context-cut 1, epochs 1 модель была обучена за 34 часа 10 минут.
2.3 Адаптация модели
Для того чтобы в дальнейшем можно было использовать обученную Julia модель с помощью языка Python, необходимо было произвести ее конвертацию в формат json, а затем распарсить joblib - легковесный инструмент для создания пайплайнов.
Конвертация моделей происходила с помощью скрипта на языке Julia, основная часть которого отображена в Листинге 3. Сперва обученная модель и созданный во время обучения словарь загружались с помощью библиотеки AdaGram, а затем каждая из них сохранялась в json формат с помощью стандартных json расширений.
Листинг 3
import JSON
import AdaGram
println("loading model...")
vm, dict = AdaGram.load_model(args["model"])
println("done")
println("saving dict.id2word...")
JSON.print(open(joinpath(args["out"], args["add_name"] * "id2word.json"), "w"), dict.id2word)
println("done")
println("saving vm...")
JSON.print(open(joinpath(args["out"], args["add_name"] * "vm.json"), "w"), vm)
println("done")
Затем данные файлы использовались для работы с моделью на языке Python. Для дальнейшего рассмотрения процесса конвертации, необходимо проанализировать принцип работы созданного скрипта, реализующего модель хранения и векторизации AdaGram на Python (Приложение 2).
Класс Dictionary реализует словарь для хранения частотности слов, полученных при обучении модели. При инициализации данного класса, он принимает слова и их частотность и создает атрибуты частоты (список всех частот без ассоциирования с каким либо словом), списка всех слов и словаря слово-индекс слова.
Класс VectorModel обеспечивает хранение всей обученной векторной модели. При его инициализации он создает такие атрибуты как alpha, dictionary типа Dictionary, описанного ранее, frequences c частотами из переданного Dictionary, dim - размерность векторов слов, а затем с помощью вспомогательных функций build_huffman_tree и convert_huffman_tree, которые реализуют дерево Хаффмана [20] для хранения полученного словаря и снижения вычислительной сложности дальнейших взаимодействий, строит векторное пространство в заданной размерности.
Таким образом, при конвертации модели из формата json с помощью скрипта, изображенного в Приложении 3, собранные json векторные и словарные модели читаются и инициализируют объекты вышеперечисленных классов, которые затем сохраняются в формате joblib.
Однако, одной конвертации модели недостаточно. Необходимо было также предоставить функции для взаимодействия с ней для проведения дальнейших вычислений с помощью векторных представлений. Для выполнения этой задачи в классе VectorModels были реализованы функции sense_neighbors, disambiguate и sense_vector.
Первая из них возвращает ближайшие по смыслу слова к введенному слову. На вход эта функция принимает само слово, индекс его значения, максимальное количество соседей, которое нужно вывести, минимальную близость этих соседей и минимальное количество слов которые необходимо вернуть. Обязательными для работы данной функции являются только первые два аргумента. На выходе она возвращает список из тройных кортежей, где на первом месте стоит слово, затем индекс его значения и рассчитанная мера близости. Вычисления матрицы расстояний между всеми словами и введенным происходят следующим образом: матрица векторных значений слов умножается на нормированный вектор введенного слова и его значения и затем также нормируется. Отсюда следует что, sense_neighbours возвращает наиболее близкие по смыслу к введенному значению слова слова.
Вторая реализованная в классе функция для взаимодействия с созданными векторами disambiguate - выполняет разрешение неоднозначности, то есть возвращает вероятность с которой каждый смысл введенного слова мог бы встретиться в контексте данного предложения. Расчет вероятности происходит согласно разделу 3.2 работы Breaking Sticks and Ambiguities with Adaptive Skip-Gram[7].
И последней реализованной функцией для работы с векторной моделью являлась функция sense_vector, которая возвращает вектор значения слова по индексу этого значения.
Таким образом, пользователь получает возможность загрузить обученную модель, предсказать вероятность появления слова в каком либо контексте, просмотреть ближайшие по смыслу значения слова и использовать векторы значений слова для дальнейших задач.
Выводы
В рамках главы представлена адаптация использования AdaGram на языке Python, а именно:
1. Собраны и обработаны в лематизированную форму данные с помощью открытого набора Taiga размером в 5 млрд. слов;
2. С помощью существующей реализации на языке Julia обучено несколько моделей для подбора гиперпараметров. Выбрана финальная, наиболее качественная с точки зрения метрики на соревновании RUSSE-2018 модель;
Создана реализация векторной модели на языке Python, предоставляющая возможность взаимодействия с конвертированной обученной на Julia моделью.
3. Эксперименты
В данном разделе продемонстрированы результаты работы алгоритма, оцененные на нескольких наборах тестов. Сперва, было проведено выборочное тестирование на близость слов с похожим смыслом в созданном векторном пространстве. Затем, качество работы модели было проверено на соревновании по задаче извлечения значений слов на русском языке RUSSE-2018. И наконец, было протестировано влияние использования векторов AdaGram на результат других моделей на различных наборах данных.
3.1 Тестирование ближайших соседей
Наиболее простым и быстрым способом оценки корректной работы модели является выборочное тестирование слов на определение ближайших по смыслу. Согласно концепции алгоритма Skip-Gram, векторы, расстояние между которыми минимально, являются семантически близкими друг к другу. Отсюда следует, что на хорошо обученной модели выбирая ближайших соседей слова, пользователь должен сразу заметить их семантическое сходство. А так как в случае AdaGram слово имеет сразу несколько значений, каждое значение должно иметь свое уникальное облако ближайших к нему слов. Рассмотрим примеры работы модели со словом «яблоко». Для этого были сгенерированы изображения на Рис. 2, Рис. 3, Рис 4.
Рис. 2 Слово «яблоко» в значении плода яблони.
Рис. 3. Слово «яблоко» в значении шарообразного тела глаза.
Рис. 4. Слово «яблоко» в значении российской демократической партии.
Как можно заметить на Рис. 2, Рис. 3 и Рис. 4, модель выделила 5 значений слова «яблоко», три из которых можно сгруппировать в один с точки зрения русского языка. Таким образом, на Рис. 2 наблюдается большое количество названий фруктов и ягод, а также такие характеристики яблока как «сочный», «спелый», «наливной», «сушеный». На Рис. 3 отображены такие слова, которые являются частями глазного яблока, например «склера», «роговица», «белок», «радужка» либо в целом могут быть ассоциированы с глазом. А на Рис. 4 можно наблюдать слова, имеющие отношение к российской демократической партии, например части названия других партий, или фамилию кандидата в президенты от данной партии. В Приложении 4 отображены другие примеры работы модели по вычислению ближайших соседей. Генерация изображений производилась с помощью кода из Листинга 4.
Листинг 4
vm = adascript.VectorModel.load('trained_models/' + modelname + '.joblib')
for i in range(5):
word = 'яблоко'
senses = vm.sense_neighbors(word, i, 15)
t = []
for s in senses:
t.append(s[0])
arr = WordCloud(max_font_size=70, background_color="white").generate(' '.join(t))
3.2 Результаты RUSSE-2018
Несмотря на отличное визуальное представление, которое можно наблюдать при оценке модели методом ближайших соседей, выборочных результатов недостаточно для понимания того, насколько хорошо модель справляется с поставленной задачей разрешения неоднозначности.
Поэтому были проведены эксперименты по оценке работы модели на данных соревнования RUSSE 2018: A Shared Task on Word Sense Induction for the Russian Language [11]. Как было замечено ранее, в соревновании предлагалось протестировать модель на трех наборах данных. Код программы, выполняющей оценку содержится в Приложении 5. Предоставленные данные были лемматизированы с помощью MyStem лемматизатора, а затем с помощью реализованной функции disambiguate из них были извлечены необходимые индексы. Качество модели оценивалось с помощью метрики Adjusted Rand Index.
Сравнение качества обученной модели на тренировочной и тестовой выборках приведено в Таблице 4.
Таблица 4 Сравнение качества моделей на выборках
Wiki-wiki |
Bts-rnc |
Active-dict |
Среднее |
||
Тренировочная |
0.3811 |
0.2219 |
0.2101 |
0.2710 |
|
Тестовая |
0.3480 |
0.2267 |
0.2226 |
0.2657 |
Как можно заметить, разница в результатах работы модели на тестовой и тренировочной выборке составляет менее 10%, что говорит о стабильности ее работы.
Однако, наиболее интересным является сравнение результатов обученной модели с другими специально подготовленными для данного соревнования. В Приложении 6 представлено сравнение результатов модели на тестовой выборке с опубликованными результатами соревнования RUSSE-2018 по набору wiki-wiki, в Приложении 7 отражены результаты сравнения по набору bts-rnc, а в Приложении 8 - active-dict [11]. Как можно заметить, AdaGram уступает большому количеству моделей на наборе wiki-wiki, что может быть объяснено наличием большего количества найденных значений слова, как было показано на Рис. 2. Однако, модель показывает хорошие средние результаты в двух других случаях, который может быть улучшен с помощью более тщательного подбора параметров под эту задачу и увеличения выборки.
3.3 Сравнение с эмбеддингами SkipGram
Наиболее важными с точки зрения прикладного использования созданных векторов являются эксперименты с их использованием в задачах анализа текстовой информации и сравнение с одним из самых популярных методов создания векторов Skip-Gram.
Для проведения данного сравнения была выбрана задача анализа тональности текстов на наборе данных коротких текстов социальной сети Twitter [21]. Для решения данной задачи целесообразно было оставить только тексты позитивных - 114911 запись и негативных твитов - 111923 записи, а также их класс.
3.3.1 Предобработка данных
Позитивные и негативные записи были объединены в одну таблицу размером в 226834 записи и приведены к нижнему регистру. Далее был произведен ряд замен, код которого отображен в Приложении 9:
1. Ссылки были преобразованы в строку «url»;
2. Упоминания пользователя, начинающиеся символом «@» были заменены на строку «упоминание пользователя»;
3. Слова в категории хештегов были замещены на такие же слова без хештега;
4. Знаки препинания были удалены;
5. Идеографические знаки (эмодзи) были заменены на слова «негативная эмоция» или «позитивная эмоция» в зависимости от их значения;
6. Так как работа производилась с текстами социальных сетей, повторение одной и той же буквы подряд больше двух раз в слове было заменено на 2 буквы подряд. Например, «класссссный» заменялось на «классный».
Затем все слова были лемматизированны с помощью MyStem лемматизатора.
3.3.2 Векторизация текста с помощью AdaGram
Для того, чтобы использовать какой-либо алгоритм машинного обучения, предобработанные тексты необходимо было перевести в формат векторов. На Листинге 5 отображена функция, выполняющая данное преобразование:
Листинг 5
def vectorize_with_adagram(model, sentence, stopword_set):
vector = []
for word in sentence:
if word not in stopword_set:
try:
vector.append(model.sense_vector(word, model.disambiguate(word, sentence).argmax()))
except:
pass
return np.mean(vector, axis=0)
df['vectorized'] = df['stemmed'].apply(lambda x: vectorize_with_adagram(vm, x.split(), russian_stopwords))
Данная функция проходится получает на вход загруженную модель adagram для использования, список токенизированных слов текста и список стоп-слов, которые необходимо исключить из данного предложения.
В данном примере в качестве стоп-слов использовались слова из набора библиотеки для обработки языка NLTK. В этот набор входят местоимения, предлоги и другие служебные части речи. Использование такой фильтрации обосновано тем, что данные слова не имеют никакого эмоционального окраса, то есть могут использоваться как в положительных так и в отрицательных текстах, тем самым их наличие в анализируемых данных будет лишь зашумлять созданные векторы, ухудшая качество классификации.
После того, как в цикле функция отфильтрует стоп слова, они отправятся в модель для разрешения неоднозначности и вычисления индекса значения этого слова. Полученный индекс и само слово будут затем переданы в функцию sense_vector модели, которая вернет вектор из 300 чисел и присоединит к вектору всего предложения. В случае, если модели AdaGram какое-то из полученных слов было не известно, его вектор просто будет опущен. В конце, функция вернет усредненных вектор всего предложения такой же размерности, как и вектор каждого слова.
Стоит заметить, что такой способ получения векторов в случае полной фильтрации стоп-слов или фильтрации неизвестных обученной модели слов будет возвращать пустые векторы предложения. Данные пустые записи были опущены, поэтому после всех преобразований в выборке осталось 225962 записи, что на 872 меньше, чем было изначально, однако не является критичными для качества алгоритма классификации потерями.
3.3.2 Векторизация текста с помощью Word2Vec
Прежде чем производить векторизацию текста с помощью Word2Vec, необходимо было обучить или загрузить уже обученную модель. Для сохранения одинаковых условий и тестирования пределов возможностей AdaGram в сравнении с Word2Vec было принято решение использовать оба способа.
Обучение модели производилось на тех же данных, что и обучение AdaGram: очищенных от пунктуации и лематтизированных. Листинг обучения представлен в Приложении 10. Для соблюдения равных условий были установлены следующие гиперпараметры: window - 5, workers - 16, min_count (аналогична min_freq в AdaGram) - 50, size (аналогична dim) - 300, alpha - 0.2, sg - 1, hs - 1. Последние два параметра отвечают за использование алгоритма Skip-Gram вместо SBOW по умолчанию и за использование иерархической softmax функции, которая также применяется в AdaGram. Процесс обучения занял 10 часов 3 минуты. Полученная модель была загружена и векторизирована аналогично с Листингом 5, однако в данном случае строка 6 была заменена на:
vector.append(model[word])
Обученная модель была подобрана в проекте RusVectores [22] согласно похожести исходных данных: она была обучена на таком же наборе данных с помощью Skip-Gram с размерностью 300 и контекстным окном 5. Однако, для лемматизации текстов был использован инструмент UdPipe [23] и к каждому слову в словаре был добавлен тэг его части речи. Поэтому для векторизации необходимо было сперва добавить к словам их лемму, что отражено в Приложении 11.
3.3.3 Обучение и сравнение классификаторов
После того, как были получены все векторы предложений, выборка была случайно разделена на тестовую и тренировочную в отношении 2 к 8. Затем была обучена простая модель логистической регрессии (нейронная сеть многослойного перцептрона), которая была предоставлена библиотекой sklearn.
Для оценки результатов моделей использовались следующие метрики:
1. Accuracy - доля правильных ответов;
2. F1 мера - гармоническое среднее между точностью и полнотой модели, где точность - это доля записей действительно принадлежащих данному классу относительно всех записей которые система отнесла к этому классу, а полнота - это доля найденных классификатором записей принадлежащих классу относительно всех записей этого класса в тестовой выборке.
3. ROC-AUC - площадь под ROC-кривой, характеризующей качество классификатора. Значение данной метрики менее или равное 0.5 говорит о случайности предсказаний классификатора.
На Рис. 5 изображены результаты классификации для всех трех моделей.
Рис. 5 Результаты классификации.
Как можно заметить, результаты классификации с векторами AdaGram выше чем с самостоятельно обученными векторами Skip-Gram примерно на 14%. Однако, они практически совпадают с результатами классификации с векторами RusVectores. Это можно объяснить разницей в предобработке полученных данных и более тщательном подборе гиперпараметров. Отсюда следует, что качество векторизации с помощью AdaGram также можно улучшить созданием более подходящих для обучения условий. Однако уже по данным результатам можно сказать, что полученные с помощью метода AdaGram векторы действительно повышают качество классификации в задаче анализа тональности текстов по сравнению с векторами, полученными с помощью Skip-Gram.
Выводы
В рамках главы продемонстрирована работа предложенной в разделе 2 реализации AdaGram на языке Python. Эксперименты проводились на задаче поиска ближайших соседей, соревновании по разрешению семантической неоднозначности RUSSE-2018 и задачи классификации тональности текста. Модель продемонстрировала хорошее качество в создании векторного пространства, где близкие по смыслу слова находятся на близком друг от друга расстоянии и впечатляющие результаты в задаче классификации при сравнении с векторами SkipGram. Задача разрешения семантической неоднозначности текстов RUSSE-2018 с помощью AdaGram решается со сравнительно хорошим качеством, однако она не бьет рекорды других, более приспособленных под эту задачу моделей.
Заключение
Основываясь на приведенной во Введении проблематике, заключающейся в отсутствии продвинутых средств анализа текстовой информации, целью данной работы было поставлено создание программного обеспечения, которое способно производить преобразование текста в векторное пространство с разрешением его семантической неоднозначности.
Был проведен обзор релевантных к цели работы решений как для создания векторных представлений слов, так и для решения задачи разрешения неоднозначностей, что позволило сформулировать направление работы в сторону решения обеих задач одновременно. Метод AdaGram был определен наиболее перспективным с точки зрения развития и поэтому, задача работы свелась к адаптации его использования для языка Python.
Таким образом, была реализована модель для работы в векторными представлениями AdaGram на языке Python, а также протестирована как в задаче разрешения семантической неоднозначности, так и в задаче использования полученных векторов для определения тональности текста. И несмотря на то, что модель не превосходит наилучшие решения в задачах RUSSE-2018, ее результаты уже позволяют повышать качество классификации по сравнению с моделью Skip-Gram.
Список использованных источников
1. Domo, Inc. «Data Never Sleeps 6.0». URL: https://www.domo.com/learn/data-never-sleeps-6 (дата обращения: 18.01.2019).
2. Statista «Ranking of the 20 companies with the highest spending on research and development in 2018 (in billion U.S. dollars)». URL: https://www.statista.com/statistics/265645/ranking-of-the-20-companies-with-the-highest-spending-on-research-and-development/ (дата обращения: 18.01.2019).
3. Mikolov T., Chen K., Corrado G., Dean J. Efficient estimation of word representations in vector space // Proc. of ICLR. 2013. URL: https://arxiv.org/pdf/1301.3781.pdf (дата обращения: 28.01.2019).
4. Mnih A., Hinton, G. A scalable hierarchical distributed language model // NIPS, 2008. P. 1081- 1088.
5. Schmidhuber J. Deep Learning in Neural Networks: An Overview // Neural Networks, 2015, P. 11-12. URL: https://arxiv.org/pdf/1404.7828.pdf (дата обращения: 02.02.2019).
6. Pennington J., Socher R, Manning C. GloVe: Global Vectors for Word Representation // Empirical Methods in Natural Language Processing (EMNLP), 2014. P. 1532-1543. URL: http://www.aclweb.org/anthology/D14-1162 (дата обращения: 02.02.2019).
7. Bartunov S., Kondrashkin D., Osokin A., Vetrov D. Breaking Sticks and Ambiguities with Adaptive Skip-gram // 19th International Conference on Artificial Intelligence and Statistics (AISTATS), 2016. V. 51. P. 130-138. URL: https://arxiv.org/pdf/1502.07257.pdf (дата обращения: 02.02.2019).
8. The GigHub Blog «The State of the Octoverse: machine learning», 2019. URL: https://github.blog/2019-01-24-the-state-of-the-octoverse-machine-learning (дата обращения: 05.02.2019).
9. Panchenko, A., Lopukhina, A., Ustalov, D., Lopukhin, K., Arefyev, N., Leontyev, A., Loukachevitch, N. RUSSE'2018: A Shared Task on Word Sense Induction for the Russian Language // Computational Linguistics and Intellectual Technologies: Papers from the Annual International Conference «Dialogue», 2018. P. 547-564. URL: https://arxiv.org/pdf/1803.05795.pdf (дата обращения: 15.02.2019).
10. Agirre, Eneko, Aitor S SemEval2007 Task 02: Evaluating Word Sense Induction and Discrimination Systems // The Fourth International Workshop on Semantic Evaluations, 2007. URL: https://www.aclweb.org/anthology/S07-1002 (дата обращения: 18.03.2019).
11. Manandhar S., Klapaftis I., Dligach D., Pradhan S. Semeval-2010 task 14: Word sense induction & disambiguation // Word Journal Of The International Linguistic Association, 2010. URL: https://www.cs.york.ac.uk/semeval2010_WSI/paper/semevaltask14.pdf (дата обращения: 18.03.2019).
12. Hubert, L., Arabie, P. Comparing Partitions // Journal of Classification, 1985 V. 2 p. 193 - 218. URL: https://doi.org/10.1007/BF01908075 (дата обращения: 25.03.2019).
13. Большой толковый словарь русского языка. URL: http://gramota.ru/slovari/info/bts/ (дата обращения: 01.04.2019).
14. Национальный корпус русского языка: 2006--2008. Новые результаты и перспективы / Под ред. Плунгян. В. А. -- СПб.: Нестор-История, 2009.
15. Активный словарь русского языка. Т.1 - 2 / Под ред. Апресян Ю.Д. -- М.: Языки славянских культур, 2014.
16. Активный словарь русского языка. Т. 3 / Под ред. Апресян Ю.Д. -- СПб.: Нестор-История, 2017.
17. Lopukhin K.A., Iomdin B.L., Lopukhina A.A. Word Sense Induction for Russian: Deep Study and Comparison with Dictionaries // Computational Linguistics and Intellectual Technologies: Proceedings of the International Conference «Dialogue 2017», 2017. URL: http://www.dialog-21.ru/media/3927/lopukhinkaetal.pdf (дата обращения: 03.04.2019).
18. Shavrina T., Shapovalova O. To the Methodology Of Corpus Construction For Machine Learning: «Taiga» Syntax Tree Corpus And Parser // CORPORA2017, 2017.
19. Segalovich I. A fast morphological algorithm with unknown word guessing induced by a dictionary for a web search engine // International Conference on Machine Learning; Models, Technologies and Applications. MLMTA'03, 2003. URL:http://cache-mskm910.cdn.yandex.net/download.yandex.ru/company/iseg-las-vegas.pdf (дата обращения: 03.04.2019).
20. Huffman D. A Method for the Construction of Minimum-Redundancy Codes // IRE, 1954. V. 40, I. 9 P. 1098 - 1101. URL: http://compression.ru/download/articles/huff/huffman_1952_minimum-redundancy-codes.pdf (дата обращения: 13.04.2019).
21. Ю.В. Рубцова. Метод построения и анализа корпуса коротких текстов для задачи классификации отзывов // Электронные библиотеки: перспективные методы и технологии, электронные коллекции: Труды XV Всероссийской научной конференции RCDL'2013, 2013. С. 269-275.
22. Kutuzov A., Kuzmenko E. WebVectors: A Toolkit for Building Web Interfaces for Vector Semantic Models // EACL 2017 Software Demonstrations, 2017. P. 99-103. URL: https://www.aclweb.org/anthology/E17-3025 (дата обращения: 15.04.2019)
23. Straka M., Strakovб J. Tokenizing, POS Tagging, Lemmatizing and Parsing UD 2.0 with UDPipe. // CoNLL 2017 Shared Task: Multilingual Parsing from Raw Text to Universal Dependencies, 2017. URL: http://ufal.mff.cuni.cz/~straka/papers/2017-conll_udpipe.pdf (дата обращения: 18.04.2019).
Приложение
Листинг скрипта обработки данных
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import os
import re
import sys
import numpy as np
import pandas as pd
from pymystem3 import Mystem
fname = 'tokenized'
path = '../data/texts/'
process = sys.argv[1]
lastfile = int(process) * 4000
mystem = Mystem()
if process != 40000:
files = os.listdir(path)[lastfile - 4000: lastfile]
else:
files = os.listdir(path)[lastfile - 4000:]
with open('../data/tokenized_magazines_' + str(process) + '.txt', 'a+') as fw:
for filename in files:
print(filename)
if filename[-4:] == '.txt':
with open(path + filename) as f:
text = f.read()
text = text.split('/n')
for i in range(len(text)):
text[i] = [w.lower() for w in mystem.lemmatize(text[i]) if re.match('[\w\-]+$', w)]
fw.write(' '.join(text[i]) + '\n')
Скрипт адаптации векторной модели
from __future__ import absolute_import, division, print_function
from six.moves import xrange as range
from collections import Counter
from numpy.linalg import norm
import numpy as np
import joblib
import codecs
import heapq
import six
class Dictionary(object):
def __init__(self, words_freqs, preserve_indices=False):
if not preserve_indices:
words_freqs = sorted(
words_freqs, key=lambda x: (x[1], x[0]), reverse=True)
self.frequencies = np.array([f for _, f in words_freqs], dtype=np.int64)
self.id2word = [w for w, _ in words_freqs]
self.word2id = {w: id_ for id_, w in enumerate(self.id2word)}
def __len__(self):
return len(self.id2word)
class VectorModel(object):
def __init__(self, dictionary, dim, prototypes, alpha):
self.alpha = alpha # type: float
...Подобные документы
Тестирование и отладка программного обеспечения: понятие, принципы, этапы, цели и задачи. Тестирование методом сандвича как компромисс между восходящим и нисходящим подходами. Сущность метода "белого и черного ящика", отладки программного обеспечения.
курсовая работа [36,9 K], добавлен 21.07.2012Порядок автоматизации расчетов себестоимости и длительности программного обеспечения производственного предприятия. Выбор языка программирования и системы управления базами данных. Разработка алгоритмов расчета себестоимости программного обеспечения.
дипломная работа [1,7 M], добавлен 13.06.2017Написание программного обеспечения на языке ассемблер для AVR-МК ATmega16, позволяющего осуществлять вычисление заданной функции. Введение входных данных с помощью определенного макроса с командой загрузки значений в регистры ldi. Исходный код программы.
контрольная работа [521,0 K], добавлен 23.11.2014Неразрешимость проблемы тестирования программного обеспечения. Виды и уровни тестирования. Стратегии восходящего и нисходящего тестирования. Методы "белого" и "черного" ящика. Автоматизированное и ручное тестирование. Разработка через тестирование.
курсовая работа [112,2 K], добавлен 22.03.2015Возможности среды программирования delphi при разработке приложения с визуальным интерфейсом. Разработка спецификации программного обеспечения и на ее основе кода программного продукта. Отладка программы "трассировкой", ее тестирование и оптимизация.
курсовая работа [501,4 K], добавлен 07.12.2016Анализ технического задания. Разработка интерфейса программы и ее алгоритмов. Кодирование и тестирование разработанного программного обеспечения, оценка его практической эффективности и функциональности. Формирование, содержание руководства пользователя.
курсовая работа [2,0 M], добавлен 31.07.2012Тестирование как составляющая часть процесса отладки программного обеспечения, его роль для обеспечения качества продукта. Обнаружение ошибок в программах, выявление причин их возникновения. Подходы к формулированию критериев полноты тестирования.
курсовая работа [1,6 M], добавлен 20.12.2012Характеристика объектно-ориентированного, процедурного, функционального программирования. Выбор языка программирования для создания программного обеспечения для управления справочником "Спортсмены". Алгоритм работы приложения, пользовательский интерфейс.
курсовая работа [1,6 M], добавлен 23.02.2016Общие сведения об исследуемой организации, направления ее хозяйственной деятельности, характеристика используемой вычислительной техники и программного обеспечения. Разработка пользовательского интерфейса, шаблонов, отладка и тестирование программы.
отчет по практике [159,3 K], добавлен 11.04.2016Оснащенность предприятия системным программным обеспечением, используемым для организации производственного процесса. Проектирование, внедрение и эксплуатация системного и прикладного программного обеспечения. Тестирование и отладка программного продукта.
отчет по практике [272,2 K], добавлен 29.12.2014Разработка программы, осуществляющей контроль за своевременностью обновления программного обеспечения с помощью рассылки электронных писем. Анализ требований к системе; выбор метода решения, алгоритма, выбор языка программирования, описание программы.
дипломная работа [5,6 M], добавлен 29.06.2011Реализация программного средства "Действия над матрицами". Разработка кода программного продукта на основе готовой спецификации на уровне модуля. Использование инструментальных средств на этапе отладки программного модуля. Выбор стратегии тестирования.
отчет по практике [296,1 K], добавлен 19.04.2015Современные инструменты разработки программного обеспечения для СУТП. Универсальные языки программирования и сравнение их со SCADA-системами. Разработка программного обеспечения с использованием многоканальных измерительных преобразователей Ш9327.
дипломная работа [2,3 M], добавлен 13.07.2011Анализ существующего программного обеспечения эмпирико-статистического сравнения текстов: сounter оf сharacters, horos, graph, advanced grapher. Empirical-statistical comparison of texts: функциональность, процедуры и функции тестирование и внедрение.
дипломная работа [4,4 M], добавлен 29.11.2013Возможности среды программирования delphi при разработке приложения с визуальным интерфейсом. Отладка программных модулей с использованием специализированных программных средств. Тестирование программного обеспечения. Оптимизация программного кода.
курсовая работа [974,0 K], добавлен 21.12.2016Анализ затрат и прибыли. Создание программного проекта для решения задачи о прибыли и убытках на языке программирования C#. Использование функций и переменных, компиляция программы. Алгоритмы и структуры данных. Тестирование программного обеспечения.
курсовая работа [1,2 M], добавлен 03.01.2015Классификация программ обработки текстовых документов. Общие принципы оформления издания. Правила набора текста. Системы распознавания текста (OCR). Комплекс программного обеспечения для настольных издательских систем. Примеры текстовых редакторов.
презентация [75,0 K], добавлен 13.08.2013Методы концептуального, логического и физического проектирования баз данных для автоматизации работы объекта. Обследование предметной области; тестирование и реализация информационного и программного обеспечения. Подготовка конструкторской документации.
курсовая работа [4,0 M], добавлен 16.05.2012Понятие и ключевое отличие распределенной разработки программного обеспечения, его достоинства и недостатки. Концептуальное решение и выбор типа разработки. Особенности программного обеспечения с открытым исходным кодом. Идея и развитие Open Source.
курсовая работа [97,7 K], добавлен 14.12.2012Подбор игрового движка и описание его основных характеристик. Разработка структуры, алгоритма и интерфейса программы. Проектирование иерархии классов. Выделение типового приема визуализации. Тестирование правильности работы программного обеспечения.
курсовая работа [3,1 M], добавлен 19.01.2017