TensorFlowのドキュメントから、tf.feature_column.categorical_column_with_vocabulary_list
を使用して、文字列を入力として受け取り、ワンホットベクトルを出力する機能列を作成する方法は明らかです。例えば
vocabulary_feature_column =
tf.feature_column.categorical_column_with_vocabulary_list(
key="vocab_feature",
vocabulary_list=["kitchenware", "electronics", "sports"])
"kitchenware"
が[1,0,0]
にマップし、"electronics"
が[0,1,0]
にマップするとします。私の質問は、機能として文字列のリストを使用することに関連しています。たとえば、機能値が["kitchenware","electronics"]
の場合、必要な出力は[1,1,0]
になります。入力リストの長さは固定されていませんが、出力ディメンションは固定されています。
ユースケースは、ストレートバッグオブワードタイプのモデルです(明らかに、語彙リストがはるかに大きくなります!)。
これを実装する正しい方法は何ですか?
tf.feature_column.indicator_columnを使用する必要があります https://www.tensorflow.org/versions/master/api_docs/python/tf/feature_column/indicator_column を参照してください
以下は、インジケーター列にデータをフィードする方法の例です。
features = {'letter': [['A','A'], ['C','D'], ['E','F'], ['G','A'], ['X','R']]}
letter_feature = tf.feature_column.categorical_column_with_vocabulary_list(
"letter", ["A", "B", "C"], dtype=tf.string)
indicator = tf.feature_column.indicator_column(letter_feature)
tensor = tf.feature_column.input_layer(features, [indicator])
with tf.Session() as session:
session.run(tf.global_variables_initializer())
session.run(tf.tables_initializer())
print(session.run([tensor]))
どの出力:
[array([[2., 0., 0.],
[0., 0., 1.],
[0., 0., 0.],
[1., 0., 0.],
[0., 0., 0.]], dtype=float32)]