„Zwężenie odcinka drogi” jako antywzorzec

Przeglądając kody źródłowe różnych projektów, pisane przez różnych programistów, często trafiam na pewną konkretną grupę brzydkich zapachów. Mimo, że przybierają przeróżne formy, mają ze sobą tyle wspólnego, że moim zdaniem reprezentują jeden antywzorzec.

Mam dla niego całkiem fajną nazwę: zwężenie odcinka drogi.

Czytaj dalej

[MoodOfTheSong] 6. MongoDB

W poprzednim wpisie pokazałem że mój system potrafi już przetworzyć zbiór danych poprzez zastosowanie z góry zadanej transformacji, oraz zwizualizować rozkład statystyczny tych cech dla różnych nastrojów.

Wspomniałem jednak pod koniec postu, że czegoś jeszcze brakuje. Brakuje mianowicie możliwości zapisania wyników pośrednich. Taka możliwość byłaby bardzo wygodna podczas eksperymentowania. Chciałbym na przykład móc raz obliczyć dane a następnie pobawić się różnymi sposobami ich wizualizowania.

Czytaj dalej

[MoodOfTheSong] 5. Pierwsze cechy

Dobra. Było trochę o teorii, trochę o narzędziach, trochę o danych, ale kiedyś trzeba się wziąć na serio do roboty. Zaczynam więc eksperymentowanie z parametryzacją. Dzisiaj opiszę jak przygotowałem system na wczytanie danych, przetworzenie ich ustaloną metodą oraz zaprezentowanie wyników w jakiejś sensownej formie.

Czytaj dalej

[MoodOfTheSong] 4. Serwer ciągłej integracji

Dzisiaj napiszę o kilku technikach, które są bardzo pomocne przy dużych projektach, w których pracuje wiele osób. Ich stosowanie w moim, małym, jednoosobowym projekcie może się wydawać wbijaniem gwoździa młotem pneumatycznym; wolę jednak je poznać, wdrożyć i dopracować trochę za wcześnie niż trochę za późno.

Mowa tutaj o narzędziach, które pozwolą mi mieć pewność, że kod w repozytorium jest zawsze pozbawiony błędów, poprawny stylistycznie, a wszystkie testy przechodzą.

Czytaj dalej

[MoodOfTheSong] 3. Trochu teorii

Gdyby spojrzeć z oddali na większość systemów klasyfikacji, zobaczylibyśmy następujący schemat:

  1. konwertujemy obserwację na formę przyjazną klasyfikatorowi
  2. przepuszczamy przez klasyfikator i otrzymujemy odpowiedź – czym jest nasza obserwacja

Przykład? Na lotniskach nasze bagaże są prześwietlane. Aktualnie wygląda to tak, że przed monitorem pokazującym obraz rentgenowski siedzi ekspert i sprawdza czy w naszej walizce nie ma niczego ciekawego. Wyobraźmy sobie jak wyglądałby system, który go wspomaga.

Czytaj dalej

[MoodOfTheSong] 2. Jak się dobrać do danych

W poprzednim wpisie pokazałem skąd biorę dane treningowe i jak je konwertuje do formatu WAV. Pasuje więc wreszcie z tych danych skorzystać! W projekcie będę używał Pythona, część systemu odpowiedzialna za trenowanie klasyfikatora będzie więc po prostu skryptem napisanym w tym języku.

Skrypt ten:

  • wczyta dane z plików
  • rozdzieli je na zbiory: treningowy i testowy
  • dokona dalszej ich obróbki
  • wytrenuje klasyfikator (i zapisze go do pliku lub bazy)

Czytaj dalej

[MoodOfTheSong] 1. Dane treningowe

Kluczowym elementem systemu rozpoznawania nastroju utworu muzycznego jest klasyfikator – czarna skrzynka, która zjada nagranie (lub pewną jego reprezentację), przetwarza je, a po chwili z drugiego jej końca wychodzi informacja w stylu „mamy do czynienia ze smutną piosenką”.

Skąd wziąć taki klasyfikator? Wytrenować. Bierzemy czysty klasyfikator z biblioteki i go uczymy: „tu masz taką piosenkę, ona jest smutna, tu masz inną, ta jest wesoła”. Ważne aby takich przykładów było dość dużo (kilkaset, kilka tysięcy).

Problem stworzenia działającego klasyfikatora rozbiliśmy więc na dwa pod-problemy:

  • „rekrutacja” niedoświadczonego, chętnego do nauki klasyfikatora
  • wytrenowanie go

Czytaj dalej

[MoodOfTheSong] 0. Zaczynamy!

Biorę udział w tegorocznej edycji konkursu Daj się poznać. Konkurs polega na rozwijaniu przez 3 miesiące projektu o otwartych źródłach oraz regularnym opisywaniu tego procesu na blogu.

Projekt, nad którym będę pracował to system do rozpoznawania nastroju utworów muzycznych. Będzie to coś w stylu maszynki, która na wejściu przyjmie plik MP3, a zwróci informację o tym czy nagranie jest smutne, wesołe, energiczne itp.

Czytaj dalej