Форум программистов, компьютерный форум, киберфорум
Konst2016
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Обучение рекурентной сети матрицей из gensim

Запись от Konst2016 размещена 31.07.2021 в 21:30
Показов 1813 Комментарии 0

Здравствуйте!Хочу рассказать о более-менее серьезном проекте по моим попыткам обработки естественного языка(nlp).Здесь
для сетей (рекурентных) использовал pybrain, для представления слов статьи про искуственный интелект в виде 10-мерных
векторов(векторов Томаша Миколова word2vec)пакет gensim(о них в прошлых статьях).Я получил из статьи матрицу примерно
1_500 рядов и в ряду 10-мерное слово из статьи википедии про искусственный интелект и 2-мерный вектор (0, 1) говорящий
что это слово про искусственный интелект.Так я обрабатываю nlp.И эту матрицу я отдал рекурентной сети.Сеть должна
обучаться пока ошибка будет меньше 0.001.Она обучилась.Там есть функция evaluate() которая может оценить правильность
обучения сети на обучаещем наборе.Так вот она дала результат что правильных ответов только 0.05 %.
Сперва обрабатываю статью из интернета и сохраняю word2vec модель, скрипт 1.Потом обучаю-скрипт 2.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#1)
#-*- coding: utf8 -*-
import bs4 as bs
import urllib.request
import nltk
from nltk.corpus import stopwords
from gensim.models import Word2Vec
from gensim.test.utils import common_corpus, common_texts, get_tmpfile
import re
import os
 
scrapped_data = urllib.request.urlopen('https://en.wikipedia.org/wiki/Artificial_intelligence')
article = scrapped_data .read()
 
parsed_article = bs.BeautifulSoup(article,'lxml')
 
paragraphs = parsed_article.find_all('p')
 
article_text = ""
 
for p in paragraphs:
    article_text += p.text
 
# Cleaing the text
processed_article = article_text.lower()
processed_article = re.sub('[^a-zA-Z]', ' ', processed_article )
processed_article = re.sub(r'\s+', ' ', processed_article)
 
# Preparing the dataset
all_sentences = nltk.sent_tokenize(processed_article)
 
all_words = [nltk.word_tokenize(sent) for sent in all_sentences]
 
# Removing Stop Words
 
len_all_words=len(all_words)
for i in range(len_all_words):
    all_words[i] = [w for w in all_words[i] if w not in stopwords.words('english')]
 
word2vec = Word2Vec(all_words, min_count=0, vector_size=10)
word2vec.save(os.path.join(os.path.dirname(__file__),"my_w2v.model"))
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#2)
#-*- coding: utf-8 -*-
from pybrain.structure import RecurrentNetwork, FullConnection, LinearLayer, SigmoidLayer
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
from gensim.models import Word2Vec
import os
 
 
word2vec = Word2Vec.load(os.path.join(os.path.dirname(__file__),"my_w2v.model"))
 
len_all_words=len(word2vec.wv)
 
target=(0, 1)
matrix_arif=[]
 
 
for row_count in range(len_all_words):
    row_vector=(word2vec.wv.get_vector(list(word2vec.wv.key_to_index.keys())[row_count]), target) # создаем tuple
    matrix_arif.append(row_vector)
 
 
def evaluate(net , X_Y_test):
        scores = []
        res_acc = 0
        rows = len(X_Y_test)
        wi_y_test = len(X_Y_test[0])
        elem_of_out_nn = 0
        elem_answer = 0
        is_vecs_are_equal = False
        out_nn=None
        for row in range(rows):
            x_test = X_Y_test[row][0]
            y_test = X_Y_test[row][1]
 
            out_nn = net.activate(x_test)
            for elem in range(wi_y_test):
                elem_of_out_nn = out_nn[elem]
                elem_answer = y_test[elem]
                if elem_of_out_nn > 0.5:
                    elem_of_out_nn = 1
                    # print("output vector elem -> ( %f ) " % 1, end=' ')
                    # print("expected vector elem -> ( %f )" %
                          elem_answer, end=' ')
                else:
                    elem_of_out_nn = 0
                    # print("output vector elem -> ( %f ) " % 0, end=' ')
                    # print("expected vector elem -> ( %f )" %
                          elem_answer, end=' ')
                if elem_of_out_nn == elem_answer:
                    is_vecs_are_equal = True
                else:
                    is_vecs_are_equal = False
                    break
            if is_vecs_are_equal:
                # print("-Vecs are equal-")
                scores.append(1)
            else:
                # print("-Vecs are not equal-")
                scores.append(0)
 
        res_acc = sum(scores) / rows * 100
 
        return res_acc
 
 
 
#Define network structure
network = RecurrentNetwork(name="XOR")
 
inputLayer = LinearLayer(10, name="Input")
hiddenLayer = SigmoidLayer(15, name="Hidden")
outputLayer = LinearLayer(2, name="Output")
 
network.addInputModule(inputLayer)
network.addModule(hiddenLayer)
network.addOutputModule(outputLayer)
 
c1 = FullConnection(inputLayer, hiddenLayer, name="Input_to_Hidden")
c2 = FullConnection(hiddenLayer, outputLayer, name="Hidden_to_Output")
c3 = FullConnection(hiddenLayer, hiddenLayer, name="Recurrent_Connection")
 
network.addConnection(c1)
network.addRecurrentConnection(c3)
network.addConnection(c2)
 
network.sortModules()
 
#Add a data set
ds = SupervisedDataSet(10, 2)
 
 
height_X_Y=len(matrix_arif)
 
for input, target in matrix_arif:
    ds.addSample(input, target)
 
 
#Train the network
trainer = BackpropTrainer(network, ds, momentum=0.99)
 
max_error = 0.001 
error, count = 1, 1000
#Train
while abs(error) >= max_error:
    error = trainer.train()
    print('err {0:.5f}'.format(error))
    # count = count - 1
 
print("Error: ", error)
 
print(evaluate(network, matrix_arif))
Bash
1
2
<здесь вывод об ошибках>
0.05333333333333334
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru