私の関数への入力は、h5pyファイルとテキストファイルです。テキストファイルには2つの列があります。最初の列にはいくつかの発話情報があり、2番目の列には発言者の情報があります(その発言に対して)。 h5pyファイルのキー(create_datasetsを使用して作成)は、発声(ファイルの最初の列)です。これらのデータセットのそれぞれは、固定ディメンション(600、)の配列が1つしかありません。 h5pyファイルには、テキストファイルの発声よりも多くの発声があります。テキストファイル内の発話の一部は、h5pyファイルに存在しない場合があります。私の機能のh5pyファイルのデータセットの内容をnumpy配列に読み込む方法は、キーのリストを参照してください。
期待される出力:2つのnumpyの配列
第一のアレイ(形状の((nutts、600)、DTYPE = 'フロート')
第二の配列でなければなりません(私たちはX、それを呼びましょう)
ここで、nuttsは、実際にはh5ファイルに存在するテキストファイルの発声数です(ナット< = total_lines_in_text_file)
注:私はナッツを知らない あらかじめ。私はXとYを動的に作成しなければならない。その発話がh5fileにキーとして存在する場合、私がチェック、テキストファイル内の最初の発声について
:Xを作成するため
方法は、上記の説明から明らかであろう。それが存在する場合、私はnumpyの配列(600次元)をとり、Xの最初の行に入れて、次に繰り返します(私は 'nutts'を事前に知らないので、Xをゼロで初期化することはできません。私は場所でのyに関する
もっとそれらすべてを持っていたら、numpyの配列に辞書を変換する辞書と試してみました:。。 すべてnuttsは(nspkrs < = nutts)nspkrsに対応することができ、複数の発話が同じ話者にマッピングされ得ることができますI 。。numpyの配列形式で、各発話の話者の情報をエンコードしたいspkr1ために、私はSPKRのために、0のラベルを与えるN Iは、n-1のラベルを与える
ここでは、私がやったことです:
h5f = h5py.File('some.h5', 'r')
import pandas as pd
import numpy as np
def load_data(h5f, src_u2s_list):
with open(src_u2s_list) as f:
content = f.read().splitlines()
utt2ivec = {}
utt2lbl = {}
spk2spk_class = {}
spk_id = -1
for u2s in content:
utt, spk = u2s.split()
if spk not in spk2spk_class.keys():
spk_id += 1
spk2spk_class[spk] = spk_id
if utt in h5f.keys():
utt2ivec[utt] = h5f[utt][:]
utt2lbl[utt] = spk2spk_class[spk]
else:
print("Utterance {0} does not exist in h5file".format(utt))
data_X = pd.Series(utt2ivec)
data_y = pd.Series(utt2lbl)
return data_X.values, data_y.values
主な検討事項:
- h5fileは約10万発話を持っており、テキストファイルは約70000発話を持っています。このコードは非常に遅いです
- 私はh5pyファイルを使い慣れていません。コードの提案や全体の再構築は大歓迎です。
- パンダの使用を避けたい。
- 非常に重要:Xとyの発声の順序は同じでなければなりません。つまり、XとYの行は同じ発話に対応する必要があります。
大変申し訳ありませんが、私は混乱を避けるために物事を明確にしたい。
たちは、2D配列に(同じサイズの)アレイの束を収集する際、通常、我々は最初のリストにそれらを追加して、最後にそれから配列を作成し、事前に
スピード以外は、 'utt2ivec adn'と' utt2lbl'の作成に満足していますか?配列の値を持つ辞書のように見えます。あなたの説明はあなたには分かりやすいかもしれませんが、カジュアルな視聴者には複雑に見えます。具体的な例をいくつか使用することができます。 – hpaulj