タグ

ブックマーク / aidiary.hatenablog.com (81)

  • 統計的声質変換 (1) ロードマップ - 人工知能に関する断創録

    Pythonで音声信号処理(2011/5/14)のつづき。 @r9y9さんの以下のチュートリアル記事をきっかけに興味をもった統計的声質変換の実験をしてみたい。統計的声質変換とはAさんの声を別のBさんの声に変換する技術のこと。 統計的声質変換クッソムズすぎワロタ(チュートリアル編) - LESS IS MORE 「統計的」という名前からわかるように今回対象としているのはデータに基づいた声質変換である。簡単に手順をまとめると、 変換元のAさんと変換先のBさんの音声データを用意する この音声データを学習データとしてAさんの声をBさんの声に変換する統計モデルを学習する Aさんの任意の音声を統計モデルに入力するとBさんの声になって出てくる という感じ。コナンの声が毛利小五郎の声になって出てくるという例の蝶ネクタイ型マイクの背景技術である。あのマイクの中にはコナンの声を毛利小五郎の声に変換する何らかの

    統計的声質変換 (1) ロードマップ - 人工知能に関する断創録
    yuiseki
    yuiseki 2019/02/07
  • 統計的声質変換 (2) ボイスチェンジャーを作ろう - 人工知能に関する断創録

    統計的声質変換 (1) ロードマップ(2015/2/11)の続き。 統計的声質変換の第二回ということでまずは統計的じゃない声質変換の枠組みで簡単なボイスチェンジャーを作ってみたい。いきなり題とずれているけれどここをしっかり理解できていないと統計的な方はまったく歯が立たないため整理しておきたい。 ソース・フィルタモデル 人間の音声は、ノドの声帯を振動させたブザー音が声道、口、唇を通過することで出てくる仕組みになっている。これを数学的にモデル化したのがソース・フィルタモデル。 http://www.kumikomi.net/archives/2010/08/ep30gose.php から引用 このモデルでは、音源にあたるブザー音を作り出し、ブザー音をディジタルフィルタに通すことで音声を作る。音源のパラメータとして声の高さを表すピッチ、声道のパラメータとしてメルケプストラムというのがよく使われ

    統計的声質変換 (2) ボイスチェンジャーを作ろう - 人工知能に関する断創録
    yuiseki
    yuiseki 2019/02/07
  • 逆変換法 - 人工知能に関する断創録

    Pythonによるモンテカルロ法入門(2014/6/20) 逆変換法(Inverse transform sampling)は、[0,1]区間の一様分布から得られた乱数(一様乱数)を変換することで任意の確率分布に従う乱数を得る手法とのこと。このとき必要となるのは変換先の確率分布の累積分布関数(cumulative distribution function: cdf)。累積分布関数(cdf)は確率密度関数(pdf)に比べると影が薄い気がしていましたがここでは大活躍です。逆変換法は、累積分布関数の逆関数を使って一様乱数を変換します。下の例は、一様乱数を指数分布の乱数に変換した例になります。 なぜこれでよいのかわかりづらいのですが、@teramonagiさんの下記の資料が直感的に説明してくれています。 Rで学ぶ逆変換(逆関数)法 from tera monagi 指数分布の例 指数分布(exp

    逆変換法 - 人工知能に関する断創録
    yuiseki
    yuiseki 2014/06/22
  • Pythonによるモンテカルロ法入門 - 人工知能に関する断創録

    PRMLの11章で出てくるマルコフ連鎖モンテカルロ法(Markov chain Monte Carlo methods: MCMC)。ベイズでは必須と呼ばれる手法だけれどいまいち理屈もありがたみもよくわからなくて読み飛ばしていました。 最近、ボルツマンマシンを勉強していて、ベイズと関係ないのにマルコフ連鎖やらギブスサンプラーやらが出てきて格的にわからなくなってきたのでここらで気合を入れて勉強し直すことにしました。 参考にした書籍は「Rによるモンテカルロ法入門」です。PRMLと同じく黄色いなので難易度が高そう・・・このはR言語を使って説明がされていますが、それをPythonで実装しなおしてみようかなーと計画中。numpy、scipyの知らなかった機能をたくさん使うので勉強になりそう。 ただRにしかないパッケージを使われると途中で挫折する可能性が高い・・・あと内容が難しすぎて途中で挫折す

    Pythonによるモンテカルロ法入門 - 人工知能に関する断創録
  • 共役勾配法によるニューラルネットのパラメータ推定 - 人工知能に関する断創録

    Courseraの機械学習ネタの続き。前回は、ロジスティック回帰のパラメータ推定(2014/4/15)に共役勾配法(Conjugate Gradient: CG法)を使いました。今回はより複雑なニューラルネット(多層パーセプトロン)のパラメータ推定に共役勾配法を適用してみました。 以前、多層パーセプトロンで手書き数字認識の実験をしたとき(2014/2/1)は、共役勾配法ではなく、勾配降下法(Gradient Descent)を用いてパラメータの更新式を自分で書いていました。 self.weight1 -= learning_rate * np.dot(delta1.T, x) self.weight2 -= learning_rate * np.dot(delta2.T, z) 勾配降下法は、学習率(learning rate)を適切な値に設定しないと収束が遅い、発散するなど欠点があります

    共役勾配法によるニューラルネットのパラメータ推定 - 人工知能に関する断創録
    yuiseki
    yuiseki 2014/05/22
  • 共役勾配法によるロジスティック回帰のパラメータ推定 - 人工知能に関する断創録

    Courseraの機械学習ネタの続き。今回はロジスティック回帰をやってみます。回帰と付くのになぜか分類のアルゴリズム。以前、PRMLの数式をベースにロジスティック回帰(2010/4/30)を書いたけど今回はもっとシンプル。以下の3つの順にやってみたいと思います。 勾配降下法によるパラメータ最適化 共役勾配法(2014/4/14)によるパラメータ最適化(学習率いらない!速い!) 正則化項の導入と非線形分離 ロジスティック回帰は線形分離だけだと思ってたのだけど、データの高次の項を追加することで非線形分離もできるのか・・・ 使用したデータファイルなどはGithubにあります。 https://github.com/sylvan5/PRML/tree/master/ch4 勾配降下法によるパラメータ最適化 2クラスのロジスティック回帰は、y=0(負例)またはy=1(正例)を分類するタスク。ロジステ

    共役勾配法によるロジスティック回帰のパラメータ推定 - 人工知能に関する断創録
    yuiseki
    yuiseki 2014/04/16
  • 共役勾配法によるコスト関数最適化 - 人工知能に関する断創録

    今回もCourseraの機械学習ネタ。Courseraの講義ではロジスティック回帰やニューラルネットのパラメータ学習に共役勾配法(conjugate gradient method: CG法)やBFGSアルゴリズム(Broyden–Fletcher–Goldfarb–Shanno algorithm)*1 を使っていました。よく使われる勾配降下法(gradient descent method)より強力な最適化アルゴリズムとのこと。勾配降下法に比べてよい点として 学習率を手動で設定する必要がない 高速 という2点が挙げられていました。自分で試してみるとよくわかるけど、学習率の決定は地味に面倒くさいので非常に助かります。デメリットとしては実装が複雑なことが挙げられていました。でも普通は数値計算のプロが書いたライブラリ使うからほとんどメリットしかないね!CourseraではMatlabまたはO

    共役勾配法によるコスト関数最適化 - 人工知能に関する断創録
    yuiseki
    yuiseki 2014/04/15
  • 多層パーセプトロンで手書き数字認識 - 人工知能に関する断創録

    多層パーセプトロンが収束する様子(2014/1/23)の続き。数字認識は前にニューラルネットによるパターン認識(2005/5/5)をJavaで作りましたが今回はPythonです。 今回は、多層パーセプトロンを用いて手書き数字を認識するタスクを実験します。今回からscikit-learnというPython機械学習ライブラリを活用しています。ただ、scikit-learnには多層パーセプトロンの正式な実装はない*1ため多層パーセプトロンのスクリプトはオリジナルです。今回から比較的大きなデータを扱うためなるべく高速に動作し、かつPRMLと変数名を合わせることで理解しやすいようにしました。 digitsデータ 手書き数字データは、MNISTというデータが有名です。PRMLの付録Aでも紹介されています。今回はいきなりMNISTではなく、scikit-learnのdigitsというより単純なデータセ

    多層パーセプトロンで手書き数字認識 - 人工知能に関する断創録
  • パターン認識と機械学習(PRML)まとめ - 人工知能に関する断創録

    2010年は、パターン認識と機械学習(PRML)を読破して、機械学習の基礎理論とさまざまなアルゴリズムを身につけるという目標(2010/1/1)をたてています。もうすでに2010年も半分以上過ぎてしまいましたが、ここらでまとめたページを作っておこうと思います。ただ漫然と読んでると理解できてるかいまいち不安なので、Python(2006/12/10)というプログラミング言語で例を実装しながら読み進めています。Pythonの数値計算ライブラリScipy、Numpyとグラフ描画ライブラリのmatplotlibを主に使ってコーディングしています。実用的なコードでないかもしれませんが、ご参考まで。 PRMLのPython実装 PRML読書中(2010/3/26) 多項式曲線フィッティング(2010/3/27) 最尤推定、MAP推定、ベイズ推定(2010/4/4) 分類における最小二乗(2010/4/

    パターン認識と機械学習(PRML)まとめ - 人工知能に関する断創録
    yuiseki
    yuiseki 2014/01/23
  • 多層パーセプトロンによる関数近似 - 人工知能に関する断創録

    パターン認識と機械学習(PRML)まとめ(2010/8/29)の続きです。以下、つづくかも?になってましたが、2014年はDeep Learningを勉強しよう(2014/1/4)と思っているので、関連するニューラルネットワーク関係の実験結果をもう少し追記します。 今回は、PRMLの5章ニューラルネットワークの中から図5.3にある多層パーセプトロンによる関数近似をPythonで実装してみました。 上の図にあるようにxを入れたときにsin(x)の近似値を出力するようなニューラルネットワークを学習します。もっと詳しく言うと (x, sin(x)) のたくさんの組(訓練データ)を教師データとして用いて、xを入れたときにsin(x)の近似値を出力するようにニューラルネットワークの重みを更新します。 多層パーセプトロン(Multilayer perceptron) p.228にあるようにバイアスパラ

    多層パーセプトロンによる関数近似 - 人工知能に関する断創録
    yuiseki
    yuiseki 2014/01/23
  • Open JTalkで音声合成 - 人工知能に関する断創録

    前回は、音声認識エンジンJulius(2013/7/6)を試してみましたが、今回は、オープンソースで開発されている音声合成エンジンのOpen JTalkで遊んでみました。こちらも日の大学が中心になって開発しているようです。そのわりにページが全部英語で敷居の高さを感じるんだけど(笑) 動作環境は、Mac OS X Mountain Lionです。64bit環境なのでインストールにいろいろ苦労しました・・・ 今回は、とりあえず音声を出すことを目的とし、hts_engine_APIとOpen JTalkの関連などはあとで実験しながら勉強していこうと思います。 hts_engine_APIのインストール hts_engine_APIはコンテキストラベル系列と音響モデルを入力として、スペクトル・基周波数・時間長などのパラメータ系列を生成するエンジンです。hts_engine_API単体では、任意

    Open JTalkで音声合成 - 人工知能に関する断創録
    yuiseki
    yuiseki 2013/09/21
  • Juliusで連続音声認識 - 人工知能に関する断創録

    大語彙連続音声認識エンジンJuliusで遊んでみました。動作環境はMac OS X Mountain Lionです。 準備 コンパイラはXcodeでインストールしたgcc(2013/1/13)を使用しました。 また、Macで動かす場合はPortAudioというライブラリも必要みたいなので、macportsであらかじめインストールしておきました(というか何か別のプロジェクトでインストール済みだった)。 % port installed portaudio The following ports are currently installed: portaudio @19.20111121_4 (active) julius体のインストール Juliusのプロジェクトページからjulius-4.2.3.tar.gzをダウンロードします。サイトの右の方のQUICK DOWNLOADからダウンロ

    Juliusで連続音声認識 - 人工知能に関する断創録
    yuiseki
    yuiseki 2013/07/06
  • 短時間フーリエ変換 - 人工知能に関する断創録

    Pythonで音声信号処理(2011/05/14) 今回は、短時間フーリエ変換(Short-Time Fourier Transform: STFT)を実装してみます。音声信号スペクトルの時間変化を解析する手法です。ある一定の長さの信号サンプルを切り出し、それに窓関数をかけてからフーリエ変換という手順を切り出す範囲を少しずつずらしながら行います。音声を再生しながらリアルタイムにフーリエ変換する必要があるので高速フーリエ変換(2011/6/18)を使ってみます。最終的には、Windows Media Playerなどの音楽プレイヤーでよく見るスペクトルアナライザ(っぽいもの)を作ります。 窓関数 今まで離散フーリエ変換(2011/6/11)や高速フーリエ変換(2011/6/18)を試したときには、切り出した波形サンプルをそのままフーリエ変換していました。しかし、一般的に、切り出した波形に窓関

    短時間フーリエ変換 - 人工知能に関する断創録
    yuiseki
    yuiseki 2013/06/24
  • MacにHTKをインストール - 人工知能に関する断創録

    音声認識音声合成の実験をするために隠れマルコフモデルのライブラリである Hidden Markov Toolkit (HTK) をMac OS X Mountain Lionに導入した。いろいろコンパイルエラーが出てインストールに苦労したのでまとめておく。 コンパイラ macportsのgccではなく、Xcodeのgccを使用した。Mountain LionからX11がデフォルトで入らなくなったみたいなので別途インストール。 Mountain Lion (Mac OS X 10.8)にgccをインストールする X11 および OS X Mountain Lion について /usr/bin/gcc /usr/X11R6/lib /usr/X11R6/includeがあることを確認。 HTKのインストール HTKをダウンロードするにはユーザ登録が必要。登録後に HTK-3.4.1.tar.

    MacにHTKをインストール - 人工知能に関する断創録
    yuiseki
    yuiseki 2013/01/14
  • ライフゲームの世界 - 人工知能に関する断創録

    ニコニコ動画の複雑系コミュニティの発起人のはむくんがライフゲームの世界というとても面白い動画を投稿されています。Twitterでは何度かツイートしてたけど完結したのでブログでも紹介させていただきます。 ライフゲームの世界1 John Horton Conwayが提案したライフゲーム(Conway's Game of Life)の基的なルールを解説しています。また頻繁に現れる4種の物体(ブロック、蜂の巣、ブリンカー、グライダー)を紹介しています。最後の作品紹介は、P416 60P5H2V0 gunというすさまじいパターンが出てきます。グライダー銃から発射したグライダーたちが滑走路を通ります。グライダーの集合先では、発射された複数のグライダーが合体して宇宙船が組み立てられます。 ライフゲームの世界2 いろんな振動子(パルサー、タンブラー、銀河)が鑑賞できます。作品紹介では大量の振動子が勢揃い

    ライフゲームの世界 - 人工知能に関する断創録
    yuiseki
    yuiseki 2013/01/05
  • 2013年の目標 - 人工知能に関する断創録

    今年の目標!今年はわりと具体的。 (1) 音声認識音声合成の深耕 眼の実装(2009/9/28)の続き。今度は、耳と口を実装する技術ってことで音声認識音声合成の勉強を始める。どちらも隠れマルコフモデルがベースなのでPRMLの残りの章も復習しないと(2010/8/29)。隠れマルコフモデルはほとんど使ったことがないのでこれを機会に習熟したい。 幸いなことに音声認識音声合成に関してはオープンソースのプロジェクトがいくつもあるのでそれらのライブラリを使ってみたり、コードを読みながら理解を深めたい。 (2) L-systemの実装 複雑系、フラクタルの非常に興味深い例であるL-systemを実装したい。 (3) Open Dynamics Engine 物理シミュレーションエンジンのODEでいろいろ遊びたい。積ん読していたこのを読むことから。 簡単!実践!ロボットシミュレーション - Op

    yuiseki
    yuiseki 2013/01/03
  • 2012年のまとめ - 人工知能に関する断創録

    2012年の方向性(2012/1/1)のつづき。 今年の目標は、複雑系と音声信号処理の深耕でした。まあ、あまりこれをやると決めてなくていろいろ興味の赴くままに勉強・調査・研究してました。 音声信号処理 こっちは、類似楽曲検索の実験というかなり明白な目標を立てて進めてました。 メル周波数ケプストラム係数(MFCC)(2012/2/25)の理解 音声を簡単に扱うためにSPTKツールの使い方(2012/7/1)の習得 楽曲間の距離として用いたEarth Mover's Distance(2012/8/4)の理解 楽曲特徴量圧縮のためのベクトル量子化(2012/8/13)の理解 と順調に積み重ねて、最終的に 類似楽曲検索システムを作ろう(2012/10/14) で完了!けっこう時間がかかってしまったなぁ。音声信号処理は、完全独学なので基礎知識の習得も平行して進めていたのが原因だな。 信号処理を基礎

    2012年のまとめ - 人工知能に関する断創録
    yuiseki
    yuiseki 2013/01/03
  • ナイーブベイズを用いたテキスト分類 - 人工知能に関する断想録

    今までPRMLを読んで実装を続けてきましたが、10章からは難しくて歯が立たなくなってきたのでここらで少し具体的な応用に目を向けてみようと思います。機械学習の応用先としては画像の方が結果を見ていて面白いんですが、当面は自然言語処理を取り上げます。そんなわけで一番始めの応用は機械学習と自然言語処理の接点として非常に重要なテキスト分類(Text Classification, Text Categorization)の技法たちを試していきたいと思います。テキスト分類は文書分類(Document Classification)という呼び方もあります。テキストと文書は同じ意味です。最初なので自分の知識の整理と入門者への紹介のためにちょっと丁寧にまとめてみました。 テキスト分類とは テキスト分類とは、与えられた文書(Webページとか)をあらかじめ与えられたいくつかのカテゴリ(クラス)に自動分類するタス

    ナイーブベイズを用いたテキスト分類 - 人工知能に関する断想録
    yuiseki
    yuiseki 2012/12/19
  • 類似楽曲検索システムを作ろう - 人工知能に関する断創録

    もう1年以上かけて音声信号処理の勉強をしてきました(Pythonで音声信号処理)。ここらで具体的なアプリケーションとして類似楽曲検索の実験をしてみたのでレポートをまとめておきます。言語はPythonです。 前に 類似画像検索システムを作ろう(2009/10/3) Visual Wordsを用いた類似画像検索(2010/2/27) という画像の類似検索に関するエントリを書きましたが、今回は画像ではなく音楽を対象に類似検索をやってみたいと思います! 今回作る類似楽曲検索システムは、従来からよくあるアーティスト名や曲名などテキストで検索するシステムや購買履歴をもとにオススメする協調フィルタリングベースのシステムとは異なります。WAVEファイルやMP3ファイルなどの音楽波形そのものを入力とするのが特徴です。たとえば、「具体的なアーティストや曲名は知らないけれど、この曲とメロディや雰囲気が似た曲がほ

    類似楽曲検索システムを作ろう - 人工知能に関する断創録
    yuiseki
    yuiseki 2012/10/14
  • SciPyでベクトル量子化 - 人工知能に関する断創録

    ベクトル量子化(Vector Quantization: VQ)とは、ベクトルで表されたデータ集合を有限個の代表的なパターン(セントロイド)に置き換える処理のことです。代表パターン(セントロイド)のリストはコードブック(code book)と呼ばれます。また、クラスタの番号をコードと呼びます。各ベクトルデータは、距離が一番近いコードに置き換えられます。大量のデータを少ない代表パターンで置き換えることができるためデータの圧縮に使えます。ただし、コードブックから元のデータは復元できないため非可逆圧縮になります。 コードブックを学習するためのアルゴリズムの代表例がk-meansクラスタリングです。ベクトルデータをクラスタリングして、各データをそのデータが属するクラスタのセントロイドに置き換えることでベクトル量子化が実現できます。 ベクトル量子化の応用 ベクトル量子化の応用例の一つに、前に取り上げ

    SciPyでベクトル量子化 - 人工知能に関する断創録
    yuiseki
    yuiseki 2012/08/15