Песня по дате рождения

Как узнать год выпуска песни по набору аудио характеристик?

Недавно завершился курс Scalable Machine Learning по Apache Spark, рассказывающий о применении библиотеки MLlib для машинного обучения. Курс состоял из видеолекций и практических заданий. Лабораторные работы необходимо было выполнять на PySpark, а поскольку по работе мне чаще приходится сталкиваться со scala, я решил перерешать основные лабы на этом языке, а заодно и лучше усвоить материал. Больших отличий конечно же нет, в основном, это то, что PySpark активно использует NumPy, а в версии со scala используется Breeze.
Первые два практических занятия охватывали изучение основных операций линейной алгебры в NumPy и знакомство с apache spark соответственно. Собственно машинное обучение началось с третьей лабораторной работы, она и разобрана ниже.
Данная лабораторная работа нацелена на изучение метода линейной регрессии (одного из методов обучения с учителем). Мы будем использовать часть данные от Million Song Dataset. Наша цель заключается в нахождении лучшей модели, предсказывающей год песни по набору аудио характеристик при помощи метода линейной регрессии.
Данная лабораторная работа включает следующие этапы:
1. Чтение, парсинг и обработка данных
2. Создание и оценка базовой модели
3. Реализация базового алгоритма линейной регрессии, обучение и оценка модели
4. Нахождение модели с помощью MLlib, настройка гиперпараметров
5. Добавление зависимостей между характеристиками

1. Чтение, парсинг и обработка данных

Сырые данные в настоящее время хранятся в текстовом файле и представляют собой строки такого вида:
2001.0,0.884123733793,0.610454259079,0.600498416968,0.474669212493,0.247232680947,0.357306088914,0.344136412234,0.339641227335,0.600858840135,0.425704689024,0.60491501652,0.419193351817
Каждая строка начинается с метки (год выпуска песни), а затем следуют аудио-характеристики записи, разделённые запятой.
Первое, с чего мы начнём: представим данные в виде RDD:
val sc = new SparkContext(«local», «week3») val rawData: RDD = sc.textFile(«millionsong.txt»)
Посмотрим, сколько записей у нас есть:
val numPoints = rawData.count() println(numPoints) > 6724
Что бы лучше понять предоставленные нам данные, давайте визуализируем их, построив тепловую карту хотя бы для части наблюдений. Т.к. характеристики находятся в диапазоне от 0 до 1, то пусть чем ближе значение к единице тем темнее будет оттенок серого, и наоборот.

В MLlib обучающая выборка (точнее её элементы) должна храниться в специальном объекте LabeledPoint, который состоит из метки (label) и набора характеристик (features), принадлежащих данной метке. В нашем случае меткой будет год, а характеристиками- аудио- данные записи.
Напишем функцию, которая на вход будет получать одну строку из нашего набора данных и возвращать готовый labeledPoint.
import org.apache.spark.mllib.regression.LabeledPoint import org.apache.spark.mllib.linalg.Vectors def parsePoint(line: String) = { val sp = line.split(‘,’) LabeledPoint(sp.head.toDouble, Vectors.dense(sp.tail.map(_.toDouble))) }

Переведём наши данные в рабочий вариант:
val parsedDataInit: RDD = rawData.map(parsePoint)
Теперь давайте изучим метки и найдём диапазон годов, в который укладываются наши данные; чтобы это сделать, нужно найти максимальный и минимальный год.
val onlyLabels = parsedDataInit.map(_.label) val minYear = onlyLabels.min() val maxYear = onlyLabels.max() println(s»max: $maxYear, min: $minYear») > max: 2011.0, min: 1922.0
Как мы видим, метки расположены между 1922 и 2011 г.г. В задачах обучения часто является естественным смещение значений так, чтобы они начинались с нуля. Давайте создадим новый RDD, который будет содержать объекты с метками смещёнными на 1922.0.
val parsedData = parsedDataInit.map(x => LabeledPoint(x.label — minYear, x.features))
Мы почти закончили подготовку данных, и всё, что нам осталось- разбить данные на 3 подмножества:

  • обучающая выборка — именно на ней мы и будем обучать нашу модель
  • проверочная выборка — на этих данных мы будем проверять насколько успешно обученная модель предсказывает результат
  • тестовая выборка — этот набор будет имитировать новые данные и поможет нам правдиво оценить лучшую модель

Для этих целей в spark есть метод randomSplit:
val weights = Array(0.8, 0.1, 0.1) val seed = 42 val splitData: Array] = parsedData.randomSplit(weights, seed).map(_.cache()) val parsedTrainData = splitData(0) val parsedValData = splitData(1) val parsedTestData = splitData(2) val nTrain = parsedTrainData.count() val nVal = parsedValData.count() val nTest = parsedTestData.count() println(nTrain, nVal, nTest, nTrain + nVal + nTest) println(parsedData.count()) >(5402,622,700,6724) > 6724

2. Создание и оценка базовой модели

Давайте попробуем придумать простую модель, с которой мы могли бы сравнивать точность моделей, полученных в дальнейшем. В самом простом случае модель может выдавать в качестве предсказания среднюю величину года, независимо от входящих данных. Давайте посчитаем эту величину:
val averageTrainYear = parsedTrainData.map(_.label).mean() println(averageTrainYear) > 53.68659755646054
Чтобы оценить, насколько хорошо работает наша модель, давайте используем в качестве оценки квадратный корень из среднеквадратической ошибки (RMSE)
.
В нашем случае yi — это метка-год, а yi с крышечкой — это год, предсказанный моделью. Сначала реализуем функцию, вычисляющую квадрат разности label и prediction и функцию, которая будет вычислять RMSE:
def squaredError(label: Double, prediction: Double) = math.pow(label — prediction, 2) def calcRMSE(labelsAndPreds: RDD) = math.sqrt(labelsAndPreds.map(x => squaredError(x._1, x._2)).sum() / labelsAndPreds.count())
Теперь мы можем рассчитать RMSE наших данных на основе предсказаний базовой модели. Для этого подготовим новые RDD содержащие кортежи с наблюдаемыми и прогнозными годами.
val labelsAndPredsTrain = parsedTrainData.map(x => x.label -> averageTrainYear) val rmseTrainBase = calcRMSE(labelsAndPredsTrain) val labelsAndPredsVal = parsedValData.map(x => x.label -> averageTrainYear) val rmseValBase = calcRMSE(labelsAndPredsVal) val labelsAndPredsTest = parsedTestData.map(x => x.label -> averageTrainYear) val rmseTestBase = calcRMSE(labelsAndPredsTest) > Base model: Baseline Train RMSE = 21,496 Baseline Validation RMSE = 21,100 Baseline Test RMSE = 21,100

Обратите внимание, что каждый полученный RMSE может быть истолкован как средняя ошибка прогнозирования для данного набора (в терминах количества лет)

3. Реализация базового алгоритма линейной регрессии, обучение и оценка модели

Теперь, когда у нас есть базовая модель и её оценка, мы можем проверить, сможет ли метод линейной регрессии предложить нам результат лучше предыдущего.
Напомним формулу шага градиентного спуска для линейной регрессии:
wi+1 = wi — αi * ∑(wiT * xj — yj) * xj.
Где i это номер итерации а j идентификатор наблюдения.
Для начала реализуем функцию, которая вычисляет слагаемое для данного обновления (wT * x — y) * x:
import breeze.linalg.{ DenseVector => BreezeDenseVector } def gradientSummand(weights: BreezeDenseVector, lp: LabeledPoint): BreezeDenseVector = { val x = BreezeDenseVector(lp.features.toArray) val y = lp.label val wx: Double = weights.t * x (wx — y) * x }
Идём дальше: нам необходимо реализовать функцию, которая будет принимать рассчитанные веса модели и наблюдаемые значения, а отдавать — кортеж (наблюдаемое значение, предсказанное значение).
def getLabeledPrediction(weights: BreezeDenseVector, observation: LabeledPoint): (Double, Double) = { val x = BreezeDenseVector(observation.features.toArray) val y = observation.label val prediction: Double = weights.t * x (y, prediction) }
Настало самое время реализовать метод Градиентного спуска:
def linregGradientDescent(trainData: RDD, numIters: Int) = { // Размер обучающей выборки val n = trainData.count() // Кол-во характеристик val d = trainData.first().features.size // Создаём начальный вектор весов (состоит из d нулей) val w = BreezeDenseVector.zeros(d) val alpha = 1.0 val errorTrain = BreezeDenseVector.zeros(numIters) for (i <- 0 until numIters) { val labelsAndPredsTrain = trainData.map(x => getLabeledPrediction(w, x)) errorTrain(i) = calcRMSE(labelsAndPredsTrain) val gradient: BreezeDenseVector = trainData.map(x => gradientSummand(w, x)).reduce((dv1, dv2) => dv1 + dv2) val alpha_i = alpha / ( n * math.sqrt(i+1) ) w -= alpha_i * gradient } (w, errorTrain) }
Ну вот всё готово! Теперь осталось обучить нашу модель линейной регрессии на всей обучающей выборке и оценить её точность на проверочной выборке:
val numIters = 50 val (weightsCustom, errorTrainCustom) = linregGradientDescent(parsedTrainData, numIters = numIters) val labelsAndPreds = parsedValData.map(lp => getLabeledPrediction(weightsCustom, lp)) val rmseValLRCustom = calcRMSE(labelsAndPreds) > Custom Linear regression algorithm Weights = DenseVector(22.429559050840954, 20.57848949803509, -0.38069311013701224, 8.286892767462648, 5.725188813272974, -4.547779089973534, 15.494323154076804, 3.7888305696294986, 10.205862111138764, 5.877745123091225, 11.13061973187094, 3.6849419014146703) Baseline = 21,100 CustomLR = 18,341
На каждой итерации мы считали RMSE для обучающей выборки и теперь мы можем отследить, как вёл себя алгоритм: для этого построим два графика. Первый- это логарифм ошибки от номера итерации для всех 50 итераций, а второй-собственно значения ошибки для последних 44 итерации.



Улучшения мы явно добились: теперь наши предсказания ошибаются в среднем не на 21 год, а всего лишь на 18. Надо отметить, что если количество итераций увеличить до 500, то ошибка будет составлять 16,403.

4. Нахождение модели с помощью MLlib, настройка гиперпараметров

Ну что же, теперь это выглядит гораздо лучше. Однако давайте посмотрим, можем ли мы улучшить ситуацию, используя свободный член (константа, intercept) и регуляризацию. Для этого мы воспользуемся уже готовым классом LinearRegressionWithSGD, который по существу реализует тот же алгоритм, что и реализовали мы, но более эффективно, с различным дополнительным функционалом, таким, к примеру, как стохастический градиентный спуск, возможность добавление свободного члена, а также L1 и L2 регуляризация.
Для начала, реализуем функцию, которая поможет настроить модель:
import org.apache.spark.mllib.regression.RidgeRegressionWithSGD def tuneModel(numIterations: Int = 500, stepSize: Double = 1.0, regParam: Double = 1e-1) = { val model = new RidgeRegressionWithSGD() model.optimizer .setStepSize(stepSize) .setNumIterations(numIterations) .setRegParam(regParam) model.setIntercept(true) }
Мы использовали RidgeRegressionWithSGD, потому что это обёртка с уже заданным типом регуляризации L2, точно также мы могли бы использовать и LinearRegressionWithSGD, но тогда пришлось бы дописать ещё одну строчку
model.optimizer.setUpdater(new SquaredL2Updater)
Запускаем алгоритм:
val ridgeModel = tuneModel(numIterations = 500, stepSize = 1.0, regParam = 1e-1).run(parsedTrainData) val weightsRidge = ridgeModel.weights val interceptRidge = ridgeModel.intercept val rmseValRidge = calcError(ridgeModel, parsedValData) > RidgeRegressionWithSGD weights = intercept = 13.40151357030002 > RidgeRegressionWithSGD validation RMSE Baseline = 21,100 CustomLR = 18,341 RidgeLR = 18,924
Результат сравним с нашей реализацией (а если вспомнить, что при равном числе итераций мы получили 16.4, то результат не ахти какой), но, вероятно, мы сможем улучшить результат, пробуя разные значения регуляризации. Давайте посмотрим, что получится, если параметр регуляризации взять 1e-10, 1e-5 и 1.
var bestRMSE = rmseValRidge var bestRegParam = 1.0 var bestModel = ridgeModel for (regParam <- Array(1e-10, 1e-5, 1)) { val model = tuneModel(regParam = regParam).run(parsedTrainData) val rmseVal = calcError(model, parsedValData) println(f»regParam = $regParam%.0e, RMSE = $rmseVal%.3f») if (rmseVal < bestRMSE) { bestRMSE = rmseVal bestRegParam = regParam bestModel = model } } > regParam = 1e-10, RMSE = 16,292 regParam = 1e-05, RMSE = 16,292 regParam = 1e+00, RMSE = 23,179 > Best model weights = intercept = 16.170147238736043 regParam = 1.0E-10 > Grid validation RMSE Baseline = 21,100 LR0 = 18,341 LR1 = 18,924 LRGrid = 16,292
Осталось проверить, как ведёт себя модель, если изменить значение шага (alpha) и количества итераций. Параметр регуляризации возьмём тот, который дал наилучшее значение, шаг пусть будет 1e-5, 10, а количество итераций 500 и 5.
for (alpha <- Array(1e-5, 10)) { for (numIter <- Array(5, 500)) { val model = tuneModel(numIterations = numIter, stepSize = alpha, regParam = bestRegParam).run(parsedTrainData) val rmseVal = calcError(model, parsedValData) println(f»alpha = $alpha%.0e, numIters = $numIter, RMSE = $rmseVal%.3f») } } > alpha = 1e-05, numIters = 5, RMSE = 56,912 alpha = 1e-05, numIters = 500, RMSE = 56,835 alpha = 1e+01, numIters = 5, RMSE = 351471078,741 alpha = 1e+01, numIters = 500, RMSE = 3696615731186115000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,000
Итак, мы можем сделать вывод, что при маленьком шаге алгоритм очень медленно приближается к минимуму, а при большом вообще расходится, притом очень быстро.

5. Добавление зависимостей между характеристиками

До сих пор мы использовали только те характеристики, которые нам были предоставлены. Например, если бы у нас было только 2 характеристики x1 и x2, то модель представляла бы собой:
w0 + w1x1 + w2x2.
Однако ничто не мешает нам создать дополнительные характеристики: возвращаясь к нашему примеру, мы могли бы придумать модель и посложнее:
w0 + w1x1 + w2x2 + w3x1x2 + w4x2x1 + w5x12 + w6x22
Давайте так и поступим; для этого нам необходимо реализовать функцию, которая бы попарно перемножала значения характеристик и возвращала бы новый набор, объединённый с исходным.
def twoWayInteractions(lp: LabeledPoint) = { val features: List = lp.features.toArray.toList val two = (for (x <- features; y <- features) yield (x,y)).map(x => x._1 * x._2) val inter = two ::: features LabeledPoint(lp.label, Vectors.dense(inter.toArray)) }
Теперь давайте создадим новую модель, для этого нам нужно применить функцию описанную выше к нашим наборам данных:
val trainDataInteract = parsedTrainData.map(twoWayInteractions) val valDataInteract = parsedValData.map(twoWayInteractions) val testDataInteract = parsedTestData.map(twoWayInteractions)
Ну а далее мы должны повторить поиск гиперпараметров для новой модели, т. к. найденные ранее настройки могут не дать наилучший результат. Но мы повторять здесь этого не будем а сразу подставим оптимальные.
val modelInteract = tuneModel(regParam = bestRegParam).run(trainDataInteract) val rmseValLRInteract = calcError(modelInteract, valDataInteract) > Interact validation RMSE Baseline = 21,100 LR0 = 18,341 LR1 = 18,924 LRGrid = 16,292 LRInteract = 15,225
Ну и напоследок оценим нашу новую модель на тестовых данных. Обратите внимание что мы не использовали тестовые данные для выбора лучшей модели. Поэтому наша оценка даёт несмещённую оценку того как полученная модель будет работать на новых данных. Теперь мы можем увидеть насколько новая модель лучше базовой.

Узнайте, какая русскоязычная песня была хитом в год вашего рождения

Всегда интересно узнать, что происходило в мире в тот год, когда вы родились. Нам всем периодически нравится предаваться ностальгии и вспоминать, что носили, во что играли или, например, какие песни слушали в нашем детстве.
Послушайте, что в свое время пели ваши родители, и проверьте, совпадает ли ваша любимая песня с хитом, который появился в год вашего рождения.
Вы родились с 1950 по 1959 год

1950 — «Школьный вальс», сочиненный композитором Исааком Дунаевским на стихи Михаила Матусовского по просьбе выпускницы Воронежской женской школы. Первым исполнителем стал Георгий Виноградов. С тех пор эта композиция часто звучит на выпускных вечерах.
1951 — «Чернобровый, черноокий», песня из советского кинофильма «Большой концерт». Исполняет ее оперная певица Мария Максакова.
1952 — «Сибирский вечер», поет эстрадная певица и актриса Клавдия Шульженко.
1953 — «На крылечке твоем» из фильма «Свадьба с приданым», исполненная актерами Верой Васильевой и Виталием Дорониным.
1954 — «Что так сердце растревожено» из кинокомедии «Верные друзья». Первым ее спел актер и певец Александр Борисов.
1955 — «Подмосковные вечера», песня была написана по заказу к фильму о спартакиаде народов РСФСР. Популярный в те годы певец Марк Бернес отказался ее исполнять, тогда ее спел актер Московского Художественного театра Владимир Трошин. И неожиданно для всех она снискала любовь слушателей.
1956 — «Я люблю тебя, жизнь», написанная для Марка Бернеса. Также эта песня вошла в репертуар многих популярных исполнителей: Георга Отса, Иосифа Кобзона, Эдиты Пьехи, Юрия Визбора, Бориса Моисеева, Дмитрия Харатьяна.
1957 — «Огней так много золотых», известная в исполнении Екатерины Семёнкиной вместе с Антониной Фроловой (по другим данным — с Людмилой Зыкиной) в фильме «Дело было в Пенькове». В Саратове есть памятник этой песне. Он изображает холостяка с букетиком полевых цветов, ожидающего свою девушку под фонарем и часами-курантами. Каждые четверть часа куранты играют мелодию песни.
1958 — «Ландыши», которую почти одновременно исполнили две певицы — Гелена Великанова и Нина Дорда. Песня сразу стала популярной, но в течение 23 лет подвергалась критике со стороны прессы и партийного руководства. Ее называли примером пошлости, «мелкотемьем» и «мелкодумьем».
1959 — «Между нами решено», песня из комедии «Неподдающиеся».
Вы родились с 1960 по 1969 год

1960 — «Московские окна», советский шлягер, первым его спел Леонид Утесов.
1961 — «А сердце так стучит» из кинофильма «Артист из Кохановки». Поет Олег Анофриев, который сыграл роль техника-строителя Миши.
1962 — «Старый клен», песня из советского фильма «Девчата», была написана поэтом Михаилом Матусовским и композитором Александрой Пахмутовой. В фильме ее исполнили Николай Погодин и Люсьена Овчинникова.
1963 — «Течет река Волга» была написана для фильма «Течет Волга» в 1962 году и спета Владимиром Трошиным. Но настоящую народную популярность песня получила годом позже, в исполнении Людмилы Зыкиной.
1964 — «Лучший город Земли» Муслима Магомаева сразу приобрела известность, но через месяц была запрещена Никитой Хрущевым «из-за легкомысленности». Однако в том же году Хрущева отправили в отставку, а песня вновь зазвучала на радио.
1965 — «Нежность», написанная Александрой Пахмутовой и поэтами Сергеем Гребенниковым и Николаем Добронравовым, посвящена советским летчикам. Она стала любимой песней Юрия Гагарина. Впервые ее исполнила Майя Кристалинская.
1966 — «Последняя электричка» настоящую известность получила после исполнения Владимиром Макаровым в радиопередаче «С добрым утром!».

1967 — «Наш сосед» Эдиты Пьехи стала настоящим шлягером. Автор песни — композитор-песенник и поэт Борис Потемкин.
1968 — «Трус не играет в хоккей» стала и до сих пор остается гимном хоккея и вообще спорта. Музыку к песне написала Александра Пахмутова, слова — Сергей Гребенников и Николай Добронравов. Впервые исполнил песню Вадим Мулерман.
1969 — «Журавли», песня, написанная на стихи Расула Гамзатова в переводе Наума Гребнева. Стала последней песней Марка Бернеса. Записывали композицию, когда Бернес был тяжело болен и едва передвигался. Песню записали с одного дубля.
Вы родились с 1970 по 1979 год

1970 — «Эти глаза напротив» композитора Давида Тухманова на слова Татьяны Сашко в исполнении Валерия Ободзинского сразу стала шлягером и до сих пор присутствует в репертуаре современных певцов.
1971 — «Надежда», написанная Александрой Пахмутовой и Николаем Добронравовым. Первой ее спела Эдита Пьеха, но самой известной версией данной песни стала композиция в исполнении Анны Герман.
1972 — «Кони привередливые» — одна из самых узнаваемых песен Владимира Высоцкого. Писалась для фильма «Земля Санникова», где на главную роль планировалось пригласить Высоцкого, но позже его кандидатура была отклонена.
1973 — «Есть только миг», песня из кинофильма «Земля Санникова», написанная поэтом Леонидом Дербеневым и композитором Александром Зацепиным. В фильме ее должен был петь Олег Даль, сыгравший главную роль. Но на запись актер пришел выпившим и не мог попасть в такт, поэтому исполнил ее с разрешения Даля Олег Анофриев.
1974 — «Голубой вагон» из детского мультфильма про Крокодила Гену и Чебурашку. Музыку к песне написал Владимир Шаинский на стихи Эдуарда Успенского. Поет Владимир Ферапонтов.
1975 — «День Победы» поэта Владимира Харитонова и композитора Давида Тухманова. Песня была написана к 30-летию Великой Победы и впервые была исполнена в марте 1975 года, но долго не принималась Союзом композиторов из-за молодости Тухманова. Только в ноябре, когда ее спел Лев Лещенко, песня была окончательно одобрена и до сих пор звучит на всех концертах, посвященных Дню Победы.
1976 — «Не отрекаются любя» Аллы Пугачевой, музыка Марка Минкова на стихи Вероники Тушновой.
1977 — «Эхо любви», композитор — Евгений Птичкин, поэт — Роберт Рождественский. Первый исполнитель — Анна Герман, также известна версия дуэта Анны Герман и Льва Лещенко.
1978 — «Свеча» рок-группы «Машина времени», написанная Андреем Макаревичем. Критиками признана одной из лучших композиций группы, оказавших влияние на несколько поколений слушателей.
1979 — «Кто виноват?» группы «Воскресение», одна из наиболее узнаваемых песен музыкального коллектива. Занимает 9-е место в списке 100 лучших песен русского рока в XX веке по версии радиостанции «Наше радио».
Вы родились с 1980 по 1989 год

1980 — «Поворот» группы «Машина времени», написанная Александром Кутиковым (музыка) и Андреем Макаревичем (слова). Занимает 4-ю строчку в списке 100 лучших песен русского рока в XX веке по версии радиостанции «Наше радио».
1981 — «Я тебя никогда не забуду» из, пожалуй, самой известной и любимой советской рок-оперы «Юнона и Авось». Стихи к песне написаны Андреем Вознесенским, музыка — Алексеем Рыбниковым, исполнили песню Николай Караченцов и Елена Шанина.

1982 — «Восьмиклассница» Виктора Цоя вошла в дебютный альбом группы «Кино». Цой сочинил эту песню, вдохновившись дружбой с девушкой, студенткой ПТУ, при котором певец периодически играл в небольшой рок-группе.
1983 — «Полет на дельтаплане» из репертуара Валерия Леонтьева.
1984 — «Поверь в мечту», музыку для этой песни написал Юрий Антонов, первой ее спела группа «Земляне». В репертуар самого Антонова композиция вошла позже — в составе одноименного альбома.
1985 — «Прекрасное далеко», написанная композитором Евгением Крылатовым на стихи поэта Юрия Энтина, прозвучала в фильме «Гостья из будущего» в исполнении Татьяны Дасковской. По словам Крылатова, «это призыв, молитва, мольба о детях, чтобы они жили лучше, чем мы».
1986 — «Скованные одной цепью» («Круговая порука») группы «Наутилус Помпилиус», слова Ильи Кормильцева, музыка Вячеслава Бутусова. Песня стала одной из визитных карточек группы. В 1987 году прозвучала в фильме «Асса».
1987 — «Город золотой», песня была написана еще в 1972 году, первым исполнителем стал Алексей Хвостенко. Но особую популярность композиция приобрела в исполнении Бориса Гребенщикова и группы «Аквариум», после выхода фильма «Асса».
1988 — «Люси», которую Олег Газманов спел со своим сыном Родионом, которому тогда было 7 лет.
1989 — «Белые розы» группы «Ласковый май». Клип на песню «Белые розы» впервые был показан в январе 1989 года в выпуске передачи «Утренняя почта», после чего коллектив мгновенно стал популярным.
Вы родились с 1990 по 1999 год

1990 — «Никто не услышит» («Ой-йо») — песня, написанная Владимиром Шахриным для своей группы «Чайф», стала по-настоящему народной. Без нее не обходятся, наверное, ни одни посиделки с гитарой.
1991 — «Что такое осень» группы «ДДТ». На выступлениях зрители неизменно просят сыграть эту песню на бис. Чтобы не стать заложниками одной песни, группа целый год не исполняла популярную композицию. Позже они вернули ее в свой концертный репертуар.
1992 — «Фаина» поп-группы «НА-НА» стала настоящим хитом и визитной карточкой коллектива.
1993 — «Плачет девушка в автомате» первоначально называлась «Первый лед». Стихи были написаны еще в 1958 году. Первой исполнительницей стала Нина Дорда, пели ее и ВИА «Веселые ребята», но хитом она стала только в 90-е годы в версии Евгения Осина.
1994 — «Конь» на музыку Игоря Матвиенко и слова Александра Шаганова в исполнении группы «Любэ» стала народной песней. Игорь Матвиенко признавался, что писал ее для группы «Иванушки International», но в последний момент отдал Николаю Расторгуеву.
1995 — «Маленькая страна», сочиненная Игорем Николаевым и Ильей Резником, в исполнении Наташи Королевой.
1996 — «Тучи» поп-группы «Иванушки International» написана Игорем Матвиенко и Александром Шагановым. До выхода клипа на эту песню продюсеры подумывали о роспуске группы, но после трансляции на ОРТ на коллектив обрушилась невероятная популярность.
1997 — «Утекай» группы «Мумий Тролль» журналом Rolling Stone включена в список 40 песен, изменивших мир, и получила награду премии российской музыкальной индустрии «Рекордъ» 1998 года в номинации «Российский радиохит».
1998 — «Ариведерчи» в исполнении Земфиры долгое время занимала первые строчки хит-парадов.
1999 — «Крошка моя» группы «Руки Вверх!», благодаря этой песне коллектив стал лауреатом в номинации «Российский радиохит».
Вы родились с 2000 по 2009 год

Узнайте, какая русскоязычная песня была хитом в год вашего рождения
2000 — «Полковнику никто не пишет» группы «Би-2». Песня стала главным саундтреком к фильму «Брат-2», после чего заняла вершины хит-парадов.
2001 — «Ласковая моя» группы «Чай вдвоем», благодаря песне группа стала лауреатом премии «Золотой граммофон».
2002 — «Мой рок-н-ролл» в исполнении группы «Би-2» и Юлии Чичериной. Музыка написана Левой Би-2 и Шурой Би-2, текст песни сочинил родной дядя Шуры Михаил Карасев.
2003 — «Небо», сингл группы «Дискотека Авария», который стал хитом после перерыва в деятельности коллектива в связи со смертью одного из участников — Олега Жукова.
2004 — «Седьмой лепесток» группы Hi-Fi, долгое время песня занимала верхние строчки хит-парадов.
2005 — «Ресницы» группы «Братья Грим», после которой о коллективе заговорили.
2006 — «Останусь» рок-группы из Киргизии «Город 312». Песня стала саундтреком к фильму «Дневной Дозор» и принесла коллективу бешеную популярность.
2007 — «Сентябрь», сингл российской металкор-группы Stigmata. На это время приходится пик ее популярности, группу начинают приглашать на престижные рок-фестивали.
2008 — «Ода нашей любви» петербургской хип-хоп-группы «Т9». Стала узнаваемой после выхода молодежного сериала «Ранетки», где была основной музыкальной темой.
2009 — «Ева» группы «Винтаж». Одним из авторов песни стала Ева Польна (солистка группы «Гости из будущего»). В композиции использованы музыка и отрывки из текста песни «Беги от меня» коллектива «Гости из будущего».
Какую песню вы напеваете сейчас?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *