import math
import numpy as np
import pandas as pd
from sklearn.datasets import make_moons, make_circles, make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.neural_network import MLPClassifier
import matplotlib.pyplot as plt
import seaborn as sns
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Input, Dense, Conv2D, MaxPooling2D, UpSampling2D, Dropout, Lambda, Concatenate, Embedding
from keras.optimizers import RMSprop, Adam
from keras import regularizers, objectives, metrics
from keras.models import Model
from keras import backend as K
from IPython.display import display
%matplotlib inline
# sns.set()
# one-hot-encoding на 3 думи от корпус 4 думи.
x = np.array([
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0]])
# Ще имаме първи слой с 10 неврона.
# x има размер 4, което означава 40 тегла.
W1 = np.arange(40).reshape(4, 10)
print(W1)
np.dot(x, W1)
print([0, 0, 0, 1] @ W1)
[0, 0, ... , 1, ... , 0]
- one-hot-encoding,[0.12, 0.55, -1.4, ... , 0.14]
keras.layers.Embedding(input_dim, output_dim, embeddings_initializer='uniform', embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None)
input_dim
– броя на думите в корпусаoutput_dim
– броя на невроните с които представяме всяка дума (embedding size)Сега да видим трениране на латентното пространство на word embeddings.
t = """
Сладолед
Сладоледът представлява сладък замразен десерт.
Прави се основно от мляко, масло и захар с добавка на аромати.
Той е висококалоричен продукт, съдържащ голямо количество мазнини, захар, витамини и въглехидрати.
Съществува голямо разнообразие според вкуса, опаковката и формата на неговите видове.
Според състава си сладоледът бива:
сметанов – поне 10% масленост и 16% захар
млечен – 4% масленост и до 20% захар
плодов – без мляко, само с натурални сокове, плодове (20 – 30%) и захар (25 – 30%)
шоколадов – поне 6% шоколад (или 2,5% какао)
орехов – 6 – 10% орехи (или други ядки)
мелба – с плодове и украса (бисквити, заливки и др.)
Сладкарски изделия
""" \
+ \
"""Торта
За информацията в тази статия или раздел не са посочени източници. Въпросната информация може да е непълна, неточна или изцяло невярна.
Имайте предвид, че това може да стане причина за изтриването на цялата статия или раздел.
Торта за рожден ден, украсена със свещи
Резен от шварцвалдска черешова торта
Тортата (от италиански Torta) е сладкарско изделие, обикновено в кръгла форма и на етажи (тестените блатове се редуват със слоеве крем) и украсено с плодове, ядки, шоколад, сметана и други, което се приготвя и поднася при по-специални случаи - рождени и имени дни, юбилеи и подобни.
По принцип тортите в кулинарията биват солени и сладки. Солените се поднасят като предястие или като част от менюто на различни приеми. Сладките торти обаче са цяло изкуство, на което се учиш цял живот, защото разнообразието им е неизчерпаемо. По консистенция тортите биват сочни (сиропирани) и сухи.
Приготвят се от различни сладкарски основи (от един или няколко различни вида). Най-често употребяваните основи са:
пандишпанови платки и блатове в най-различни вкусове и цветове - ванилия, какао, карамел, различни видове ядки или с прибавка на краве масло, прясно мляко, сметана, претърпели термична обработка плодове;
маслени сладкарски основи от класическо ронливо маслено тесто или обогатено с ядки, линцер основа, многолистна маслена основа, кейкова основа;
ядкови основи - с участие на орехови, бадемови, лешникови ядки;
белтъчни основи - леко и тежко белтъчно тесто;
медени сладкарски основи.
Друг компонент на тортите са сладкарските сиропи. Те се приготвят от захар, глюкоза, пчелен мед, вода, хранителна киселина, оцветители и овкусители. Понякога захарта се карамелизира и се получава карамелов сироп, а с прибавка на какао и масло се получава какаов сироп. Киселината служи за инверсия на сиропа с цел предпазване от изкристализиране на захарта от сиропа.
Следващия компонент от приготвянето на торти е пълнежът. За пълнеж се използват различни сладкарски кремове - маслен, шоколадов, сметанов и комбинации между тях. Понякога се добавят и натрошени ядки, шоколад, крокант, желиращи вещества, ликьори, конфитюри, яйца, есенции, пресни плодове.
Операцията по сиропиране на сладкарските основи се нарича трампиране, а съединяването им с крем - зафилване. След зафилването е необходимо време за охлаждане и стягане на основите. Следащата операция е гарниране с крем, глазури, поръски, панировки, фарситури от различен произход.
Последна операция е украсяване с художествена цел от крем, глазури, поръски и плодове.
Готовите торти се съхраняват при хладилни условия или в сухи и тъмни складове при подходяща температура и ниска относителна влажност на въздуха.
Категории: Сладкарски изделия Десерти
"""
sentences = t.replace("\n",".").split(".")
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
one_hot_sentence = cv.fit_transform(sentences).todense()
print(len(cv.vocabulary_))
print(one_hot_sentence.shape)
co_occurance = one_hot_sentence.T.dot(one_hot_sentence)
df = pd.DataFrame(co_occurance, index=cv.vocabulary_, columns=cv.vocabulary_)
df
ids = ['сладолед', 'торта', 'десерт']
small = df[ids]
small[(small.T != 0).any()].sort_values(ids, ascending=False)
pip install gensim
import gensim
model = gensim.models.KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
# най-близки думи
model.most_similar(positive=['milk'], topn=10)
model.most_similar(positive=['panda'])
model.most_similar(positive=['king', 'woman'], negative=['man'], topn=1)
model.most_similar(positive=['grandfather', 'woman'], negative=['man'], topn=1)
model.most_similar(positive=['grandfather', 'young', 'man'], negative=['old'], topn=1)
model.most_similar(positive=['paris', 'germany'], negative=['france'], topn=1)
model.doesnt_match(["icecream", "cake", "chocolate", "whiskey"])
model.doesnt_match(["vegetable", "bicycle", "motorboat", "car", "plane"])
model.doesnt_match("breakfast cereal dinner lunch".split())
# from gensim.scripts.glove2word2vec import glove2word2vec
# glove_input_file = 'glove.txt'
# word2vec_output_file = 'word2vec.txt'
# glove2word2vec(glove_input_file, word2vec_output_file)
# След което зареждате, както Google Word2Vec
Keras
¶embedding = model.get_keras_embedding(train_embeddings=False)
print(type(embedding))
print(embedding.trainable)
print(model.index2word[:20])
wget -c 'https://dumps.wikimedia.org/bgwiki/20171201/bgwiki-20171201-pages-articles-multistream.xml.bz2'
от https://dumps.wikimedia.org/bgwiki/
~300MB
from gensim.corpora.wikicorpus import WikiCorpus
from gensim.models.word2vec import Word2Vec
wiki = WikiCorpus('bgwiki-20171201-pages-articles-multistream.xml.bz2', lemmatize=False, dictionary={})
sentences = list(wiki.get_texts())
print(len(sentences))
print(sentences[0])
%time word2vec = Word2Vec(sentences, size=200, window=10, min_count=5, workers=8)
# Запазване и зареждане на модела
# word2vec.save('bgwiki_word2vec.pkl')
# word2vec = Word2Vec.load("bgwiki_word2vec.pkl")
word2vec.wv.most_similar(positive=['жена', 'цар'], negative=['мъж'])
word2vec.wv.most_similar(positive=['лондон', 'франция'], negative=['англия'])
word2vec.wv.most_similar(positive=['ракия', 'жена'], negative=['мъж'])
Можем да направим avg или да ползваме IDF.
По-напредничивите техники използват CNN и RNN.