首页 > 解决方案 > h2o 聚合方法“none”将未知词映射到 NAN 而不是向量

问题描述

我目前正在使用 h2o.ai 来执行一些 NLP。我在 Word2Vec 中有一个训练有素的语料库模型,并使用“Average”方法成功聚合了许多记录。当我想通过使用这个 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 模型对它们进行编码以获得一袋单词。底部是一个草稿循环,我用它来放置正确的向量和正确的记录。让我知道是否需要澄清。

标签: pythonword2vech2o

解决方案


不幸的是,区分字典中缺失的单词和用于划分记录开头和结尾的 NA 的功能目前不可用。我在这里制作了一张 jira 票跟踪问题。请随时评论或更新票证。


推荐阅读