h2o聚合方法“无”将未知单词映射到NAN而不是矢量

时间:2018-08-21 18:13:49

标签: python word2vec h2o

我当前正在使用h2o.ai执行一些NLP。我在Word2Vec中为我的语料库提供了经过训练的模型,并已成功使用“平均”方法聚合了许多记录。当我想通过使用此w2v模型为每个条目创建一袋单词来为DRF模型创建功能时,就会出现问题。当我使用聚合方法“ none”时,向量将在包含NaN的单列中返回,其中记录的开始和结束,但是模型中的未知词也将映射到NaN而不是未知词向量。这使我无法针对每个记录将向量重新组织成一袋单词,因为由于多余且不可预测的NaN丢失了记录分离关联。有解决办法吗?

我目前将使用原始的标记化列表为原始的双重NaN结构创建索引,该索引用于在记录之间进行区分,然后基于此重组我的向量。只是想把它扔在那里,看看是否有人在处理这个问题,或者是否存在我在互联网上找不到的某种修复程序。

DATA = pd.read_sql(sql, conn1)

steps = [
    (r'[\n\t\’\–\”\“\!~`\"@#\$%\^\&\*()_+\{\}|:<>\?\-=\[\]\\;\',./\d]', ' '), 

    (r'\s+', ' ')
    ]

steps = [ (re.compile(a), b) for (a, b) in steps ] 

def do_steps(anarr):
    for pattern,replacement in steps:
        anarr = pattern.sub(replacement,anarr)
    return anarr

DATA.NARR = DATA.NARR.apply(do_steps)

train_hdata = h2o.H2OFrame(DATA).ascharacter()
train_narr = train_hdata["NARR"]
train_key = train_hdata["KEY"]
train_tokens_narr = train_narr.tokenize(split=' ')

train_vecs = w2v.transform(train_tokens_narr, aggregate_method='NONE')
VECS = train_vecs.as_data_frame()
df = train_tokens_narr.as_data_frame()
B=(VECS.isnull()&df.isnull())
idx = B[B['C1'] == True].index.tolist()
X = []
X.append('')
j=0
for i in tqdm(range(len(VECS.C1)-1)):
    if i in idx:
        X[j]= X[j][:-2]
        j+=1
        X.append('')
    else:
        X[j]= X[j] + str(VECS.C1[i])[:6] + ', '

s = pd.DataFrame({"C1":X})
print(s)

以上是当前代码,希望获取一些记录并使用word2vec模型对一袋单词进行编码。底部是草稿循环,我使用它来将正确的向量与正确的记录一起放置。让我知道是否需要澄清。

1 个答案:

答案 0 :(得分:0)

不幸的是,目前尚无法使用区分字典中遗漏的单词和用于区分记录开头和结尾的NA的功能。我已经制作了一张吉拉票here来跟踪问题。请随时发表评论或更新票证。