我有一個像post標籤的功能。因此,對於每個觀察,post_tag功能可能是諸如「oscars,brad-pitt,awards」等標籤的選擇。我希望能夠通過運行在谷歌雲機器學習上的估算器API(根據this example,但適用於我自己的問題)將此作爲特徵傳遞給張量流模型構建。tensoflow中的多重編碼(谷歌雲機器學習,tf estimator api)
我只是不確定如何將其轉換爲張量流中的多熱點編碼特徵。我試圖在sklearn中獲得類似於MultiLabelBinarizer的東西。
我認爲this是有點關係,但不是我所需要的。
所以說,我有這樣的數據:
id,post_tag
1,[oscars,brad-pitt,awards]
2,[oscars,film,reviews]
3,[matt-damon,bourne]
我想特徵化它,因爲tensorflow內預處理的一部分,如:
id,post_tag_oscars,post_tag_brad_pitt,post_tag_awards,post_tag_film,post_tag_reviews,post_tag_matt_damon,post_tag_bourne
1,1,1,1,0,0,0,0
2,1,0,0,1,1,0,0
3,0,0,0,0,0,1,1
更新
如果我有post_tag_list在輸入csv中是一個類似「oscars,brad-pitt,awards」的字符串。如果我嘗試那麼做:
INPUT_COLUMNS = [
...
tf.contrib.lookup.HashTable(tf.contrib.lookup.KeyValueTensorInitializer('post_tag_list',
tf.range(0, 10, dtype=tf.int64),
tf.string, tf.int64),
default_value=10, name='post_tag_list'),
...]
我得到這個錯誤:
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/andrew_maguire/localDev/codeBase/pmc-analytical-data-mart/clickmodel/trainer/task.py", line 4, in <module>
import model
File "trainer/model.py", line 49, in <module>
default_value=10, name='post_tag_list'),
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/lookup_ops.py", line 276, in __init__
super(HashTable, self).__init__(table_ref, default_value, initializer)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/lookup_ops.py", line 162, in __init__
self._init = initializer.initialize(self)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/lookup_ops.py", line 348, in initialize
table.table_ref, self._keys, self._values, name=scope)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_lookup_ops.py", line 205, in _initialize_table_v2
values=values, name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/op_def_library.py", line 767, in apply_op
op_def=op_def)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2632, in create_op
set_shapes_for_outputs(ret)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1911, in set_shapes_for_outputs
shapes = shape_func(op)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1861, in call_with_requiring
return call_cpp_shape_fn(op, require_shape_fn=True)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/common_shapes.py", line 595, in call_cpp_shape_fn
require_shape_fn)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/common_shapes.py", line 659, in _call_cpp_shape_fn_impl
raise ValueError(err.message)
ValueError: Shape must be rank 1 but is rank 0 for 'key_value_init' (op: 'InitializeTableV2') with input shapes: [], [], [10].
如果我是來填充每個post_tag_list要像「奧斯卡,布拉德 - 皮特,獎勵,其他,其他,其他,其他,其他,其他,其他「,所以它總是10個長。這是否是一個可能的解決方案?
或者我需要以某種方式知道我可能會在這裏傳遞的所有帖子標籤的大小(有點不適合定義爲新創建的所有時間)。
所有標籤的集合的基數是多少? – rhaertel80
它實際上是開放式的。當有人創建帖子時,如果他們找不到現有的帖子,他們也可以創建新的標籤。到目前爲止,它大約有7k,我們試圖鼓勵它們不要製作新標籤,但是它們是開放式的,意味着新的新聞故事是否會突破新的標籤,從而獲得新的標籤。所以可能實際上將標籤視爲與帖子標題類似的詞並將其放入嵌入空間可能更合適。我正在對標籤和帖子進行doc2vec培訓,並將這些向量作爲密集特徵傳遞。希望有標籤假人用於廣泛的山谷。 – andrewm4894
以前看不見的標籤將被映射到一個或多個「看不見」的權重向量。所以7K就是我所需要的 - 主要是數量級。 – rhaertel80